< 쿠키 >

①.쿠키(cookie)?

1) 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법

2) 쿠키는 세션과 달리 상태 정보를 웹 서버가 아닌 클라이언트에 저장된다.

- 예를 들어 어떤 웹사이트를 처음 방문한 사용자가 로그인 인증을 하고 나면 아이디와 비밀번호를 기록한 쿠키가 만들어지고 그 다음부터 사용자가 그 웹 사이트에 접속하면 별도의 절차를 거치지 않고 쉽게 접속할 수 있다.

3) 클라이언트의 일정 폴더에 정보를 저장하기 때문에 웹 서버의 부하를 줄일 수 있다는 것이 장점 이다.

4) 웹 브라우저가 접속했던 웹 사이트에 관한 정보와 개인 정보가 기록되기 때문에 보안에 문제가 있을 수 있다.


< ②.쿠키의 동작 과정 >

1) 쿠키 생성 단계 :주로 웹 서버 측에서 생성한다. 생성된 쿠키는 응답 데이터와 함께 저장되어 웹 클라이언트에 전송 된다.

2) 쿠키 저장 단계 :웹 브라우저는 응답 데이터에 포함된 쿠키를 쿠키 저장소에 보관한다. 쿠키는 종류에 따라 메모리나 파일로 저장된다.

3) 쿠키 전송 단계 :웹 브라우저는 한 번 저장된 쿠키를 요청이 있을때 마다 웹 서버에 전송 한다.

웹 서버는 웹 브라우저가 전송한 쿠키를 사용하여 필요한 작업을 수행할 수 있다. 

 


<③.Cookie class의 메서드 종류 >

메소드 반환 유형 설명
getComment() String 쿠키에 대한 설명을 반환
getDomain() String 쿠키의 유효한 도메인 정보를 반환
getMaxAge() int 쿠키의 사용 가능 기간에 대한 정보를 반환
getName() String 쿠키의 이름을 반환
getPath() String 쿠키의 유효한 디렉터리 정보를 반환
getSecure() boolean 쿠키의 보안 설정을 반환
getVersion() int 쿠키의 버전을 반환
setComment(String) void 쿠키에 대한 설명을 설정
setDomain() void 쿠키의 유효 기간을 설정
setPath() void 쿠키의 유효한 디렉터리를 설정
setSecure() void 쿠키의 보안을 설정
setValue() void 쿠키의 값을 반환
setVersion() void 쿠키의 버전을 설정

< 세션 >

①.세션(cookie)?

1) 클라이언트와 웹 서버 간의 상태를 지속적으로 유지하는 방법

 - 예를 들면 웹 쇼핑몰에서 장바구니나 주문 처리와 같은 회원 전용 페이지의 경우 로그인 인증을 통해 사용 권한을 부여

 - 다른 웹 페이지에 갔다가 되돌아와도 로그인 상태가 유지되므로 회원 전용 페이지를 계속 사용할 수 있다.

 - 이렇게 사용자 인증을 통해 특정 페이지를 사용할 수 있도록 권한 상태를 유지하는 것

2) 웹 서버에서만 접근이 가능하므로 보안 유지에 유리하며 데이터를 저장하는데 한계가 없다.

3) 오직 웹 서버에 존재하는 객체로 웹 브라우저마다 하나씩 존재하므로 웹 서버의 서비스를 제공받는 사용자를 구분하는 단위가 된다.

4) 웹 브라우저를 닫기 전까지 웹 페이지를 이동하더라도 사용자의 정보가 웹 서버에 보관되어 있어 사용자 정보를 잃지 않는다.


< 쿠키와 세션의 차이 >

메소드 쿠키 세션
사용 클래스 Cooke 클래스 HttpSession 인터페이스
저장 형식 텍스트 형식 Object형
저장 장소 클라이언트 서버(세션 아이디만 클라이언트에 저장)
종료 시점 쿠키 저장시 설정(설정하지 않을 경우
웹 브라우저 종료 시 소멸)
정확한 시점을 알 수 없다
리소스  클라이언트의 리소스 사용 서버의 리소스 사용
보안 클라이언트에 저장되므로 사용자의
변경이 가능하여 보안에 취약
서버에 저장되어 있어 상대적으로 안정적

 

 

