Develop(개발)

스프링이 어떻게 여러 요청을 동시에 처리할 수 있을까?

seongmik 2024. 3. 10. 23:10
728x90
반응형

스프링의 다중 요청 처리

우선 스프링은 멀티쓰레딩 환경입니다.

그렇기 때문에 동시에 발생하는 여러 요청에 대해서 여러 쓰레드로 나눠서 비동기로 요청을 처리할 수 있습니다.

그러면 스프링에서 멀티쓰레딩을 어떻게 지원할까요?

 

스프링 내장 서블릿 컨테이너 Tomcat

스프링은 기본적으로 설정된 서블릿 컨테이너로 내장 웹서버인 Tomcat을 사용합니다.

이 Tomcat에서 멀티쓰레딩을 지원하기 위한 쓰레드풀을 기본적으로 생성해서 관리합니다.

쓰레드풀이란 쓰레드를 생성하고 제거하는데 드는 컨텍스트 스위칭과 같은 오버헤드를 줄이기 위해 미리 쓰레드를 만들어두고 관리하는 패턴입니다.

이 쓰레드풀의 쓰레드들을 통해 비동기 요청을 처리합니다.

 

Tomcat 쓰레드풀 기본 설정

server:
  tomcat:
    threads:
      max: 200
      min-spare: 10
    max-connections: 8192
    accept-count: 100
    connection-timeout: 20000

Tomcat의 기본 쓰레드풀 설정입니다.

  1. max: 이 값은 톰캣에서 사용할 수 있는 최대 스레드 수를 나타냅니다. 즉, 이 기본 설정에 따르면 최대 200개의 스레드가 풀에 있을 수 있습니다.
  2. min-spare: 이 값은 풀에 유지될 최소한의 유휴 스레드 수를 나타냅니다. 이것은 톰캣이 스레드를 다시 생성하는 오버헤드를 줄이기 위해 필요한 최소 스레드 수를 보장합니다.
  3. max-connections: 이 값은 서버가 허용하는 최대 연결 수를 나타냅니다. 즉, 기본적으로 동시에 처리할 수 있는 최대 연결 수가 8192개입니다.
  4. accept-count: 이 값은 서버가 동시에 처리할 수 있는 연결 요청의 최대 대기 큐 크기를 나타냅니다. 즉, 이 기본 설정에 따라 최대 100개의 연결 요청이 대기열에 들어갈 수 있습니다.
  5. connection-timeout: 이 값은 연결 시간 초과(ms)를 나타냅니다. 서버가 클라이언트와의 연결을 설정하는 데 허용되는 최대 시간입니다. 기본적으로는 20,000 밀리초(20초)로 설정되어 있으므로, 클라이언트가 연결을 설정하는 데 20초 이상 소요되면 연결이 중단됩니다.

 

 

 

 

 

728x90
반응형