SlideShare a Scribd company logo
정경석
Going asynchronous
with Netty
에어라이브코리아 – 인프라팀
2015.10.27
발표자 소개
● 정경석
● 20세기와 21세기를 둘 다 겪은 오래된(?) 백엔드 개발자
● MS ASP를 시작으로 개발자의 길로
● 현재 AireLive 메시징 API와 영상 검색 서비스 개발
목차
● 네티란?
● 네티는 어떻게 구성되는가?
● 네티의 주요 컴포넌트
● 이벤트모델과 이벤트루프
● 네티의 비동기 처리방법
● 네티의 사용처
네티란?
● Java 네트워크 애플리케이션 프레임워크
● 이벤트 기반 비동기 처리
● 쉽고 빠른 네트워크 애플리케이션 작성
● IO API 추상화
● 애플, 트위터, 페이스북 등에서 사용중
● 현재 안정화 버전 3.10.5.Final, 4.0.32.Final, 5.0.0-Alpha2
네티는 어떻게 구성되는가?
개발자가 알아야 할 구성
부트스트랩
채널 파이프라인
코덱코덱
이벤트 루프
코덱
부트스트랩이란
부트스트랩
전송계층
이벤트 루프
소켓 옵션
소켓 주소
채널 파이프라인
코드
코드
채널 파이프라인
● 채널에서 발생한 이벤트가 이동하는 통로
이벤트 처리 코드
이벤트 핸들러
이벤트 처리 코드
이벤트 핸들러
이벤트이벤트이벤트
코덱
● 인코더와 디코더의 합성어
영상 인코딩 MP4
압축
MPEG4 코덱
디코딩 영상
복원
MPEG4 코덱
코덱
● 소켓 채널을 기준으로 인코딩과 디코딩이 이루어짐
데이터 인코딩 디코딩패킷 데이터
로직처리 후 패킷 변환
인코더
데이터 변환 후 로직처리
디코더
코덱
● 인바운드와 아웃바운드
클라이언트 서버
소켓 서버소켓
Outbound
지금 10시야!
지금 몇 시니?
Outbound
Inbound
Inbound
사용자 정의 코덱 작성
● ChannelInboundHandler, ChannelOutboundHandler
인코더
ChannelOutboundHandler
디코더
ChannelInboundHandler
● channelActive
● channelInactive
● channelRead
● channelReadComplete
● channelRegistered
…
● bind
● close
● connect
● deregister
● disconnect
…
코덱
● 애플리케이션의 로직 = 코덱
● 네티의 기본 제공 코덱 목록
zlib, gzip, Snappy
압축 코덱
websocket, CORS
HTTP 코덱
Marshaller,
Unmarshaller
marshalling 코덱
TLS, SPDY
spdy 코덱
base64
BASE64 코덱
RxtxChannel
rxtx 코덱
MqttDecoder,
MqttEncoder
mqtt 코덱
ProtobufDecoder,
ProtobufEncoder
protobuf 코덱
등등 수 많은 코덱
네티의 이벤트
● 네티의 이벤트는 비동기로 처리됨
● 필요에 따라서 동기로 처리할 수 있음
● 이벤트는 모두 이벤트 루프에서 수행됨
● 네티는 단일 이벤트 루프, 다중 이벤트 루프를 제공
● 네티의 이벤트는 발생순서와 실행 순서가 항상 일치
이벤트루프
객체
이벤트 루프
코드
● 단일 이벤트 루프
이벤트이벤트 이벤트
이벤트이벤트
이벤트루프
● 다중 이벤트 루프
객체 코드
이벤트 루프 이벤트 루프…
이벤트이벤트 이벤트
이벤트이벤트
이벤트루프
● 이벤트 처리순서
객체
이벤트 루프 이벤트 루프이벤트1
이벤트3
이벤트5
이벤트4
이벤트2
이벤트루프
● 네티의 이벤트
이벤트 루프 이벤트 루프
채널 채널
이벤트3
이벤트1이벤트2
이벤트3
이벤트1이벤트2
성능 향상 임계점
● 암달의 법칙
- 시스템의 특정 부분을 개선했을 때 얻을 수 있는 성능 향상치
1-범위 + 성능 향상률
1
범위
성능 향상 임계점
● 코드의 절반이 2배의 성능을 낼 수 있도록 튜닝 했을 때 얻을 수 있는 이득
1-0.5 +
2
1
0.5
= 133%
네티의 비동기 처리
● ChannelHandlerContext, ChannelFuture
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
// IO 처리 메서드 read, write, close, connect …
ChannelFuture future = ctx.write(msg);
// write 메서드의 작업이 완료되었을 때 이벤트를 받을 수 있는 리스너 설정
future.addListener(listener);
// IO 작업이 완료되었는지 확인할 수 있음.
future.isDone();
// IO 작업이 완료될 때까지 대기
future.sync();
}
네티의 비동기 처리
● ChannelFutureListener
네티가 제공하는 기본 ChannelFutureListener
● ChannelFutureListener.CLOSE
● ChannelFutureListener.CLOSE_ON_FAILURE
● ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
ChannelFuture future = ctx.write(msg);
future.addListener(ChannelFutureListener.CLOSE );
}
네티의 사용처
● Facebook
- Netty-based Thrift transport implementation, Nifty
● Apple
- Java service server
● AireLive
- TCP based Messaging server, HTTP based API server
● ElasticSearch core
- HTTP based API service, Client transport layer
● Apache Spark
- Cluster data transfer
● Google – gRPC, Red Hat – Infinispan, Typesafe - Play Framework
마치며
● 네티 4.0이상부터 안드로이드를 공식 지원
● 하나의 네티 애플리케이션에서 두 개의 포트를 바인딩
- 부트스트랩의 바인드 메서드를 두 번 호출
● 성능은 애플리케이션이 제공하는 기능에 따라서 달라진다.
- 데이터베이스 조회 vs 캐시 조회
● 이벤트 루프의 개수는 테스트를 통해서 선택하라.
- nGrinder, Jmeter
● 네티의 ChannelFuture.sync() 메서드는 신중히 사용할 것.
● 네티의 Channel.write() 메서드는 내부적으로 requestQueue를 관리함.
● 사용자 정의 코덱은 EmbeddedChannel 클래스를 통해서 테스트
THANK YOU!

