Spring

Spring Boot - 톰캣 Thread Pool(스레드 풀)

victory-line 2024. 12. 30. 23:36

스프링 부트 애플리케이션은 내장된 서블릿 컨테이너(Tomcat)에서 클라이언트 요청을 처리함. 

이 때 톰캣의 스레드 풀이 효율적인 요청을 관리함.

 

스레드 풀이란?

-> 미리 일정 개수의 스레드를 생성하여 관리하는 기법

 

스레드 풀의 장점

  • 스레드 생성 비용 감소: 새로운 스레드를 생성하는 데 필요한 시스템 자원을 절약
  • 효율적인 리소스 사용: 미리 생성된 스레드를 재활용하여 서버 리소스를 최적화
  • 안정적인 성능: 설정된 제한을 통해 과도한 요청으로 인한 성능 저하를 방지

 

톰캣의 스레드 풀은 총 세가지 단계로 동작함

1. 초기화 : 애플리케이션이 시작 될 때 서블릿 컨테이너에서 미리 설정된 수의 스레드를 생성해서 스레드 풀에 보관함.

2. 요청 처리 : 클라이언트로부터 HTTP 요청이 들어오면 스레드 풀에서 유휴 상태인 스레드가 할당되어 해당 요청을 처리함.

3. 반환 : 요청 처리가 완료되면 스레드는 다시 스레드 풀로 반환됨.

 

스프링 부트는 요청때마다 스레드를 다시 생성하지 않고 미리 생성된 스레드를 재사용 해서

자원을 효율적으로 관리함.

 

application.properties와 application.yml에서 스레드 풀 설정을 할 수 있음(예제는 기본값임)

# application.properties
# 최대 스레드 수 설정
server.tomcat.threads.max=200

# 최소 유휴 스레드 수 설정
server.tomcat.threads.min-spare=10

# 최대 대기 요청 수 설정
server.tomcat.accept-count=100

해당 값으로 설정할 경우 
server.tomcat.threads.max=200  : 최대 200개의 요청을 동시에 처리

server.tomcat.threads.min-spare=10 : 항상 최소 10개의 스레드가에 유휴 상태로 대기

server.tomcat.accept-count=100 : 모든 작업 스레드가 사용 중일 때, 최대 100개의 요청을 대기열에 보관

 

결론 : 스프링 부트는 내장된 톰캣의 스레드 풀로 요청을 효율적으로 관리함.