출처: 인터넷프로그래밍 교안

'Developer 지식' 카테고리의 다른 글

서버프로그램 구현  (0) 2023.05.22
스프링과 스프링부트  (0) 2023.05.16
오버라이딩과 시그니처의 연관성  (0) 2023.05.14
숫자 리터럴(literal)  (0) 2023.05.14
PDT,UDDT/기본자료형,사용자 정의 자료형  (0) 2023.05.14

 

메서드 오버라이딩은 하위 클래스에서 상위 클래스의 이미 정의된 메서드를 재정의하는 과정을 의미한다.

 

이때, 하위 클래스에서 재정의된 메서드는 상위 클래스의 메서드와 '시그니처'가 반드시 동일해야 한다.

 

만약 시그니처가 동일하지 않다면, 이는 오버라이딩이 아닌 새로운 메서드를 정의한 것으로 간주된다.

메서드 오버라이딩에서 '시그니처'는 매우 중요한 역할을 한다. 시그니처는 메서드의 이름, 매개변수의 타입 및 개수 등을 포함한다. 오버라이딩된 메서드는 상위 클래스의 메서드와 시그니처가 동일해야 하지만, 메서드의 구현 내용은 하위 클래스에서 자유롭게 재정의될 수 있다. 이렇게 되면, 하위 클래스에서 오버라이딩된 메서드를 호출할 때 상위 클래스의 메서드 시그니처를 사용하게 된다.

public class Animal {
    public void makeSound() {
        System.out.println("The animal makes a sound");
    }
}

public class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow");
    }
}

public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Cat();
        Animal animal2 = new Dog();
        animal1.makeSound();
        animal2.makeSound();
    }
}

위 코드에서, Animal 클래스 makeSound() 메서드가 정의..

Cat 클래스와 Dog 클래스는 Animal 클래스를 상속받고, makeSound() 메서드를 오버라이딩하여 재정의. 각 클래스의 makeSound() 메서드는 다른 메시지를 출력...

main() 메서드에서는 Cat와 Dog 인스턴스를 생성하여 Animal 타입의 변수에 저장하고, 각각의 makeSound() 메서드를 호출합니다. 이때 makeSound() 메서드의 시그니처는 Animal 클래스에 정의된 것과 동일. 따라서 컴파일러는 Cat 인스턴스의 makeSound() 메서드와 Dog 인스턴스의 makeSound() 메서드를 각각 호출하며, 출력 결과는 각각 "Meow"와 "Woof"가 된다.

숫자 리터럴은 소스 코드에서 직접 나타나는 숫자 값이다. 예를 들어, 123, 3.14, -5, 0b1010, 0xFF 등이 모두 숫자 리터럴에 해당 된다.

숫자 리터럴은 프로그램에서 사용되는 다양한 데이터 타입으로 해석된다.

예를 들어, 123은 정수 리터럴이고, 3.14는 실수 리터럴 이다.

숫자 리터럴의 데이터 타입은 소수점, 접두사, 접미사 등에 따라 결정 된다.

Java에서는 다양한 진법으로 표현된 숫자 리터럴도 지원한다. 예를 들어, 0b1010은 이진수 1010을 나타내는 정수 리터럴이다.


0b0: 이진수 0을 나타낸다. 10진수로는 0이다.

0b1: 이진수 1을 나타낸다. 10진수로는 1이다.

0b101: 이진수 101을 나타낸다. 10진수로는 5이다.

0b1100: 이진수 1100을 나타낸다. 10진수로는 12이다.


또한, 숫자 리터럴에는 수치 값 외에도 특별한 값을 나타내는 특수한 리터럴도 있다. 예를 들어, null은 null 값이 들어 있는 참조 변수를 나타내는 특수한 리터럴이다.

 

 

참고: https://www.youtube.com/watch?v=D1Yg1Q9Zd0A&list=PLG7te9eYUi7toebNnbA1cZNRDoUcHmsGd&index=14 

 

