정의
- 네티로 작성한 애플리케이션이 시작할 때 가장 처음 수행되는 부분, 수행할 동작과 각종 설정을 지정함
- 부트스트랩 설정은 크게 이벤트루프, 채널의 전송모드, 채널 파이프라인으로 나뉜다.
- 이벤트루프
- 소켓 채널에서 발생한 이벤트를 처리하는 스레드 모델에 대한 구현이 담겨있다.
- 소켓 모드에 따라 이벤트루프의 구현체가 달라지기도 함
- 전송모드
- 채널 파이프라인
- 소켓 채널로 수신된 데이터를 처리할 핸들러를 지정
부트스트랩의 논리적 구조

- 부트스트랩에서 위와 같은 설정이 가능하다. 사실상 네트워크 애플리케이션에 필요한 모든 내용을 담고 있다.
- 네트워크 애플리케이션 구성
💡 소켓 모드/옵션, 데이터처리 스레드, 프로토콜로 구성된다.
- 부트스트랩의 프로토콜은 채널 파이프라인에 등록되는 인코더, 디코더에서 처리한다.
부트스트랩 사용
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try{
ServerBootstrap b = new ServerBootStrap();
b.group(bossGroup,workerGroup)
.channel(NioSeverSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>(){
@Override
public void initChannel(SocketChannel ch){
ChannelPipeline p = ch.pipeline();
p.addLast(이벤트핸들러);
}
})
}...
group() - 이벤트 루프 설정
- ServerBootstrap(서버용)은
연결수락 이벤트루프 와 데이터 송수신처리 이벤트루프 등록 가능
- Bootstrap(클라이언트용)
데이터 송수신처리 이벤트루프 등록 가능
- 위와 같은 이유로 AbstractBootstrap 클래스의 group()은 하나의 이벤트 루프만 설정 가능 Bootstrap은 해당메소드를 그냥 사용, ServerBootstrap은 group()을 오버라이딩해 2개의 이벤트루프를 인자로 받음
channel() / channelFactory() - 소켓 입출력 모드
- 소켓 입출력 모드 설정

handler() - 서버 소켓 채널 이벤트 핸들러 설정
서버 소켓채널에서 발생하는 이벤트 수신 및 처리
childHandler() - 소켓 채널 데이터 가공 핸들러 설정
- 서버에 연결된
클라이언트 소켓 채널 에서 발생하는 이벤트 수신 및 처리
option() - 서버 소켓 채널의 옵션 설정
- 종류

childOption() - 클라이언트 소켓 채널 옵션
- 서버에 접속한 클라이언트 소켓 채널에 대한 옵션을 설정할 때 사용
파이프라인 및 이벤트 핸들러
파이프라인 초기화 순서
- 클라이어트 연결에 대응하는 소켓 채널 생성 빈 채널 파이프라인 객체 생성, 소켓 채널에 할당
- 소켓 채널에 등록된 ChannelInitializer 인터페이스의 구현체를 가져와 initChannel메소드 호출
- 소켓 채널 참조로부터
1에서 등록한 파이프라인을 가져오고 채널 파이프라인에 입력된 이벤트 핸들러 객체를 등록한다.
채널 인바운드 이벤트
- 인바운드 이벤트
- 소켓 채널에서 발생한 이벤트 중 연결 상대방이 어떤 동작을 취했을 때 발생
- 채널 활성화, 데이터 수신등의 이벤트
- ChannelInboundHandler 인터페이스 제공
- 주요 이벤트 목록
- channelRegistered - 2번 발생, 처음 서버 소켓 생성할때 + 클라이언트 소켓 채널 생성될때
- channelActive
- channelRead
- channelReadComplete
- channelInactive
- channleUnregisted
- 아웃바운드 이벤트
- 네티 사용자가 요청한 동작에 해당하는 이벤트
- 연결 요청, 데이터 전송, 소켓 닫기 등
- ChannelOutboundHandler 인터페이스 제공
- 주요 이벤트 목록
- bind 이벤트
서버 소켓 채널이 클라이언트 연결을 대기하는 IP와 포트가 설정되었을 때
- connect 이벤트
클라이언트 소켓 채널이 서버에 연결되었을 때
- disconnect 이벤트
클라이언트 소켓 채널의 연결이 끊어졌을 때
- close 이벤트
클라이언트 소켓 채널의 연결이 닫혔을 때
- write 이벤트
소켓 채널에 데이터가 기록되었을 때
- flush 이벤트
flush메소드 호출시 발생
이벤트 메소드 실행 순서
- 이벤트루프가 채널 파이프라인에 등록된 첫 번째 이벤트 핸들러를 가져옴
- 해당 핸들러에 발생한 이벤트 메서드가 구현된 상태면 실행
- 그렇지 않으면 다음 이벤트 핸들러 가져옴
- 2or3 실행
- 마지막 이벤트 핸들러에 도달할 때까지 반복
자바네트워크소녀 네티 참고