Tomcat 대표적 외부설정 종류
스프링 MVC에서 Web Application Server
로 사용되는 Tomcat은 외부 설정을 통해 구성하고자 하는 서버의 목적에 맞게 변경할 수 있다.
1. server.tomcat.max-connections
서버가 한번에 맺을 수 있는 커넥션의 최대 갯수를 의미한다.
2. server.tomcat.accept-count
서버가 맺은 커넥션의 갯수가 server.tomcat.max-connections
를 초과했을 때, OS가 TCP/IP 스택에서 대기시킬 커넥션의 최대 갯수
3. server.tomcat.threads.max
스레드 풀의 크기
4. server.tomcat.threads.min-spare
항상 활성화 시켜놓을 스레드의 갯수
BIO 에서 바뀐 NIO가 어떻게 커넥션과 스레드수를 별도로 분리해냈는지.
기존 BIO를 활용하던 Tomcat은, Max-connections = threads.max
였다.
BIO Connector
각 커넥션에 하나의 스레드를 할당하던 방식
즉 ServerSocket에서 커넥션이 만들어질때마다, 즉각적으로 스레드를 할당하던 방식 ( Thread Pool 내의 )
즉 커넥션의 생명주기 동안 스레드가 점유 된다.
하지만, Connection이 만들어진 동안 항상 데이터 전송이 이뤄지는것은 아니다. 긴 생명주기 동안 데이터의 전송은 일시적으로 이뤄진다.
Connection의 생명주기와 스레드를 분리하기 위해 도입된 것이 NIO
이다.
NIO Connector
서버와 연결된 커넥션들을 하나의 스레드로 처리할 수 있도록 구현해낸 방식.
각 커넥션에서 보낸 데이터를 읽을 수 있을 때, 실제로 스레드를 할당한다. 이후, 읽을 데이터가 없다면 스레드를 스레드 풀을 반납하는 방식으로 구현되어 있다.
두 Connector 모두 스레드 풀을 사용한다는 점에서 최대한의 효율성을 하지만, 이는 톰캣이 서블릿 모델에 의존하기 때문이다.
예를 들면, java NIO로 만들어진 Netty는 기존 서블릿 모델에 의존하지 않고 리액트 패턴을 바탕으로 구현된 서버로, 훨씬 적은량의 쓰레드로 고성능 처리를 가능하도록 한다.
NIO와 BIO의 차이점
BIO: 커넥션이 만들어지자 마자, 스레드가 고정. -> 동시 처리 가능한 커넥션 갯수 = 스레드 풀 크기
NIO: 하나의 스레드가 여러 커넥션을 처리할 수 있게 됨 커넥션과 스레드 수를 별도로 관리 가능.
정리
Tomcat
에서 사용되는 NIO와 BIO 모두 스레드 풀을 활용한다는 점은 같다.
하지만, Tomcat의 기본 Connector가 BIO Connector -> NIO Connector NIO로 바뀜으로써 커넥션이 준비되었을 때(read 가능한 상태일 때)만 스레드를 할당하게 변경됐다. 이를 통해, 하나의 스레드가 여러 커넥션을 처리할 수 있도록 하여, 스레드 수와 커넥션 수를 별도로 관리할 수 있게 해줍니다.
즉, NIO를 사용함으로써 커넥션과 스레드를 독립적으로 분리해냈다. 이를 통해 서버는 다량의 커넥션을 유지하게 됐으며,
스레드를 더 효율적으로 운용함으로써 서버의 TPS를 향상시켰다.
'Spring' 카테고리의 다른 글
Cache Strategy (0) | 2025.06.13 |
---|