반응형

JAVA Netty 6

Netty 에코 서버-클라이언트 구현 (feat. 네트워크 소녀 Netty)

에코 서버 구현 Netty 를 이용하여 에코 서버를 만들어보자. 통상적으로 네트워크 프로그램을 배울 때 가장 처음 예제로 에코 서버를 사용하는데 그 이유는 프로그램의 구현이 간단할 뿐만 아니라 입출력 또는 송수신이라는 기본적인 동작 방식을 이해하는 데 유용하기 때문이다. 먼저 Server 쪽 코드를 작성해보자. 8888번 포트를 사용하여 클라이언트의 연결을 대기하고, 클라이언트 접속 요청에 의해 소켓 채널을 만들고, 소켓으로 데이터가 들어온다면 지정된 EchoServerHandler가 되돌려주는 간단한 예제이다. // 에코 서버 import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.nio.N..

IT 2021.01.07

Netty 코덱

코덱(codec)이란? 네트워크에서는 데이터를 단순한 원시 바이트의 연속으로 취급하지만 애플리케이션에서는 이러한 바이트를 의미 있는 정보 구조로 만들어야 한다. 애플리케이션 데이터와 네트워크 포맷 간의 변환을 수행하는 컴포넌트를 각각 인코더와 디코더라고 하며, 두 기능을 모두 가진 단일 컴포넌트를 코덱이라고 한다. 인코더는 메시지를 전송하기에 적합한 형식으로 변환하며, 디코더는 네트워크 스트림을 다시 프로그램의 메시지 포맷으로 변환한다. 인코더는 아웃바운드 데이터를 처리하며 디코더는 인바운드 데이터를 처리한다. 디코더 네티의 디코더 클래스는 고유한 두 사용 사례를 지원한다. 바이트 스트림을 메시지로 디코딩 : ByteToMessageDecoder 및 ReplayingDecoder 메시지를 다른 메시지 유..

IT 2021.01.05

Netty ChannelHandler와 ChannelPipeline

이미 앞부분에서 ChannelPipeline안에 ChannelHandler를 체인으로 연결해 처리 논리를 구성할 수 있다는 것을 배웠다. 이러한 클래스와 연관된 사용사례들과 ChannelHandlerContext에 대해서도 알아보자. Channel의 수명주기 Channel 인터페이스는 ChannelInboundHandler API와 밀접한 관계가 있으며 간단하지만 유용한 상태 모델을 정의한다. Channel의 네 가지 상태에 대해 알아보자. 상태 설명 ChannelUnregistered Channel이 생성됐지만 EventLoop에 등록되지 않음 ChannelRegistered Channel이 EventLoop에 등록됨 ChannelActive Channel이 활성화됨(원격 피어로 연결됨). 이제 데이터..

IT 2021.01.03

Netty ByteBuf - 바이트 버퍼

앞서 언급한 것처럼 네트워크 데이터의 기본 단위는 항상 바이트이다. 자바 NIO는 ByteBuffer라는 자체 바이트 컨테이너를 제공하지만 이 클래스는 사용법이 너무 복잡해 사용하기 부담스럽다. 네티에는 네트워크 개발자에게 더 나은 API를 제공하는 강력한 구현인 ByteBuf가 있다. 네티는 데이터 처리를 위한 API를 ByteBuf 추상 클래스와 ByteBufHolder 인터페이스라는 두 컴포넌트를 통해 노출한다. ByteBuf API의 장점은 다음과 같다. 사용자 정의 버퍼 형식으로 확장할 수 있음 내장 복합 버퍼 형식을 통해 투명한 제로 카피를 달성할 수 있음. 용량을 필요에 따라 확장할 수 있음(JDK의 StringBuilder와 비슷) ByteBuffer의 flip() 메서드 호출 없이도 리더..

IT 2020.12.29

Netty 전송 API

Ch04. 전송 API 네트워크를 통해 전송되는 데이터는 모두 바이트 형식이다. 네티는 모든 전송 구현에 공통 API를 기반 레이어로 활용하므로 JDK를 직접 이용할 때보다 블로킹-논블로킹 변환 작업이 훨씬 간단하게 이루어진다. 코드가 구현 세부사항으로 오염될 우려가 적고, 전체 코드 기반을 광범위하게 리팩터링할 필요가 없다. 연결을 수락한 다음, 클라이언트로 "Hi!" 라는 메시지를 전송한 뒤 연결을 닫는 간단한 애플리케이션을 작성해보자. NettyNioServer import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.*;..

IT 2020.12.28

Netty의 개념과 아키텍처

Netty : 비동기식 이벤트 기반 네트워킹 프레임워크 일반적인 JAVA 블로킹 입출력 예제 ServerSocket serverSocket = new ServerSocket(portNumber); Socket clientSocket = serverSocket.accept(); BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); String request, response; while((request = in.readLine)) != null) { if ("Don..

IT 2020.12.09
반응형