본문 바로가기
IT/JAVA

Netty(4) - encoder/decoder 기본

by 최고영회 2021. 2. 9.
728x90
반응형
SMALL

지난 포스팅에서 ByteArrayDecoder를 이용하여 전문통신 하는 방법에 대해서 정리 해 봤다.

StringDecoder, ByteArrayDecoder... 등 encoder, decoder 가 무엇인지

netty 에서 codec 이란 무엇인지 정리해 보자.

Message 란?

우선 네트워크 프로그램에서 message 라는 용어는 application에서 의미 있는 byte 시퀀스 구조를 말한다.

보통 프로토콜에 맞는 전문이라고 표현하기도 한다.

encoder 는 이 message를 전송할 때 적합한 형식으로 변환하고, decoder는 network stream을 다시 program의 message 포맷으로 변환하는 것을 말한다.

Codec 이란?

일반적으로 동영상 압축 알고리즘을 codec 이라고 부르는데 netty 에서는 encoder와 decoder 로 구성되어 network 상의 raw data(byte)를 주고 받을 때 알맞은 포맷으로 변환하는 것을 말한다.

Decoder

decoder는 inbound data를 ChannelPipeline의 다음 ChannelInboundHandler를 위해 변환할 때 이용한다.

- ByteToMessageDecoder: 일반적인 작업을 지원하는 abstract 기본 class

inbound data 가 처리할 만큼 모일 때 까지 버퍼에 저장한 후 처리한다.

- ReplayingDecoder : byte stream을 message 로 decoding

- MessageToMessageDecoder : message를 다른 message 유형으로 decoding

ex. POJO change to POJO 변환

Encoder

outbound data를 network에 필요한 포맷으로 변환할 때 사용한다. ChannelOutboundHandler를 상속받는다.

- MessageToByteEncoder: message를 byte로 encoding

- MessageToMessageDecoder: message를 다른 message 유형으로 encoding

TooLongFrameException

netty는 비동기 framework 이기 때문에 decoding 할 수 있을 때까지 byte를 memory buffer에 저장한다.

decoder가 memory를 모두 소진할 만큼 큰 데이터를 저장하면 안되기 때문에 프레임이 지정한 크기를 초과하면 TooLongFrameException 예외가 발생한다.

netty 에서 사용하는 encoder와 decoder에 대해서 아주 기초적인 정보만 정리해 본다.

다음에는 encoder와 decoder를 이용해 codec을 만들어 보자.

728x90
반응형
LIST

'IT > JAVA' 카테고리의 다른 글

Netty(6) - TCP Server with SSL  (0) 2021.02.19
Netty(5) - TCP/IP 파일 송수신  (0) 2021.02.09
Netty(3) - Byte array 로 받기 - ByteArrayDecoder is not a @Sharable handler  (0) 2021.02.05
Netty(2) - Bootstrap  (0) 2021.02.04
Netty 란  (0) 2021.02.02