반응형
톰캣과 네티는 방식 자체가 다르다.
Tomcat: 기본적으로 동기 / 블로킹 I/O
- 과거에는 BIO (Blocking I/O) 방식만 지원
- 현재는 NIO 기반도 사용 가능하지만, Servlet API 자체가 동기 처리 구조
- 요청마다 별도의 스레드가 생성되어 처리 (Thread-per-request model)
- Spring MVC 같은 전통적인 웹 프레임워크와 잘 통합됨
Netty: 완전한 비동기 / 논블로킹 I/O 기반
- NIO 기반으로 동작 (Java Non-blocking I/O)
- 하나의 스레드가 여러 연결을 동시에 처리할 수 있음
- 고성능 네트워크 처리에 유리함 (예: 게임 서버, 고속 API 게이트웨이)
- 이벤트 기반 처리 (이벤트 루프 + 핸들러 체인)
- 이벤트 루프(EventLoop)라는 단일 스레드가:
- 여러 소켓 채널(연결)을 등록하고
- 그 채널에 데이터가 도착하거나 쓰기 가능한 이벤트가 생길 때만
- 콜백 방식으로 핸들러를 호출
단순히 보면 네티가 빠르긴 한데 이는 방식의 차이다.
- Tomcat은 요청마다 스레드 생성 → 동시 요청 많으면 톰캣 스레드가 계속 늘어나면서 CPU/메모리 부담 커짐 → 느려짐
- Netty는 이벤트 루프 방식 → 1개 스레드로 수천 개의 소켓 핸들링 가능 → thread를 더 효율적으로 쓰게 만드는 방식
- 게임 서버, 채팅 서버, 메시징 서버 등에 Netty가 선호되는 이유
- 톰캣에서 네티로 바꾼다고 초당 request time이 줄어드는 것이 아님
+ JDK21부터 공식적으로 들어간 virtual thread가 잘 자리잡으면, 전체적인 throughput 관점에서 봤을 때도 Tomcat이 Netty한 성능을 낼 수 있지 않을까 기대
참고로 Spring WebFlux는?
- Netty 기반으로 동작하는 비동기/리액티브 웹 프레임워크
- Tomcat도 가능하지만, 리액티브하게 쓰려면 Netty가 더 자연스러움
728x90
반응형
'architecture > knowledge' 카테고리의 다른 글
[os] 프로그램 성능 병목 고려(io bound & cpu bound) (0) | 2025.05.09 |
---|---|
[개발문화] 유지보수하기 좋은 코드를 구현하는 개발 문화 어떻게 만들 것인가? (0) | 2023.04.24 |
[http] http 기본 지식 (0) | 2022.05.19 |
웹브라우저 요청 흐름 (0) | 2022.05.19 |
[webwork] struts? webwork? xwork? (0) | 2022.01.17 |