지난 포스팅에서 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을 만들어 보자.
'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 |