프로그래밍/java

[Java][Netty] Codec

혀끄니 2024. 1. 19. 09:00
728x90
  • 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'은 이벤트 핸들러의 일종임을 잊지말자

728x90