SlideShare a Scribd company logo
Netty 시작하기 (3)
깔끔한 쓰레드 모델과 채널퓨처&프로미스
김대현
@hatemogi
8
Netty 시작하기: 세번째 시간
Netty의 쓰레드 모델
ChannelFuture와
ChannelPromise
실습과 예제
텍스트 기반 채팅 서버 개
발
쓰레드가 무엇인가요?
멀티 프로세스와 멀티 쓰레드의 차
이?
멀티쓰레드 처리가 어려운 이유
동기화를 놓치면 ­> 경쟁조건 발생
동기화가 과도하면 ­> 성능병목, 교착상태 발
생
교착상태(deadlock)의 4가지 필요조건
상호배제 
Mutual exclusion
점유대기 Hold and wait
비선점 No preemption
순환대기 Circular wait
멀티쓰레드 프로그래밍
동시에 여러 일을 처리하기 쉬워보이지
만,
제대로 작성하기 어렵습니다
Netty의 깔끔한 쓰레드 모델
ChannelHandler의 메소드는 동시에 불리지 않는다
채널은 한 쓰레드에 할당되며, 그 쓰레드에서만 호출
등록된  도 그 쓰레드가 호출한다
쓰레드 모델을 풀어서 설명하면
각 채널은 (사실상) 싱글쓰레드로 운영
쓰레드 안전성(thread­safety)를 신경쓰지 않아도 됨
 주의
채널핸들러 등록시에 별도 쓰레드를 지정할 수도 있는데,
이 경우 다른 핸들러는 다른 쓰레드가 호출할 수 있음
즉, 쓰레드 안전성을 고려해야함
채널과 쓰레드의 관계
은  에 등록
는 Channel에 하나의 쓰레드를 할당
해당 쓰레드 입장에서는 여러개의  을 처리
그러나  입장에서는 단일 쓰레드
Future & Promise
비동기 호출의 결과도 받을 수 있지만,
다른 쓰레드에 업무를 요청시에도 사용
Future 활용예
차례로 부르는 것처럼 이해하기 쉬움
이미지 로딩을 동시에 진행
필요한 시점에 로드가 끝나지 않았다면 알아서 대기
Promise
Future에 결과를 통보하는 입장에서 사용
Netty의 Promise
실습: 채팅 서버 프로토콜
실습 목적의 UTF­8 텍스트 기반 간단 채팅
클라이언트는 우선   활용
서버 전체에 통합 대화방 한개
연결하면 서버가 임의 대화명 발급 (변경가능)
채팅 프로토콜 doc/protocol.md
: UTF­8 텍스트, "n" ;
 =   |  , " ",   ;
 =   |  , ":",   ;
프로토콜 예
클라이언트가 보내는 메시지
서버가 보내는 메시지
대화의 예
# 서버가 보냄 클라이언트
1 HAVE:steve
2 HELO:david
3 NICK hatemogi
4 NICK:david hatemogi
5 SEND 안녕하세요
6 FROM:hatemogi 안녕하세요
7 FROM:steve 반갑습니다
본격 개발에 앞서: AttributeMap
Channel이나 ChannelHandler에 속성 바인딩
실습: 텍스트 기반 채팅 서버
ChatServer.java
ChatMessage.java
ChatServerHandler.java
ChatMessageCodec.java
src/nettystartup/h3/ChatServer.java
LineBasedDecoder, StringDecoder, StringDecoder는 마지막 시간에 설명
src/nettystartup/h3/ChatMessage.java
src/nettystartup/h3/ChatServerHandler.java (1)
src/nettystartup/h3/ChatServerHandler.java (2)
src/nettystartup/h3/ChatServerHandler.java (3)
src/nettystartup/h3/ChatMessageCodec.java
와  간 변환 담당
텔넷 접속 확인
참고자료
New and Noteworthy in Netty 4.0
http://en.wikipedia.org/wiki/Futures_and_promises
다음 시간에는...
http://hatemogi.github.io/netty­startup/4.html

More Related Content

PPTX
중급 소켓프로그래밍
PDF
읽기 좋은 코드가 좋은코드다
PDF
Effective modern cpp item41
PDF
Effective c++ chapter1 2_dcshin
PDF
7가지 동시성 모델-2장
PDF
자연어5 | 1차강의
PPTX
Ropasaurusrex
PDF
함수형사고 3장 양도하라
중급 소켓프로그래밍
읽기 좋은 코드가 좋은코드다
Effective modern cpp item41
Effective c++ chapter1 2_dcshin
7가지 동시성 모델-2장
자연어5 | 1차강의
Ropasaurusrex
함수형사고 3장 양도하라

