AI 영어 말하기 서비스 AI펭톡의 TCP gateway를 Java Netty로 구현하는 과정을 패킷 코드와 함께 단계별로 설명한다. 사용자가 Engine에 직접 붙지 않고 gateway를 경유하게 해 인증·공통 처리를 확장할 구조를 만든다.
핵심 포인트- Type 1byte·length 2byte·문자열 payload의 단순 TLV 패킷을 echo하는 예제로 시작해, 전통적 java.net Socket의 연결마다 thread 생성·unsigned 부재로 인한 bit masking·부분 read 문제와 context switching 비용을 드러냄
- Channel·EventLoop·Pipeline·Handler·Bootstrap으로 구성된 비동기 이벤트 기반 모델을 소개 — Channel은 하나의 EventLoop에 평생 연결되고 EventLoop 하나가 여러 Channel을 처리
- NioEventLoopGroup으로 연결 수락과 I/O를 분리하고 IdleStateHandler로 미사용 연결을 관리하며, ByteBuf의 독립 read/write index·pooled direct memory와 partial packet에서 reader index를 복원하는 custom decoder를 구현
- gateway inbound handler가 Channel이 열릴 때 Engine용 client를 만들고, GatewayClient가 전달받은 ChannelHandlerContext에 fireChannelRead로 Engine 응답을 원래 pipeline으로 되돌려 사용자에게 relay
왜 읽나Netty의 Channel·EventLoop·Pipeline 구조와 custom codec, gateway relay를 실제 TCP 서버 예제로 익히려는 Java 백엔드 개발자에게.