Servlet
웹 어플리케이션 서버 직접 구현 프로세스
- 서버 TCP/IP 연결 대기 , 소켓 연결
- HTTP 요청 메세지를 파싱해서 읽기
- HTTP 메소드 체크 (POST 방식, /save URL인지)
- Content-Type 확인
- HTTP 메세지 바디 내용 파싱
- 비지니스 로직 실행
- HTTP 응답 메세지 생성 시작
- TCP/IP 응답 전달, 소켓 종료
서블릿 컨테이너
- 톰켓처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함.
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
- 서블릿 객체는 싱글톤으로 관리 (REQUEST, RESPONSE 는 요청마다 새로 생성)
- JSP 도 서블릿으로 변환 되어서 사용
- 동시 요청을 위한 멀티 쓰레드 처리 지원
Thread
- 어플리케이션 코드를 하나하나 순차적으로 실행하는 것은 Thread.
- 자바 메인 메서드를 처음 실행하면 Main 이라는 이름의 Thread 실행.
- Thread가 없다면 자바 어플리케이션 실행이 불가능.
- Thread는 한번에 하나의 코드 라인만 수행.
- 동시 처리가 필요하면 Thread를 추가로 생성.
Thread 장점
- 동시 요청을 처리할 수 있다.
- 리소스(CPU, 메모리)가 허용할 때 까지 처리 가능
- 하나의 Thread가 지연 되어도, 나머지 Thread는 정상 동작한다.
Thread 단점
- Thread는 생성 비용이 매우 비싸다.
(요청이 올때마다 Thread를 생성하면 응답 속도가 늦어 진다.)
- Thread는 컨텍스트 스위칭 비용이 발생한다.
- Thread 생성에 제한이 없다.
(고객 요청이 너무 많이 오면, CPU, 메모리 임계점을 넘어 서버가 죽음)
Thread Pool
- 특징
- 필요한 Thread를 Thread Pool에 보관하고 관리한다.
- Thread Pool에 생성 가능한 Thread의 최대치를 관리한다.(톸켓 최대 200개 기본 설정)
- 사용
- Thread가 필요하면, 이미 생성되어 있는 Thread를 Thread Pool 에서 꺼내서 사용한다.
- 사용을 종료하면 Thread Pool 에 해당 Thread를 반납한다.
- 최대 Thread가 모두 사용중이어서 Thread Pool에 Thread가 없으면 기다리는 요청은 거절하거나 특정 숫자만큼만 대기하도록 설정할 수 있다.
- 장점
- Thread 가 미리 생성되어 있으므로, Thread를 생성하고 종료하는 비용이 절약되고 응답 시간이 빠르다.
- 생성 가능한 Thread의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리할 수 있다.
- 실무 팁
- WAS의 주요 튜닝 포인트는 최대 쓰레드(MAX Thread) 수이다.
- 최대 Thread 를 너무 낮게 설정하면 동시 요청이 많을 시 클라이언트 금방 응답 지연
- 최대 Thread 를 너무 높게 설정하면 CPU, 메모리 리소스 임계점 초과로 서버 다운
- 장애 발생시 클라우드면 서버 늘리고 이후 튜닝 클라우드가 아니라면 그냥 튜닝 필요.
출처 김영한의 스프링 로드맵 - 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술