Bootstrap 이란 Application의 동작 및 설정을 지정해주는 helper class 이다.
사전적 의미를 찾아보면 "그 자체의 동작에 의해서 어떤 소정의 상태로 이행하도록 설정되어 있는 방법" 이다.
같은 맥락이라고 이해하면 된다.
Bootstrap을 통해 Netty의 Socket mode 나 thread 등을 쉽게 설정할 수 있다.
그리고 EventHandler 또한 Bootstrap을통해 설정해야 한다.
Bootstrap은 ServerBootstrap 과 그냥 Bootstrap으로 나뉜다.
ServerBootstrap은 Server용, 그냥 Bootstrap은 Client 용이라고 이해하면 된다.
Bootstrap 을 사용하는 예제 코드
@RequiredArgsConstructor
public EchoServerEx(){
private final ServerBootstrap bootstrap;
public static void main(String[] args) {
EventLoopGroup parentGroup = new NioEventLoopGroup(1);
EventLoopGroup childGroup = new NioEventLoopGroup();
bootstrap.group(bossGroup, childGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();
pipeline.addLast(new EchoServerHandler());
}
});
}
bootstrap.bind(host, port).sync();
}
Bootstrap의 API를 살펴보자.
group
- 이벤트 루프에 대한 설정
- parentGroup은 Client의 connection 요청을 수락하는 역할을 담당하고
- childGroup은 I/O와 이벤트 처리를 담당한다.
channel
- 소켓 입출력 모드 설정
NioServerSocketChannel: Nonblocking 소켓 채널
OioServerSocketChannel: Blocking 소켓 채널
LocalServerChannel: 로컬 가상 통신을 위한 소켓 채널
EpollServerSocketChannel: epoll 소켓 채널
OioSctpServerChannel: Blocking sctp 소켓 채널
NioSctpServerChannel: Nonblocking sctp 소켓 채널
NioUdtByteAcceptiorChannel: Nonblocking udt 소켓 채널
NioUdtMessageAcceptorChannel: blocking udt 소켓 채널
channelFactory
- channel 처럼 소켓 입출력 모드를 설정하는데
기본적으로 제공하는 channel class 보다 더 복잡한 로직이 필요할 때 사용한다.
handler
- server socket channel의 event handler 설정
부모 thread 에서 발생한 이벤트(ex. connect, closed)만 처리
childHandler
- client socket channel의 event handler 설정
자식 thread 에서 발생한 이벤트(ex. read, write)만 처리
option
- server socket channel의 socket option 설정
TCP_NODELAY: Nagle 알고리즘 비활성화 여부 설정
SO_KEEPALIVE: 정해진 시간마다 keepalive packet 전송
SO_SNDBUF: 커널 송신 버퍼 크기
SO_RCVBUF: 커널 수신 버퍼 크기
SO_REUSEADDR: TIME_WAIT 상태의 포트에도 bind 가능해짐
SO_LINGER: 소켓을 닫을 때 송신 버퍼에 남은 데이터 전송 대기 시간
SO_BACKLOG: 동시에 수용 가능한 소켓 연결 요청 수
childOption
- client socket channel의 socket option 설정
'IT > JAVA' 카테고리의 다른 글
Netty(4) - encoder/decoder 기본 (0) | 2021.02.09 |
---|---|
Netty(3) - Byte array 로 받기 - ByteArrayDecoder is not a @Sharable handler (0) | 2021.02.05 |
Netty 란 (0) | 2021.02.02 |
jmap 오류 발생할 경우 - Unable to open socket file, HotSpot VM not loaded (0) | 2020.12.01 |
webclient - bodyToMono 예외 처리 (0) | 2020.11.20 |