PDT(Primitive Data Type)


①PDT (Primitive Data Type): 기본 자료형이라고도 불리며, Java에서 제공하는 8가지 기본 자료형을 의미 한다.

PDT는 8가지 형태가 있다.

boolean, byte, double,short,int,long,float, char

이러한 기본 자료형은 정수, 실수, 문자,논리 등의 값을 저장할 수 있는 데이터 타입이다.

객체가 아니기 때문에, 메소드를 호출하거나 속성에 접근할 수 없다. 따라서, 기본 타입을 객체로 다루기 위해서는 해당 타입을 참조 타입으로 변환해야 한다. Java에서는 이를 위해 오토박싱(Auto-boxing)이나 오토언박싱(Auto-unboxing) 기능을 제공한다.


상세

boolean : 논리값을 저장하는 데이터 타입으로, true와 false만을 값으로 가진다.

byte : 8비트 정수 값을 저장하는 데이터 타입으로, 범위는 -128부터 127까지 이다.

short : 16비트 정수 값을 저장하는 데이터 타입으로, 범위는 -32,768부터 32,767까지 이다.

int : 32비트 정수 값을 저장하는 데이터 타입으로, 범위는 -2,147,483,648부터 2,147,483,647까지 이다.

long : 64비트 정수 값을 저장하는 데이터 타입으로, 범위는 -9,223,372,036,854,775,808부터 9,223,372,036,854,775,807까지 이다.

float : 32비트 실수 값을 저장하는 데이터 타입으로, IEEE 754 표준에 따라 부동소수점 값으로 표현 된다.

double : 64비트 실수 값을 저장하는 데이터 타입으로, IEEE 754 표준에 따라 부동소수점 값으로 표현 된다.

char : 16비트 Unicode 문자 값을 저장하는 데이터 타입으로, 범위는 0부터 65,535까지 이다.

UDDT(User-Defined Data Type)


UDDT (User-Defined Data Type): 사용자 정의 자료형이라고도 불리며, 프로그래머가 필요에 따라 자신이 원하는 데이터 타입을 정의하여 사용할 수 있다.

이를 위해 클래스를 선언하고, 이를 이용하여 객체를 생성하여 사용한다.

즉, 클래스를 사용하여 사용자가 원하는 자료형을 만들 수 있는 것.

예를 들어,

학생(Student)이라는 자료형을 만들어 이름, 학번, 전공 등의 정보를 저장할 수 있다.

PDT와 UDDT는 모두 Java에서 데이터를 다룰 때 사용되는 개념이며, 이들을 잘 이해하고 사용하는 것이 Java 프로그래밍에 있어서 중요한 요소 중 하나 이다.

 

참고: https://www.youtube.com/watch?v=j5vhNKT6hG4&list=PLG7te9eYUi7toebNnbA1cZNRDoUcHmsGd&index=13 

 

https://maven.apache.org/download.cgi

Maven – Download Apache Maven

C:\Program Files 경로에 설치

설치 후 환경변수

1.JAVA_HOME

C:\Program Files\Java\jdk-17

2.MAVEN_HOME

C:\Program Files\apache-maven-3.9.1

path에서

%JAVA_HOME%\bin

%MAVEN_HOME%\bin

H2 Database Engine Download/settings

Java8 se 다운

https://www.oracle.com/kr/java/technologies/javase/javase8-archive-downloads.html

Intellij Ultimate 다운

https://www.jetbrains.com/ko-kr/idea/download/#section=windows

H2 Database Engine 다운로드

H2 Database Engine

JDBC URL jdbc:h2:~/test로 바꾼다.

Intellij Ultimate file->new->project maven

아래 코드는 pom.xml에 복사 붙여넣기


	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		3.0.4
		 
	
	com.example
	demo
	0.0.1-SNAPSHOT
	demo
	Demo project for Spring Boot
	
		17
	
	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.boot
			spring-boot-devtools
			runtime
			true
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
			com.h2database
			h2
			runtime
			2.1.214
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	