More Related Content

PDF
[E6]2012. netty internals
PDF
자바 네트워크 소녀 Netty 리뷰
PDF
Get started with netty
PPTX
Network 초보자를 위한 Netty
PDF
Node-express 채팅 서버 개발기
PDF
Netty 시작하기 (1)
PDF
네트워크 기본
[E6]2012. netty internals
자바 네트워크 소녀 Netty 리뷰
Get started with netty
Network 초보자를 위한 Netty
Node-express 채팅 서버 개발기
Netty 시작하기 (1)
네트워크 기본

What's hot (20)

PPTX
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
PPTX
RabbitMQ
PPTX
TCP/IP Protocol - JAVA
PDF
이승재, 실시간 HTTP 양방향 통신, NDC2012
PDF
Kgc2014 one daylearnunitycryptography-f
PDF
150416 OpenStack Networking with Neutron Jieun, Kim
PDF
모바일 메신저 아키텍쳐 소개
PDF
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
PDF
NLog 소개
PPTX
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
PDF
Android Push Server & MQTT
PDF
[164] pinpoint
PDF
[16.01.05] node.js & mqtt
PDF
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
PPTX
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
PPTX
TCP/IP 발표자료 - 김연수
PDF
자바채팅 다중
PDF
Active MQ
PDF
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
PDF
Nginx Architecture
HTTP 완벽 가이드 / 20장 리다이렉션과 부하균형
RabbitMQ
TCP/IP Protocol - JAVA
이승재, 실시간 HTTP 양방향 통신, NDC2012
Kgc2014 one daylearnunitycryptography-f
150416 OpenStack Networking with Neutron Jieun, Kim
모바일 메신저 아키텍쳐 소개
[네이버오픈소스세미나] Pinpoint를 이용해서 서버리스 플랫폼 Apache Openwhisk 트레이싱하기 - 오승현
NLog 소개
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
Android Push Server & MQTT
[164] pinpoint
[16.01.05] node.js & mqtt
[Hello world 오픈세미나]n grinder helloworld발표자료_저작권free
.Net conf 2019 Korea_ ASP.NET Core를 통한 HealthCheck 서비스 구현
TCP/IP 발표자료 - 김연수
자바채팅 다중
Active MQ
Ch01 네트워크와+소켓+프로그래밍+[호환+모드]
Nginx Architecture
Ad

