[JAVA TCP] Netty

2014. 11. 26. 11:05Study/netty

Netty



네티란?


Netty는 프로토콜 서버 및 클라이언트와 같은 네트워크 어플리케이션을 빠르고 쉽게 개발하는 것을 가능하게 해주는 NIO 클라이언트 서버 프레임워크이다. Netty는 TCP, UDP 소켓 서버 개발과 같은 네트워크 프로그래밍을 매우 간단하고 능률적으로 만들어준다.


https://netty.io/



네티는 유지하기 쉬운 높은 성능의 프로토콜 서버 및 클라이언트를 신속한 개발을 위한 비동기 이벤트 드리븐 네트워크 어플리케이션 프레임워크 입니다.


네티는 프로토클 서버 및 클라이언트 같은 네트워크 어플리케이션의 빠르고 쉬운 개발을 가능하게 하는 NIO 클라이언트 서버 프레임워크 입니다. 이는 TCP 또는 UDP 소켓 서버와 같은 네트워크 프로그래밍을 간단하게 할 수 있습니다.



자바 네트워크 어플리케이션 프레임워크


비동기이면서 이벤트 기반

> tomcat < 10,000 (connection) VS netty < 100,000 ~ 1,000,000 (connection)


I/O 처리를 위한 추상화 API 제공

> NIO, OIO, AIO ... 처리에 대해 쉽게 쉽게 바꿀수 있게 Netty I/O API 단에서 제공


잘 정의된 이벤트 모델과 스레드 모델 제공

> 접속을 맺고, 데이터를 보내고 받고, 접속을 끊을 때 어떤 이벤트가 발생할지 Netty 가 잘 정의하여 제공

> 사용자의 코드가 어느 스레드에서 언제 실행 될 지, 불필요한 동기화 방지.. 등등 Netty 가 잘 정의하여 제공


유연한 이벤트 처리 위한 bi-directional chain of responsibility pattern


직접 구현한 버퍼풀을 이용한 성능 이점 제공

> Buffer Zero-file-copy, Buffer Automatic Capacity Extession...



구성요소


I/O 레이어 (Netty), 프로토콜 코덱 (Netty or User), 비지니스로직 (User)






핵심컴포넌트 (eventloop)


eventloop (Windows event dispatcher, Swing event loop, Reactor)






핵심컴포넌트 (pipeline)


pipeline (이벤트루프에서 이벤트를 받아 핸들러에 전달하는 역할)



inbound event

- 이벤트 루프가 발생 시킨 이벤트 (소켓연결, 데이터수신 등)를 작성한 inbound event handler에게 전달


outbound event

- 사용자가  요청한 동작(쓰기, 읽기 일시중단 등)을 작성한 outbound event handler에게 전달

- 최종적으로 이벤트 루프에 전달되어 I/O가 수행되도록 함.



핵심플로우