개념

종류 설명
OS 스레드 운영체제가 직접 관리하는 기본적인 실행 단위
OS 스레드는 CPU 코어(하드웨어)에서 실행됨
Tomcat의 스레드 풀 Java 애플리케이션은 운영체제의 스레드 API를 사용해 스레드를 생성 및 관리
Java 스레드는 OS 스레드와 1:1로 매핑됨
JVM의 스레드는 OS 스레드 위에서 동작
JVM 스레드는 OS 스레드의 추상화 > 결국 OS 스레드에서 실행됨

Tomcat의 메인 프로세스는 운영체제에서 하나의 OS 스레드로 실행
Tomcat은 HTTP 요청을 처리하기 위해 스레드 풀을 사용
클라이언트가 HTTP 요청 보내면, 톰캣은 스레드 풀에서 사용가능한 스레드를 하나 선택해 요청 처리
할당된 스레드는 HTTP 요청의 생명주기 동안 유지됨
요청이 끝나면 스레드는 반환 및 재사용됨
요청당 새로운 OS 스레드를 생성하는 대신, 일정 수의 스레드를 미리 만들어두고 재사용
스레드 풀의 크기는 조정할 수 있으며, OS 스레드 수와 연관됨

스프링과 내장 Tomcat 스레드의 동기화

스프링은 톰캣 위에서 동작하며 요청을 처리하는 데 있어 Tomcat의 스레드 풀을 그대로 사용한다.
디스패처 서블릿은 톰캣 스레드에서 실행되며, 요청-응답 처리 과정 전체가 동일한 스레드에서 이뤄짐
스프링은 직접적으로 OS 스레드를 관리하지는 않으나 스레드 풀 관리, 비동기 처리 등을 사용해 스레드 동작을 조정함.
고로, 스프링의 특별한 점은 추상화된 스레드 관리와 유연성에 있음.
- 개발자는 OS 스레드 - Tomcat 스레드 풀 간 동작에 대해 고민할 필요 없이 비동기 처리나 스레드 풀 설정을 스프링 내에서 쉽게!
- 스프링 웹플럭스 쓰면 효율 좋아지는 것도 있는데 부수적 효과
- 적절한 스레드풀 크기와 큐 크기 설정하면 요청 처리 성능이 극대화됨

비고

1.

레퍼런스

1. 멘토링 강의, 도서관

 

+ Recent posts