밑의 코드는 main->rescources->META-INF.maven에 있는 xml에 붙여넣어야 한다.

ssg(build time) vs SSR(request time)

ssg: 빌드 타임에 미리 정적 파일 생성

ssr: 특정 url 접근할 때 그때서야 pre-render

next-js 둘 다 제공함.

next.js활용하면 페이지별로 Pre-rendering 방식 선택 가능.

getStaticProps -> ssg

getServerSideProps -> ssr


-Marketing pages

-blog post

-E-commerce product listings

-Help and documentation

정적으로 만들어 놓으면 업데이트될 때 동안 한동안 변하지 않는 것들을 상대로 하면 좋다.

적용 여부 선택 기준

사용자가 페이지를 요청하기 전에 Pre-render 할 수 있는가?

Yes라면 SSG(로그인하기 전에도 볼 페이지를 미리 정할 수 있으면)

No 라면 SSR 혹은 ISR 혹은 CSR(로그인 구분 하고 나서 Pre-render)


만약에 SSG를 쓰고 있다가 SSR로 바꾸려고 하더라도 굉장히 편하다

getStaticProps에서 getServerSideProps로만 바꿔주면 되기 때문에..

ssg의 2가지 케이스

1. 외부 데이터 없이(외부 API, 외부 DATA, DB) 없이 정적인 것) pre-rendering

2. 외부 데이터를 가져와서(외부의 DB, API, DATA) pre-rendering

2번을 공부하기 위해 다른 파일을 읽어보자

https://nextjs.org/learn/basics/data-fetching/blog-data 들어가서

아래 코드들을 복사하자. 그리고 blog파일의 root에 "post" Folder를 만든 후

pre-rendering.md File 생성한다. 그 이후 아래 코드를 넣어준다.

---
title: 'Two Forms of Pre-rendering'
date: '2020-01-01'
---

Next.js has two forms of pre-rendering: **Static Generation** and **Server-side Rendering**. The difference is in **when** it generates the HTML for a page.

- **Static Generation** is the pre-rendering method that generates the HTML at **build time**. The pre-rendered HTML is then _reused_ on each request.
- **Server-side Rendering** is the pre-rendering method that generates the HTML on **each request**.

Importantly, Next.js lets you **choose** which pre-rendering form to use for each page. You can create a "hybrid" Next.js app by using Static Generation for most pages and using Server-side Rendering for others.

이후 하나 더.. ssg-ssr.md file도 만들어서 아래 코드를 복사 붙여 넣기 한다.

---
title: 'When to Use Static Generation v.s. Server-side Rendering'
date: '2020-01-02'
---

We recommend using **Static Generation** (with and without data) whenever possible because your page can be built once and served by CDN, which makes it much faster than having a server render the page on every request.

You can use Static Generation for many types of pages, including:

- Marketing pages
- Blog posts
- E-commerce product listings
- Help and documentation

You should ask yourself: "Can I pre-render this page **ahead** of a user's request?" If the answer is yes, then you should choose Static Generation.

On the other hand, Static Generation is **not** a good idea if you cannot pre-render a page ahead of a user's request. Maybe your page shows frequently updated data, and the page content changes on every request.

In that case, you can use **Server-Side Rendering**. It will be slower, but the pre-rendered page will always be up-to-date. Or you can skip pre-rendering and use client-side JavaScript to populate data.

---

title: 'When to Use Static Generation v.s. Server-side Rendering'

date: '2020-01-02'

---

이렇게 -으로 감싸진 것을 YAML Front Matter라고 한다. Head component에 넣어야 되는 Meta data처럼, 이 블로그 글에 대한 metadata를 담고 있다.

이 파일을 해석하기 위해선 yarn add gray-matter명령어를 설치해야 한다.

그리고 https://nextjs.org/learn/basics/data-fetching/implement-getstaticprops에 가서 6page에 있는 걸 복사. 이후 Root에 lib Folder 만들고,

post.js 생성

import fs from 'fs';
import path from 'path';
import matter from 'gray-matter';

