관리 메뉴

HAMA 블로그

[Netty 튜토리얼 part 1] Netty 를 소개합니다. 본문

Netty, Java IO

[Netty 튜토리얼 part 1] Netty 를 소개합니다.

[하마] 이승현 (wowlsh93@gmail.com) 2015. 9. 2. 10:29

Netty 싸이트 인용 (http://netty.io/)

Netty는 NIO 클라이언트/서버프레임워크이다. 빠르고 쉽게 네트워크 어플리케이션을 개발할수있게 해준다. TCP 와 UDP 소켓서버같은 네트워크 프로그래밍을 매우 단순하고 능률적으로 만들어준다. 



Netty 는 높은 수준의 병렬 네트워킹 어플리케이션/서비스를 목적으로 만들어진 자바 라이브러리/API 이다. Netty 가 표준 Java API 들과 구분되는 뚜렷한 이유는 비동기 API 라는점이다. 이 용어는 사람마다 다르게 해석될수도있는데 논블럭킹 과 이벤트드리븐이라는 용어와 연관되어진다. 어쨋던 전에 비동기 API를 사용해보지 않았다면, Netty 를 구현함에 있어서 사고방식의 전환이 조금 필요할것이다. 비동기적으로 호출된다는것은 즉시 반환이 이루어진다는점과 리턴값이 없다는점을 염두해야한다. 받아야할 리턴값은 다른 쓰레드가 미래의 어느 시점에 되돌려 줄것이다. 이것이 일반적인 표준API 과 기본적인 차이점이다. 아래 예를 통해 잠시 살펴보자.


Standard API 

public int getWidgetCount();


Asynchronous API 

public WidgetCountListener myListener = new WidgetCountListener() {
     public void onWidgetCount(int widgetCount) {
          ...... do your thing with the widget count
 
     }
};


위의 getWidgetCount 함수는 int 값을 리턴하지만, 아래의 비동기 방식에서는 리턴하지 않으며 대신 응답 핸들러를 주입하게됩니다. 이 핸들러는 나중에 작업을 처리하는 쓰레드에 의해서 호출되어 질것이며, 사용자는 결과를 얻고 싶을때 가져와서 사용하게 됩니다. 보증할수없는 복잡성한 레이어를 추가한것으로 보이지만 이것은 높은성능향상을 어플리케이션과 서비스에 가져다 주게됩니다. 클라이언트는 응답을 기다리기위해 wait() 함수속에서 시간을 낭비할 필요가 없습니다. 엄마가 밥도 아직 차리지 않았는데, 멍하니 식탁에 앉아있을 필요가 없습니다. 게임하면서 놀다가 엄마가 부르면 그때 나가서 냠냠하면 된다는 이야기입니다.(실제 엄마들 처럼 미리 부르지 않습니다 ^^;;) 이런 시스템은 Selectors 라는것과 함께 사용되는데 이것은 OS 시스템과 연동되어집니다.OS 에서 준비가 완료되면 알려주며, 이런 과정은 추상화되어 개발자는 상위레벨에서 쉽게 Java NIO / Netty API 를 구현할수있게 됩니다.

이 연재에서는 기본컨셉과 코어블럭들의 이름에 대해서 소개하고, 실제 코드예제를 볼것입니다.



..번역중..


 ChannelFactory


 NioClientSocketChannelFactory and NioServerSocketChannelFactory


The Boss Threads


The Worker Threads


ChannelEvent


SimpleChannelHandler


ChannelFuture.


ObjectEncoder /  ObjectDecoder


DateReceiver


ServerBootstrap /  ClientBootstrap


messageReceived / messageEvent


Upstream and Downstream

Dynamically Modifying ChannelHandlers in the Pipeline


ChannelHandlerContext



레퍼런스 

http://seeallhearall.blogspot.kr/2012/05/netty-tutorial-part-1-introduction-to.html  요약정리

Comments