본문 바로가기
netty

3. BootStrap

by 이석준석이 2021. 4. 13.

지금까지 해본것을 정리한다면, 아래와 같은 그림을 그립니다.

 

 

하지만 ServerBootStrap(쉽게 네티를 사용할수있도록 로딩해주는 네티에서 지원하는 클래스)에서는 EventLoopGroup 이 2개입니다.

  • EventLoopGroup1 :
    • NioServerSocketChannel 을 갖고있는 eventLoopGroup을  갖고있습니다.
    • 요청이 오면 eventLoop를 한개 꺼내온뒤, NioSocketChannel 을 생성하는 역할을 합니다.
  • EventLoopGroup2 : 
    • 요청이 온 뒤 (channelRead 이벤트) 에 생성된 NioSocketChannel 을 등록할 수 있는 eventLoopGroup 을 갖고있습니다.
      • ServerBootStrap.class > channelRead 함수에 등록과정이 있습니다.
    • 이벤트에 대해서는 등록한 pipeLine 에 따른 순서로 처리합니다.

실제로는 아래와같은 그림이 됩니다.

  • 첫번째 EventLoopGroup 은 자식(NioSocketChannel) 생성을 담당
  • 두번째 EventLoopGroup 은 생성된 자식으로 이벤트처리를 담당


이러한 위의 구성을 편하게 만들어줄 수 있도록 netty 에서는 

  • ServerBootStrap 을 지원합니다.
  • ※ 클라이언트의 경우에는 BootStrap 지원 (EventLoopGroup 한개)
@Slf4j
public class ServerBootStrapStudy {
    public static void main(String[] args) {
        ServerBootstrap serverBootstrap = new ServerBootstrap();

        NioEventLoopGroup parent = new NioEventLoopGroup();
        NioEventLoopGroup child = new NioEventLoopGroup();
        parent.execute(() -> log.info("hello"));
        child.execute(() -> log.info("hello"));

        final ServerBootstrap bootstrap = serverBootstrap.group(parent, child) // 2개의 이벤트루프 등록
                .channel(NioServerSocketChannel.class)
                .localAddress(8080) // 포트 바인딩
                .childHandler( // child 에 대한 핸들러 추가
                    new SimpleChannelInboundHandler<ByteBuf>() {
                        @Override
                        protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
                            // child 가 처리할 파이프라인의 핸들러메소드들을 구현
                            log.info("msg : {}", msg.toString(CharsetUtil.UTF_8));
                        }
                    }
                );

        ChannelFuture channelFuture = bootstrap.bind();
    }
}

 

위와같은 코드로, 간단하게 그림과같은 구성을 만들 수 있으며, 콘솔로그는 아래와 같습니다.

09:56:47.006 [nioEventLoopGroup-2-1] INFO ServerBootStrapStudy - hello
09:56:47.006 [nioEventLoopGroup-3-1] INFO ServerBootStrapStudy - hello

--> 다른 클라이언트에서 메세지를 보내면 child 쪽의 EventLoop 가 메세지를 출력하는 모습!
09:59:05.025 [nioEventLoopGroup-3-2] ServerBootStrapStudy - msg : Hello Server

 

끝~

'netty' 카테고리의 다른 글

2. EventLoopGroup  (0) 2021.04.10
1. Java Channel  (0) 2021.04.10