
Netty 라이브러리를 사용하여 안전한 HTTP 서버를 구현하는 내용을 정리해보려고 합니다.
각 클래스와 주요 기능에 대해 간단히 정리해보겠습니다.
public class HttpTestStart {
public static int HTTPS_PORT = 1234;
public static int HTTPS_Client_PORT = 1235;
public static void main(String[] args) throws Exception {
// 커맨드 라인 파싱 및 서버 초기화
// HTTPS 포트 및 우리서버에 정보를 보내는 상대방 HTTPS 서버 포트, 로그 경로, 서버 모드를 커맨드 라인 인자로 받아옴
// SSL 설정, 이벤트 루프 그룹 초기화, 서버 부트스트랩 설정 등
// HTTP 및 HTTPS 포트 설정과 각각의 핸들러를 등록하여 서버 시작
}
}
역할
서버의 초기화 및 실행을 담당하는 클래스입니다.
서버 설정을 수행하고 Netty를 사용하여 서버를 시작합니다.
내용
main 메서드에서 인자를 순서대로 HTTPS 포트, 보내는 HTTPS 포트, 로그 경로, 서버 모드를 설정합니다.
SSL 설정 및 이벤트 루프 그룹 초기화를 수행하고, Netty의 ServerBootstrap을 사용하여 서버를 설정합니다.
HTTP 및 HTTPS 포트를 설정하고, 필요한 각각의 포트에 대한 핸들러를 HttpTestHandler로 등록합니다.
서버를 시작하고 종료될 때까지 대기합니다.
// SSL 및 이벤트 루프 초기화
EventLoopGroup masterGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
// 서버 부트스트랩 설정
ServerBootstrap serverBootstrapHttps = new ServerBootstrap();
serverBootstrapHttps.group(masterGroup, workerGroup);
serverBootstrapHttps.channel(NioServerSocketChannel.class);
serverBootstrapHttps.localAddress(new InetSocketAddress(HttpTestStart.HTTPS_PORT));
serverBootstrapHttps.childHandler(new HttpTestHandler());
// HTTPS 서버 시작
ChannelFuture channelFutureHttps = serverBootstrapHttps.bind().sync();
// 서버 종료까지 대기
channelFutureHttps.channel().closeFuture().sync();
public class HttpTestHandler extends ChannelInitializer<SocketChannel> {
public HttpTestHandler() {}
protected void initChannel(SocketChannel socketChannel) throws Exception {
// SSL 핸들러 및 HTTP 요청 처리 핸들러 등록
SslHandler sslHandler = SSLHandler.getSSLHandler();
// HTTP 요청 처리 핸들러는 FullHttpRequest를 처리하여 비즈니스 로직을 수행
protected void channelRead0(ChannelHandlerContext channelHandlerContext, FullHttpRequest fullHttpRequest) throws Exception {
// 비즈니스 로직 처리
// 결과에 따라 적절한 응답을 생성하고 클라이언트에게 전송
}
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
// 채널 읽기 완료 시 채널을 닫음
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
// 예외 발생 시 로그를 출력하고 채널을 닫음
}
}
Netty를 활용하여 비동기 및 이벤트 기반의 개발 내용 입니다.
SSL을 이용한 안전한 HTTP 통신 및 클라이언트 요청 처리를 효과적으로 수행할 수 있도록 설계되었는데, 오랜 시간 다듬어진 부분이라 적용된 디자인 패턴 등을 공부해 볼 수 있다고 생각하여 서버 설정 부분부터 분석해보았습니다.