Similar to Going asynchronous with netty - SOSCON 2015 (20)

PDF
Netty 세미나
PDF
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
PDF
세션3 node.js의 의미와 자바의 대안
PPTX
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
PDF
Block chain bidding_System
PPTX
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
PDF
토큰 대기열과 eventBroker를 활용하여 적은 부하로 트래픽 제어하기
PDF
지금 핫한 Real-time In-memory Stream Processing 이야기
PPTX
OpenStack Networking
PPTX
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
PDF
웹기반원격감시제어 2010 CPD
PDF
[252] 증분 처리 플랫폼 cana 개발기
PDF
9월 기술사항
PPTX
스마트폰 온라인 게임에서 고려해야 할 것들
PDF
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
PPTX
Android Network
PDF
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
PDF
Feature Branch Branch Dev QA 환경 구성기
DOCX
Comet
PDF
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
Netty 세미나
서버를 위한 동시성 모델과 Staged eventdrivenarchitecture
세션3 node.js의 의미와 자바의 대안
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
Block chain bidding_System
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
토큰 대기열과 eventBroker를 활용하여 적은 부하로 트래픽 제어하기
지금 핫한 Real-time In-memory Stream Processing 이야기
OpenStack Networking
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
웹기반원격감시제어 2010 CPD
[252] 증분 처리 플랫폼 cana 개발기
9월 기술사항
스마트폰 온라인 게임에서 고려해야 할 것들
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Android Network
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
Feature Branch Branch Dev QA 환경 구성기
Comet
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
Ad

