반응형

톰캣과 네티는 방식 자체가 다르다.

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
반응형

+ Recent posts