//Service가 돌고 있는 root 즉 blog에 있는,'posts' 파일(md file저장 해놓은 곳)
const postsDirectory = path.join(process.cwd(), 'posts');

export function getSortedPostsData()/*정렬된 데이터를 가져옴*/ {
  // Get file names under /posts
  //fs는 파일 시스템을 읽어오는 node.js의 라이브러리다.
  const fileNames = fs.readdirSync(postsDirectory);
  const allPostsData = fileNames.map((fileName) => {
    // Remove ".md" from file name to get id
    // .md를 제거하면 pre-rendering ssg-ssr만 남고

    //그것을 id로 삼는다.
    const id = fileName.replace(/\.md$/, '');

    // Read markdown file as string
    //fileName은 여전히 md가 있다.
    //fullPath는 root에서 pre-rendering.md가 만들어질거고
    const fullPath = path.join(postsDirectory, fileName);
    //직접 utf-8형식으로 읽어서 fileContents에 담는다.
    const fileContents = fs.readFileSync(fullPath, 'utf8');
    //담고난 뒤엔 -으로 감싸진 부분만 해석 하기 위해  grey-matter 설치했다.

    //matter로 감싸주면 matterResult로 metadata를 다 읽어낸다.
    // Use gray-matter to parse the post metadata section
    const matterResult = matter(fileContents);

    // Combine the data with the id
    //id는 파일 이름이었고, 그것을 빼내주는 것이 getSortedPostsData 함수다.
    return {
      id,
      ...matterResult.data,
    };
  });
  // Sort posts by date
  //날짜가 느린것을 앞에보내고 날짜가 빠른 것을 앞에 보내는 것
  //즉 최신 순이다.
  return allPostsData.sort((a, b) => {
    if (a.date < b.date) {
      return 1;
    } else {
      return -1;
    }
  });
}

이후 index.js에서

import Head from 'next/head'
import Layout, { siteTitle } from '../components/layout'
import { getSortedPostsData } from '../lib/post'
import utilStyles from '../styles/utils.module.css'

//ssr로 바꾸고 싶으면 getServerSideProps로 바꾸면 끝임
export async function getStaticProps() {
  //ssg Data가 담겨져 있다.
  const allPostsData = getSortedPostsData()

  return {
//ssg가 담겨있는 props retrun
props: {
  allPostsData,
},
  }
}

export default function Home({ allPostsData }) {
  return (
    
      
        {siteTitle}

I love coding 😍

(This is a sample website - you’ll be building a site like this on {' '} our Next.js tutorial.)

Blog

  • {title}
    {id}
    {date}
        
    
  )
}
//allPostsData를 map으로 돌면서 id key로 주고 title,id(파일이름),date를 준다.


CSR로 바꾸는 방법

root경로의 pages 폴더에서 에서 api 폴더를 하나 더 만들고

posts.js 파일 생성. 이후 아래 참조.

//getSortedPostsData 가져온다.
import { getSortedPostsData } from "../../lib/post"

export default function handler(req, res) {
    const allPostsData = getSortedPostsData()
    res.status(200).json({allPostsData})
}

이후 index.js로.. 여기서 getSortedPostsData import를 제거해줘야 한다.

import Head from 'next/head'
import { useEffect } from 'react'
import Layout, { siteTitle } from '../components/layout'
import utilStyles from '../styles/utils.module.css'
import React, { useState } from 'react';
//ssr로 바꾸고 싶으면 getServerSideProps로 바꾸면 끝임
//export async function getStaticProps() {
//ssg Data가 담겨져 있다.
//const allPostsData = getSortedPostsData()
//return {
//ssg가 담겨있는 props retrun
//props: {
//allPostsData,
//},
//}
//}

//CSR로 바꾸는 방법. 
export default function Home() {
const [allPostsData, setAllPostsData] = useState([])
useEffect(()=>{
  //posts에서 response가 오면 json으로 바꿔주고.data가 오면 A
  fetch('/api/posts')
  .then((res) => res.json())
  .then((data) => setAllPostsData(data.allPostsData))
}, [])

  return (
    
      
        {siteTitle}

I love coding 😍

(This is a sample website - you’ll be building a site like this on {' '} our Next.js tutorial.)

Blog

  • {title}
    {id}
    {date}
        
    
  ) 
}