Going asynchronous with netty - SOSCON 2015

  • 2. 발표자 소개 ● 정경석 ● 20세기와 21세기를 둘 다 겪은 오래된(?) 백엔드 개발자 ● MS ASP를 시작으로 개발자의 길로 ● 현재 AireLive 메시징 API와 영상 검색 서비스 개발
  • 3. 목차 ● 네티란? ● 네티는 어떻게 구성되는가? ● 네티의 주요 컴포넌트 ● 이벤트모델과 이벤트루프 ● 네티의 비동기 처리방법 ● 네티의 사용처
  • 4. 네티란? ● Java 네트워크 애플리케이션 프레임워크 ● 이벤트 기반 비동기 처리 ● 쉽고 빠른 네트워크 애플리케이션 작성 ● IO API 추상화 ● 애플, 트위터, 페이스북 등에서 사용중 ● 현재 안정화 버전 3.10.5.Final, 4.0.32.Final, 5.0.0-Alpha2
  • 6. 개발자가 알아야 할 구성 부트스트랩 채널 파이프라인 코덱코덱 이벤트 루프 코덱
  • 10. 채널 파이프라인 ● 채널에서 발생한 이벤트가 이동하는 통로 이벤트 처리 코드 이벤트 핸들러 이벤트 처리 코드 이벤트 핸들러 이벤트이벤트이벤트
  • 11. 코덱 ● 인코더와 디코더의 합성어 영상 인코딩 MP4 압축 MPEG4 코덱 디코딩 영상 복원 MPEG4 코덱
  • 12. 코덱 ● 소켓 채널을 기준으로 인코딩과 디코딩이 이루어짐 데이터 인코딩 디코딩패킷 데이터 로직처리 후 패킷 변환 인코더 데이터 변환 후 로직처리 디코더
  • 13. 코덱 ● 인바운드와 아웃바운드 클라이언트 서버 소켓 서버소켓 Outbound 지금 10시야! 지금 몇 시니? Outbound Inbound Inbound
  • 14. 사용자 정의 코덱 작성 ● ChannelInboundHandler, ChannelOutboundHandler 인코더 ChannelOutboundHandler 디코더 ChannelInboundHandler ● channelActive ● channelInactive ● channelRead ● channelReadComplete ● channelRegistered … ● bind ● close ● connect ● deregister ● disconnect …
  • 15. 코덱 ● 애플리케이션의 로직 = 코덱 ● 네티의 기본 제공 코덱 목록 zlib, gzip, Snappy 압축 코덱 websocket, CORS HTTP 코덱 Marshaller, Unmarshaller marshalling 코덱 TLS, SPDY spdy 코덱 base64 BASE64 코덱 RxtxChannel rxtx 코덱 MqttDecoder, MqttEncoder mqtt 코덱 ProtobufDecoder, ProtobufEncoder protobuf 코덱 등등 수 많은 코덱
  • 16. 네티의 이벤트 ● 네티의 이벤트는 비동기로 처리됨 ● 필요에 따라서 동기로 처리할 수 있음 ● 이벤트는 모두 이벤트 루프에서 수행됨 ● 네티는 단일 이벤트 루프, 다중 이벤트 루프를 제공 ● 네티의 이벤트는 발생순서와 실행 순서가 항상 일치
  • 17. 이벤트루프 객체 이벤트 루프 코드 ● 단일 이벤트 루프 이벤트이벤트 이벤트 이벤트이벤트
  • 18. 이벤트루프 ● 다중 이벤트 루프 객체 코드 이벤트 루프 이벤트 루프… 이벤트이벤트 이벤트 이벤트이벤트
  • 19. 이벤트루프 ● 이벤트 처리순서 객체 이벤트 루프 이벤트 루프이벤트1 이벤트3 이벤트5 이벤트4 이벤트2
  • 20. 이벤트루프 ● 네티의 이벤트 이벤트 루프 이벤트 루프 채널 채널 이벤트3 이벤트1이벤트2 이벤트3 이벤트1이벤트2
  • 21. 성능 향상 임계점 ● 암달의 법칙 - 시스템의 특정 부분을 개선했을 때 얻을 수 있는 성능 향상치 1-범위 + 성능 향상률 1 범위
  • 22. 성능 향상 임계점 ● 코드의 절반이 2배의 성능을 낼 수 있도록 튜닝 했을 때 얻을 수 있는 이득 1-0.5 + 2 1 0.5 = 133%
  • 23. 네티의 비동기 처리 ● ChannelHandlerContext, ChannelFuture @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { // IO 처리 메서드 read, write, close, connect … ChannelFuture future = ctx.write(msg); // write 메서드의 작업이 완료되었을 때 이벤트를 받을 수 있는 리스너 설정 future.addListener(listener); // IO 작업이 완료되었는지 확인할 수 있음. future.isDone(); // IO 작업이 완료될 때까지 대기 future.sync(); }
  • 24. 네티의 비동기 처리 ● ChannelFutureListener 네티가 제공하는 기본 ChannelFutureListener ● ChannelFutureListener.CLOSE ● ChannelFutureListener.CLOSE_ON_FAILURE ● ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { ChannelFuture future = ctx.write(msg); future.addListener(ChannelFutureListener.CLOSE ); }
  • 25. 네티의 사용처 ● Facebook - Netty-based Thrift transport implementation, Nifty ● Apple - Java service server ● AireLive - TCP based Messaging server, HTTP based API server ● ElasticSearch core - HTTP based API service, Client transport layer ● Apache Spark - Cluster data transfer ● Google – gRPC, Red Hat – Infinispan, Typesafe - Play Framework
  • 26. 마치며 ● 네티 4.0이상부터 안드로이드를 공식 지원 ● 하나의 네티 애플리케이션에서 두 개의 포트를 바인딩 - 부트스트랩의 바인드 메서드를 두 번 호출 ● 성능은 애플리케이션이 제공하는 기능에 따라서 달라진다. - 데이터베이스 조회 vs 캐시 조회 ● 이벤트 루프의 개수는 테스트를 통해서 선택하라. - nGrinder, Jmeter ● 네티의 ChannelFuture.sync() 메서드는 신중히 사용할 것. ● 네티의 Channel.write() 메서드는 내부적으로 requestQueue를 관리함. ● 사용자 정의 코덱은 EmbeddedChannel 클래스를 통해서 테스트