요청이 오면, 서블릿 컨테이너에서 요청에 맞는 서블릿을 연결시켜줘야 한다.
이때, 연결은 쓰레드 단위로 수행한다.
즉, WAS는 요청마다 쓰레드를 생성 해, 요청에 맞는 서블릿은 연결시켜준다.
이떄의 장단점은 아래와 같다.
장점
- 요청마다 쓰레드를 생성해 연결하니까, 동시 요청 처리 가능
- 자원의 한계까지 처리 가능
- 하나의 쓰레드가 지연되도, 나머지 쓰레드들은 정상 수행
단점
- 쓰레드 생성 비용은 매우 비싸고, 큰 문맥 교환 비용이 발생 ➡️ 응답 속도 성능 🔽
- 쓰레드의 생성에는 제한이 없다 ➡️ 많은 요청이 들어오면, 쓰레드를 계속 생성하다, 과부하로 서버가 죽는다.
쓰레드 풀
WAS에서 일정 수만큼의 쓰레드를 미리 만들어서(톰캣의 Default는 200개), 쓰레드 풀에 넣어놓고 사용한다.
즉, 쓰레드를 생성-종료가 아닌 사용-반납의 개념으로 사용하는 것...
장점
- 비싼 쓰레드 생성시 발생하는 높은 비용을 아낄 수 있다. ➡️ 응답 속도의 향상
- 쓰레드의 최대치가 정해져 있으므로, 서버가 쉽게 안죽는다.
실무에서의 팁
WAS의 주요 튜닝 포인트 = 최대 쓰레드 수.
- 이 값이 너무 낮으면? ➡️ 서버 자원을 크게 아낄 수 있지만, 응답 지연이 금방, 자주 된다.
- 이 값이 너무 높으면? ➡️ 서버 자원의 초과로 서버가 죽을 수 있다.
그렇다면, 적합한 최대 쓰레드 풀은 어떻게 찾을까?
- 아파치 AB, 제이미터, nGrinder 등의 도구로 성능 테스트를 통해 찾음
강의 출처
https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1
'스프링' 카테고리의 다른 글
[Spring] 객체 지향 설계 SOLID 개념과 적용 예시 (0) | 2024.03.25 |
---|---|
스프링 - WebSocket (0) | 2024.03.07 |
[Query DSL] Query DSL 왜 쓸까? (0) | 2024.03.07 |
동시 요청 문제 - ConcurrentHashMap (1) | 2024.02.28 |
스프링 테스트 - 통합 테스트와 단위 테스트 (0) | 2024.02.22 |