전체 과정을 한 눈에 정리해봤다.
웹에서 HTTP 메세지를 서버에 요청
⬇️
신호를 받은 WAS의 Connector는 CPU에 스레드 하나를 배정하라 요청함.
⬇️
CPU는 OS의 지침에 따라 스레드풀에서 하나를 꺼내 요청에 배정해줌.
(이때부터 모든 실행은 스레드)
⬇️
WAS의 Connector에서 HTTP 메세지를 파싱해 request, response 객체 생성
⬇️
스레드가 요청/응답 객체를 가지고 서블릿 컨테이너에 전달
⬇️
서블릿 컨테이너가 그 요청에 해당하는 서블릿 객체를 찾아 전달
⬇️
서블릿 객체의 service() 메서드가 실행
⬇️
비지니스 로직 실행
스레드 라는 개념이 실행 단위이기도 하면서 객체이기도 하다 라는 걸 이해하는데 시간이 좀 걸렸다.
java.lang.Thread 의 스레드 객체는 관리용 번호표
실행 흐름은 결국 전기 신호고 그냥 오는대로 다 받으면 서버가 다운될 수 있다. 그래서 입장권 역할의 스레드 객체를 만들어 이 객체를 배정 받아야만 실행을 할 수 있도록 제한을 걸어둔 것이다.
그리고 요청의 정보를 스레드가 저장할 수 있어야 하기 때문에 "객체" 라는 형태가 필요하다.
즉, 요청의 정보를 저장하고 입장제한기능도 수행하기 위해서 스레드는 "객체"라는 형태가 필요하다는 것이다.