What's hot (20)

PDF
Tcpl 12장 파생클래스
PDF
광운대[바람] 3.vhdl test bench
PDF
LockFree Algorithm
PDF
[아꿈사/110528] 멀티코어cpu이야기 5,6장
PPTX
Thread programming
PPTX
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
PDF
파이썬과 자연어 5 | 딥러닝
PPTX
[아꿈사] The C++ Programming Language 13장 템플릿
PPTX
Flyweight
PPTX
Chapter7~9 ppt
PPTX
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장
PPTX
C++ 개요와 표준안
PDF
More effective c++ 항목30부터
PPTX
Windosw via c 스터디2장
PDF
[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어
PDF
Effective c++ chapter5 6_ 131039 신동찬
PPTX
Multi-thread : producer - consumer
PDF
Effective c++ chapter 1,2 요약
PDF
C Language For Arduino
PDF
자연어4 | 1차강의
Tcpl 12장 파생클래스
광운대[바람] 3.vhdl test bench
LockFree Algorithm
[아꿈사/110528] 멀티코어cpu이야기 5,6장
Thread programming
2015 나는 프로그래머다 컨퍼런스 (11) 염산악 - 가독성에 대하여
파이썬과 자연어 5 | 딥러닝
[아꿈사] The C++ Programming Language 13장 템플릿
Flyweight
Chapter7~9 ppt
프로그래머가 몰랐던 멀티코어 CPU 이야기 - 15, 16장
C++ 개요와 표준안
More effective c++ 항목30부터
Windosw via c 스터디2장
[부스트캠프 Tech Talk]조찬영_타입스크립트없인 코딩할 수 없는 몸이 되버렸어
Effective c++ chapter5 6_ 131039 신동찬
Multi-thread : producer - consumer
Effective c++ chapter 1,2 요약
C Language For Arduino
자연어4 | 1차강의
Ad

Viewers also liked (6)

PDF
Netty 시작하기 (4)
PDF
Netty 시작하기 (2)
PDF
devon2013: 사내Git저장소개발사례
PPTX
Network 초보자를 위한 Netty
PDF
Get started with netty
Netty 시작하기 (4)
Netty 시작하기 (2)
devon2013: 사내Git저장소개발사례
Network 초보자를 위한 Netty
Get started with netty
Ad

Similar to Netty 시작하기 (3) (20)

PDF
(C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌
PPTX
Effective c++ 4
PDF
7 8 1
PPTX
병렬 프로그래밍 패러다임
PPTX
서버 아키텍처 이해를 위한 프로세스와 쓰레드
PPTX
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
PDF
Architecture patterns with python (2)
PDF
NoSQL 간단한 소개
PPTX
김성훈 - 뛰어난 디버거가 되는 방법
PDF
R2서버정진욱
PPTX
깨끗한 코드 (클린 코드, Clean Code)
PDF
Effective c++ chapter7_8_9_dcshin
PDF
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
PDF
2017 tensor flow dev summit
PDF
C++ api design 품질
PDF
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
PPTX
PDF
검색엔진에 적용된 ChatGPT
PDF
맛만 보자 액터 모델이란
PDF
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
(C#,멀티쓰레드강좌)쓰레드, STA, MTA개요, 간단한 멀티쓰레드 예제_닷넷,C#,WPF,자마린실무강좌
Effective c++ 4
7 8 1
병렬 프로그래밍 패러다임
서버 아키텍처 이해를 위한 프로세스와 쓰레드
multi-thread 어플리케이션에 대해 모든 개발자가 알아 두지 않으면 안 되는 것
Architecture patterns with python (2)
NoSQL 간단한 소개
김성훈 - 뛰어난 디버거가 되는 방법
R2서버정진욱
깨끗한 코드 (클린 코드, Clean Code)
Effective c++ chapter7_8_9_dcshin
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
2017 tensor flow dev summit
C++ api design 품질
[FEConf 2018] Front-End 프로젝트의 Test code 작성경험기
검색엔진에 적용된 ChatGPT
맛만 보자 액터 모델이란
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기

Netty 시작하기 (3)