[Java][Netty] Codec
- Codec
- 이벤트 핸들러를 상속받아서 구현한 구현체들
- 자주 사용하는 이벤트 핸들러들을 미리 구현해둔 코덱 묶음은 io.netty.handler.codec패키지에 있다.
- 대표적인 코덱으로는 HTTP 코덱이 있다.
Netty에서 인코더는 전송할 데이터를 전송 프로토콜에 맞춰 변환 작업 수행하는 것, 디코더는 반대 작업 수행
- Codec의 구조
- 수신 : 인바운드, ChannelInboundHandler -> 디코더
- 송신 : 아웃바운드, ChannelOutboundHandler -> 인코더
인코딩/디코딩은 어플리케이션 내부의 데이터를 각 프로토콜에 맞는 데이터로 변환하는 작업
ex) Netty가 제공하는 Base64Encoder를 채널 파이프라인에 등록되어 있다면, 채널에 데이터를 기록하면 ChannelOutboundHandlerAdapter의 write이벤트 메서드가 수행
- 기본 제공 Codec
Netty는 자주 사용되는 프로토콜의 인코더, 디코더를 기본 제공한다.
- HTTP 코덱. Base64 zhepr, byte 코덱 ..등등
기본 제공 코덱들은 인바운드와 아웃바운드 핸들러를 모두 구현했다.
-> 네트워크 입출력 프로토콜을 구현한 것
ex) HttpServerCodec 생성자에서 HttpRequestDecoder, HttpResonseEncoder를 모두 생성
HttpRequestDecoder : 수신된 ByteBuf를 HttpRequest + HttpContent로 변환
- 수신한 이벤트와 데이터를 처리하여 HTTP 객체로 변환한 다음 channelRead 이벤트를 다음 이벤트 핸들러로 전달해준다.
- 수신된 HTTP 데이터에 대한 처리를 수행하는 데이터 핸들러를 '사용자 구현' 하여 붙일 수 있다.
HttpResponseEncoder : HttpResponse 객체를 ByteBuf로 인코딩하여 송신
- 사용자정의 Codec
사용자가 직접 필요한 프로토콜을 구햔하는것 -> 필요에 따라 인바운드와 아웃바운드핸들러를 구현한다.
네티 기본 제공 코덱과 사용자정의 코덱을 함께 채널 파이프라인에 등록해서 쓸 수 있다.
채널 파이프라인에 등록된 이벤트 핸들러의 순서가 중요
- 대부분의 어플리케이션 로직이 이벤트 핸들러에 구현
- Netty가 제공하는 'Codec'은 이벤트 핸들러의 일종임을 잊지말자