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 붙이는 이유
- 상태 변수에 접근할 때는 언제나 동기화를 사용한다.
- 캡슐화나 데이터 은닉은 안전한 클래스 작성에 도움이 된다.