//allPostsData를 map으로 돌면서 id key로 주고 title,id(파일이름),date를 준다.

이렇게 CSR로 바꾸면 File System에서 읽은 값들이 Client Network tap에 보인다.

< Windows11 Terraform 설치 >

 

①. https://developer.hashicorp.com/terraform/downloads  링크 접속.

②.Windows  클릭 후 386 version  Download

③.설치된 File을 압축 해제 한다. 

④.압축 해제 된 파일에 terraform.exe이 있다. 복사 한다. 

 

⑤.해당 경로에 terraform.exe을 붙여넣기 한다.


< 환경 변수 편집 >

⑥.시작 -> 환경 변수 편집

 

Path에 편집을 누른다. 

 

C:\Windows\System32\terraform 입력 후 확인

 


< Version Check >

⑦. cmd 혹은 Powershell 실행 후, "terraform --version" 입력 한다. 

위와 같이, Version check가 가능하다.

Intellij Ultimate Tomcat setting

좌측 상단 위치에 있는 Run  -> Run..->

-> Edit Configurations...

-> + button 클릭,

+ Button 누를 시, 목록 창이 나온다. 내리다보면 Tomcat server이 있다. -> Local 클릭

Tomcat을 Install한 경로에 가서, apache-tomcat-10.1.7 Folder를 클릭 후, Ok button 클릭.

이후 Deployment 클릭.

Deployment에 "+" Click -> "Artifact" Click

두 번째 Gradle : hello : server-0.0.1-SNAPSHOT.war (exploded) click

Application context에 있는 text를 전부 지운다.

이후 Run Click

이후 정상가동 된 것을 확인한다.

응용 계층에서 물리 계층까지(위에서 아래로) A-P-S-T-N-D-P

모든 사람은 데이터 처리가 필요한 듯 하다(All-People-Seem-To-Need-Data-Processing)

물리 계층에서 응용 계층까지 (아래서 위로) P-D-N-T-S-P-A

소시지 피자를 버리지 말아 주세요(Please-Do-Not-Throw-Sausage-Pizza-Away)

upyter nootbook 설치 및 Anaconda Prompt 설치 및 Jupyter nootbook 설정

1.파이썬 설치

https://www.python.org/downloads/windows/

Python Releases for Windows

  1. cmd 실행 후 python --version을 입력하여, 파이썬이 설치 되었는지 확인 한다.
  2. 파이썬이 설치되었다면, pip3 install jupyter 명령어로 jupyter 설치한다.
  3. 설치가 되었다면 python -m notebook으로 서버를 실행 시킨다.

Anaconda Prompt 설치

https://www.anaconda.com/products/distribution

Anaconda | Anaconda Distribution


Jupyter nootbook 설정

1.윈도우 실행창에서 Anaconda Prompt 실행

2.jupyter notebook --generate-confing (엔터)

두번 째 줄의 경로에 가서 파일을 찾는다.

Writing default config to: C:\Users\mypc\.jupyter\jupyter_notebook_config.py

메모장으로 연다.

#c.NotebookApp.notebook_dir = '' 항목을 찾는다(dir 검색어로 찾으면 잘 찾아진다.)

C 드라이브에 jupyter라는 폴더를 하나 만들고, 열려는 파일을 해당 폴더에 넣는다.

그리고 c.NotebookApp.notebook_dir = 'C:\jupyter' 붙여 넣어 준다.

저장 후,

다시 Anaconda Prompt를 실행 후, jupyter notebook 명령어 실행.

매우 빨리 실행 된다.

'Developer 지식' 카테고리의 다른 글

Intellij Ultimate Tomcat setting 방법  (0) 2023.04.21
OSI 7계층  (0) 2023.04.21
32bit와 64bit  (0) 2023.04.13
high address,low address  (0) 2023.04.13
AJAX  (0) 2023.04.13

+ Recent posts