레벨4 Tomcat 미션

@VERO
Created Date · 2023년 09월 01일 01:09
Last Updated Date · 2023년 09월 01일 01:09

9/1

강의

  • 더 깊이 파고들기
    • 각종 도구들을 겨우 지금하는 작업을 완료하는 데 필요한 정도로만 배우고 있다.
    • 그럴 땐 도구나 기술 분야, 각종 기법 같은 것을 깊이 파고드는 법을 배우자. 지금은 Spring 을 깊게 파볼 수 있는 기회다.
    • 대성당을 짓는다고 했을 때 돌무더기를 쌓는 일을 단순하게 보는 것이 아니라, 대성당을 쌓기 위한 일이라고 생각하자. 개념을 쌓는 것이 지루하지만 그 과정이 가치있다는 것을 알아야 한다.
    • 개념의 근원을 따라가는 연습을 하라. 공식 문서가 잘 안 되어 있다면 디버깅을 해보거나, 역컴파일, 리버스 엔지니어링을 해보자.

9/6

Cookie & Session

HTTP 는 Stateless 가 맞는가?

무상태라면 클라이언트 식별은 어떻게 하는 걸까?
-> 쿠키를 통해 클라이언트가 상태를 저장하도록 한다.

Cookie

  • 사용자를 식별하고 세션을 유지하는 웹 기술
  • 웹 서버는 사용자를 식별하기 위한 유일한 값을 할당한다. Set-Cookie 에 이름=값; 형태로 반환한다.
  • 브라우저는 쿠키 정보를 저장할 책임이 있다.

세션은 서버에서 값을 저장하고 id 를 발급한다.
클라이언트와 서버는 Cookie 를 통해 Session Id 를 주고 받는다.

Thread

코드는 JVM 에서 돌아가는데, JVM 내부의 process, main thread 에서 실행된다.
지금까지는 Single Thread 로 실행해온 것.

여러 작업을 한 번에 실행하고 싶을 때

자바 프로그램의 메모리 구조

JVM Spec, Java SE 20 기준

Run-Time Data Areas

  • Method Area (static)
    • 런타임 상수 풀
    • 필드 및 메서드 데이터
    • 메서드 및 생성자 코드
  • Heap
    • 인스턴스
    • 배열
  • JVM Thread

Concurrency

동시에 여러 작업을 처리할 때 Thread 를 사용한다. => 웹 서버

connector.start 를 하면 thread 가 생성된다.

Thread-safe class

  • 상태 변수를 스레드 간에 공유하지 않는다.
  • 상태 변수를 변경할 수 없도록 만든다. -> 인스턴스 변수에 final 붙이는 이유
  • 상태 변수에 접근할 때는 언제나 동기화를 사용한다.
  • 캡슐화나 데이터 은닉은 안전한 클래스 작성에 도움이 된다.