Codec


앞서 정의 했듯, 코덱은 인코딩과 디코딩 과정을 거치는 알고리즘이다.


일반적으로 동영상 압축 알고리즘인 MPEG로 알고 있다. 인코딩 과정을 통해 동영상 용량을 줄일 수 있고, 마찬가지로 디코딩 과정으로 원본파일로 변환한다. 


MPEG 확장자를 갖는 동영상 뿐 아니라 jpg 확장자를 갖는 파일도 코덱 과정을 거친 것이다.



Netty에서는 inboundHandler와 outBoundHandler가 각각 인코더와 디코더에 해당하고, 데이터 송수신시 데이터와 패킷으로 각각 변환 시킬 수 있다.





기본 정의된 코덱


- base64 Codec 

 : Base64 인코딩 데이터에 대한 코덱   

 : Base64는 8비트 이진데이터를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자로 이루어진 일련의 문자열로 바꾸는 인코딩


- bytes Codec

 : 바이트 배열에 대한 코덱


- compression Codec

 : 송수신 데이터의 압축을 지원하는 코덱 

 : 네티 4.0에서는 zlib, gzip, snappy - 4.1에서는 bzip2, castle, l24, lzf의 압축 알고리즘이 추가


- mashaslling Codec

 : 마살량 혹은 언마샬링은 객체를 네트워크를 통해 송신 가능한 형태로 변환하는 과정


- ProtoBuf Codec

 : 구글의 포로토콜 버퍼를 사용한 데이터를 송수신을 지원하는 코덱


- rtsp Codec

 : 오디오 및 비디오 같은 실시간 데이터의 전달을 위해 만들어진 애플리케이션 레벨의 프로토콜 (real time streaming protocol)


- sctp Codec

 : TCP가 아닌 sctp 전송 계층을 사용하는 코덱

 : 이 코덱을 사용하려면 부트스트랩 채널에 NioSctpChannel 혹은 NioSctpServerChannel을 설정


- http Codec

 : http 프로로콜을 지원하는 코덱


- spdy Codec

 : Spdy는 기존의 http를 보완하는 프로토콜


- HTTP/2 Codec

  : HTTP/2 Protocol을 지원하는 코덱. 구글에서 spdy 프로토콜의 지원을 중단하고 http/2에 대한 공식 지원을 하는 중이다. 

  : 네티 4.1 버전에서 제공되고 있다.


-  String Codec

  : 문자열 송수신을 지원하는 코덱. 주로 Telnet이나 채팅 서버의 프로토콜에 이용


- Serialization 코덱

  : 객체를 네트워크로 직렬화 / 역직렬화를 지원하는 코덱


- MQTT Codec

 : MQTT Protocol을 지원하는 코덱


- HaProxy

 : Load Balance와 Proxy기능 을 제공하는 오픈 솔루션을 지원하는 코덱


- STOMP

 : STOMP Protocol을 지원하는 코덱






Http/2, Http Codec example


- 아주 심플하게 코덱 구성을 해보았다.



public class Http2ClientInit extends ChannelInitializer<SocketChannel> {
private HttpToHttp2ConnectionHandler connectionHandler;
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
Http2Connection connection = new DefaultHttp2Connection(false);
httpResponseHandler responseHandler = new httpResponseHandler();
connectionHandler = new HttpToHttp2ConnectionHandlerBuilder().connection(connection).build();
socketChannel.pipeline().addLast("connection",connectionHandler);
//기본 정의 codec
socketChannel.pipeline().addLast("response",new HttpResponseDecoder());
// 내가 정의한 사용자 정의 codec
socketChannel.pipeline().addLast("response", httpResponseHandler);
}
}




=> http2/0 으로 Connection을 구성하고 응답 온 패킷에 대해 http 데이터로 변환 후, 내가 정의한 핸들러에서 데이터를 정의







참고 : 자바 네트워크 소녀 Netty 


 






 



+ Recent posts