자바 네트워크 프로그래밍의 최고의 선택 Netty!
이 책은 안정성과 성능을 세계적으로 인정받아 카카오톡, 애플, 트위터, 페이스북, 네이버 라인 등에서 사용하는 자바 네트워크 프레임워크 네티를 네트워크 초보자 눈높이에 맞춰 설명한다. 아울러 중고급 개발자에게 필요한 네티에 대한 깊은 설명은 물론이고 네티 API로 서버를 만드는 고급 과정까지 다룬다. 오랫동안 네티를 현업에서 사용한 저자는 네티로 네트워크 프로그래밍을 하려는 독자의 가려운 곳을 잘 알고 긁어준다. 네트워크 개발자에게 도움이 되는 더 좋은 책을 만들고자 네티를 창시한 이희승이 감수하고, 레디스 컨트리뷰터인 강대명 외 4명이 베타 리더로 참가했다.
【이 책의 대상층】
이 책의 독자들에 대한 몇 가지 가정을 했다. 첫째, 이미 자바에 대한 기본 지식이 있다고 가정했다. 물론 조슈아 블로흐의 『이펙티브 자바』나 더그 리의 『자바 병렬 프로그래밍』과 같은 책을 읽었다고 가정하는 것은 아니다. 단지 자바 기본서에서 다루는 문법과 주요 클래스의 사용법 정도만 알고 있으면 된다. 따라서 꼭 필요하지 않으면 자바 자체에 대해 설명하지 않는다. 둘째, 네트워크 프로그램을 처음 배운다고 가정했다. 이런 이유로 책의 네트워크 프로그램을 작성할 때 알아야 하는 필수 필수 지식을 담고자 지면을 할애했다. 이미 아는 부분이라면 해당 설명을 건너뛰어 읽어도 무방하다.
【이 책의 개발 환경】
이 책의 예제는 윈도우와 이클립스 개발 환경을 기반으로 개발하고 테스트했다. 리눅스 환경은 가상 머신에 설치하여 사용했다. 이 책에서 사용하는 프로그램은 다음과 같다.
- 이클립스 - Eclipse Luna SR2(4.4.2)
- 네티 - 4.0.31.Final
- 운영체제 - CentOS 6 (2.6.32-504.16.2.el6.x86_64)
- Maven - 3.2.5
- Java - JDK 1.8.0_05
【이 책의 구성】
이 책은 크게 세 부분으로 나뉜다. 1~2장에서는 네티 소스 코드에 수록된 예제 애플리케이션을 살펴보고 네티의 특징을 일반적인 네트워크 애플리케이션과 비교하여 살펴본다. 이 같은 접근 방법은 초보 자바 개발자도 네티를 사용하여 네트워크 애플리케이션을 작성할 수 있다는 자신감을 심어주며 할 수 있다는 흥미를 제공한다. 3~6장은 네티가 제공하는 다양한 기능과 특징을 다룬다. 7~9장은 네티를 실무에서 사용할 때 있을 법한 시나리오를 가정하여 애플리케이션을 작성하는 예제를 다룬다. 책의 도입부인 1~2장에서는 네티의 기본 예제인 Discard 서버 예제를 독자가 이해하기 쉽도록 간단하게 수정하여 살펴보고 클라이언트 애플리케이션이 서버에 접속했을 때 처리해야 하는 부분을 설명한다. 다음으로 에코 서버 예제로 클라이언트 애플리케이션과 서버 애플리케이션이 서로 커뮤니케이션하는 방법을 확인하며 네티 사용법을 차근차근 살펴본다. 3~6장은 책의 본편으로써 네티의 주요 기능인 부스스트랩과 채널 파이프라인, 이벤트 모델, 바이트 버퍼 등의 구조와 특징을 다룬다. 각 컴포넌트를 다룰 때는 구조를 먼저 설명한 뒤 그림을 사용하여 한 번 더 살펴보고 나서 예제를 사용하여 최종 사용법을 익힌다. 마지막으로 7~9장은 네티를 응용하여 애플리케이션을 작성하는 방법을 설명한다. 특히 9장에서는 네티로 API 서버를 만든다. 이를 통해 다양한 서드파티 프레임워크와 네티가 어떻게 상호작용하는지 살펴본다. 9장에서 작성한 애플리케이션은 실무에서 사용 가능한 수준의 설계를 포함한다.
1장 네티 맛보기
네티를 처음 접하는 개발자에게 간단한 네티 애플리케이션을 작성하고 테스트하는 방법을 설명한다. 서버 네트워크 애플리케이션과 클라이언트 애플리케이션을 순서대로 작성하는 방법을 알아본다. 또한 매우 적은 양의 코드로 작성된 네티 애플리케이션이 얼마나 높은 성능을 제공하는지 알아본다.
2장 네티의 주요 특징
네트워크 애플리케이션이 제공하는 기본 특성을 설명하고 네티가 어떻게 이런 특징을 제공하는지 살펴본다.
3장 부트스트랩
네티로 작성하는 네트워크 애플리케이션에서 가장 기본적으로 설정해야 하는 부트스트랩 컴포넌트에 대한 설명과 예제를 제공한다. 부트스트랩은 서버 부트스트랩과 클라이언트 애플리케이션을 위한 부트스트랩으로 나뉘는데 각 부트스트랩이 제공하는 특징과 구조를 살펴본다.
4장 채널 파이프라인과 코덱
채널 파이프라인과 코덱은 일반적인 소켓 애플리케이션에서 작성해야 하는 업무 로직을 추상화한 계층이다. 채널 파이프라인이 동작하는 방식과 체널 파이프라인에 등록되는 코덱의 관계를 먼저 살펴보고 코덱이 동작하는 방식을 살펴본다.
5장 이벤트 모델
네티가 제공하는 이벤트 모델이 어떤 장점을 제공하는지 살펴보고 각 이벤트 모델 간의 전환 방법을 살펴본다. 특히 이벤트 모델을 제공하기 위한 이벤트 루프에 대해서 자세히 다룬다.
6장 바이트 버퍼
네티의 바이트 버퍼는 자바의 그것보다 더 쉬운 사용법과 빠른 성능을 제공한다. 어떤 이유로 네티의 바이트 버퍼가 더 쉽게 사용 가능한지 자바의 바이트 버퍼와 비교하여 살펴본다. 또한 네티가 제공하는 바이트 버퍼 풀에 관한 내용도 포함한다.
7장 네티와 채널 보안
네트워크 애플리케이션에서 구현 부분을 제외하면 가장 중요한 부분인 보안에 대해서 살펴본다. 네티가 제공하는 보안 채널에 관한 내용과 오픈 SSL을 사용하여 인증서를 생성하는 방법을 알아본다. 암호화와 관련된 알고리즘에 대한 설명도 포함한다.
8장 네티와 서드파티 연동
대부분의 프레임워크는 독립적으로 사용할 때보다 다른 프레임워크와 함께 사용할 때 더 좋은 편의성을 제공한다. 특히 자바 애플리케이션을 개발하는 개발자라면 필수로 사용하는 스프링과 JUnit 등의 프레임워크와 연동하는 방법을 살펴보고 네티 애플리케이션을 프로젝트 생명주기 관리 도구인 메이븐과 통합하는 방법을 살펴본다.
9장 실전 예제 네티로 구현한 API 서버
책의 앞부분에서 학습한 내용을 기반으로 실무에서 사용 가능한 수준의 API 서버를 작성한다. API 서버의 작성은 서버 애플리케이션 설계에 관한 내용을 포함한다.