SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Downloaden Sie, um offline zu lesen
Netty 시작하기 (1)
고성능 네트워크 애플리케이션 프레임워크
김대현
@hatemogi
0
지금 보시는 발표 자료는...
위 주소에서 직접 볼 수 있고, [SPC]를 누르면 다음 슬라이드로, [Shift­SPC]를
누르면 이전 슬라이드로 이동합니다.
http://hatemogi.github.io/netty­startup
김대현     
2015, Netty 기반 서버 개발
2013, 사내 Redis SaaS 개발팀장, 160+ VM
2010, 클라우드, 네트워크 파일동기화 프로토콜 설
계
2010, MyPeople, 네트워크 아키텍쳐 설계
2009, Cafe 채팅 부하분산 서버 개발
2004, Cafe 한줄메모장 개발, 일일 3억 PV
  
과정
1.  Netty의 기본 설명
2.  문제 풀이
3.  예제 이해 / 실습 개발
목표
Event­Driven, 비동기 I/O 이해
Netty로 개발 경험
(조만간) 실무에 응용
준비사항
IntelliJ 14 CE
JDK8
Git 클라이언트
4시간 진행 주제
1.  비동기 개념, 기본 인터페이스( Channel) 정리
2. 
3. 
4. 
예제와 실습
1.  Discard 서버, Echo 서버
2.  HTTP 서버
3.  채팅 서버
4.  웹소켓 채팅 서버
고성능 메모리 모델과 유연한 파이프라인
깔끔한 쓰레드 모델, Future/Promise 활용
풍부한 코덱과 WebSocket
매 시간 구조
1.  설명 (20분)
2.  예제 설명 / 데모 (10분)
3.  pair 실습 (25분)
총 9개 문제 풀이
 다음의 공통점
Nginx
HAProxy
Memcached
Redis
Node.js?
왜 Netty를 쓸까?
고성능
쓰기 편하다 (유연하고 쉽다)
얼마나 빠른가?   netty servlet
Netty가 고성능인 이유
Non­blocking Asynchronous 처리가 기본
적은 쓰레드로 많은 요청을 처리
GC부하를 최소화하는 Zero­copy ByteBuf 지원
Netty가 편한 이유
각종 네트워크 프로토콜 (코덱) 기본 지원
필요한 부분을 쉽게 조립해 쓸 수 있는 구조
멀티쓰레딩 처리 없이도...
Netty 버전
5.0.0.Alpha2 ‑ 04­Mar­2015 (Development)
4.1.0.Beta4 ‑ 04­Mar­2015 (Development)
4.0.26.Final ‑ 04­Mar­2015 (Stable, Recommended)
3.10.1.Final ‑ 23­Mar­2015 (Stable)
이 자료와 실습은 4.0.26.Final을 기준으로 합니다.
동기와 비동기
Synchronous vs. Asynchronous
Blocking vs. Non­blocking
우리말로 하자면...
요청하고 결과를 계속 기다리기
완료되면 알려달라고 요청하고 다른 일 하기
 고객센터에 전화를 했는데...
 모든 상담원이 통화중입니다.
1.  연결될 때까지 기다리기
2.  전화해달라는 기록 남기고 끊기
 동기 or 비동기
 커피 주문
지하철 이용, 자가 운전
업무요청 메일, 업무문의 전화
팀장의 업무지시




동기 (Synchronous) 코드
 Blocking call
//동기 방식
voidgreeting(Contextctx){
Stringreq=ctx.readLine();
ctx.write("안녕,"+req);
System.out.println("완료");
}
비동기 (Asynchronous) 코드
 Non­blocking call
//비동기 방식
voidgreeting(Contextctx){
ctx.readLine().done(line->{
ctx.write("안녕,"+req);
});
System.out.println("완료");
}
Event­Driven Programming
In computer programming, event­driven programming is a programming
paradigm in which the flow of the program is determined by events such as user
actions (mouse clicks, key presses), sensor outputs, or messages from other
programs/threads. Event­driven programming is the dominant paradigm used in
graphical user interfaces and other applications (e.g. JavaScript web
applications) that are centered on performing certain actions in response to user
input. Wikipedia
사건 기반 프로그래밍
사건 기반 프로그래밍(영어: Event­driven programming; EDP)은 비주얼 베이직과 같이,
사용자의 명령·마우스 클릭·다른 프로그램의 메시지·키보드 글쇠 입력 등의 ‘사건’에 따라, 제어
흐름이 결정되어 일을 하도록 하게끔 만들어진 프로그래밍 언어 방식을 뜻한다. 위키백과
등잔 밑의 Event­Driven 코드
자바스크립트
iOS 앱
Android 앱
데스크탑 애플리케이션
$("button").on("click",function(event){
console.log(event);
alert("클릭");
});
True or False 
비동기와 Event­driven은 같은 뜻이다?
Event­Driven은 데스크탑앱 클라이언트에만 적합하다?
비동기식 싱글쓰레드에서는 Blocking Call을 할 수 없다?

 업무요청시
업무 요청하고 옆에서 기다리고 있으면?
업무 요청하고 돌아갔다가, 나중에 다시 와서 확인하면?
업무 요청하면서, "다되면 저한테 알려주세요"하면?

Netty는 Async Event­Driven
됩니다만...
어? 그럼 그냥 Java의 NIO를 쓰면 안되나요 
Netty의 핵심 인터페이스
Channel
ChannelFuture
ChannelHandler
ChannelHandlerContext
ChannelPipeline
EventLoop
Channel
읽기, 쓰기, 연결(connect), 바인드(bind)등의 I/O 작업을 할 수 있는 요소 또
는 네트워크 연결
모든 I/O 작업은 비동기 ­>  ChannelFuture
핵심 메소드
ChannelFuture write(Objectobj)
ChannelFuture flush(Objectobj)
ChannelFuture writeAndFlush(Objectobj)
ChannelFuture closeFuture()
ChannelPipelinepipeline()
SocketAddress remoteAddress()
ChannelFuture
Channel의 I/O 작업의 결과
ChannelFutureListener를 등록 결과에 따른 작업
핵심 메소드
ChannelFutureaddListener(GenericFutureListener<...>listener)
Channel channel()
boolean isSuccess();
Throwable cause();
ChannelFutureawait()
ChannelFuturesync()
ChannelHandler
Netty의 핵심 요소!
Netty의 I/O 이벤트를 처리하는 인터페이스
ChannelInboundHandlerAdapter
ChannelOutboundHandlerAdapter
전체 메소드
voidexceptionCaught(ChannelHandlerContextctx,Throwablecause)
voidhandlerAdded(ChannelHandlerContextctx)
voidhandlerRemoved(ChannelHandlerContextctx)
ChannelHandlerContext
ChannelHandler는  ChannelHandlerContext를 통해
다음  ChannelHandler에게 이벤트를 넘기거나,
동적으로  ChannelPipeline을 변경할 수 있음 ­ [실습4]
핵심 메소드
Channel channel()
ChannelPipeline pipeline()
ChannelFuture write(Objectmsg)
ChannelHandlerContextfireChannelActive(Objectmsg)
ChannelHandlerContextfireChannelRead(Objectmsg)
ChannelPipeline
Channel에 드나드는 inbound / outbound 이벤트를 처리
 처리,  ChannelHandler 리스트
두번째 시간에 상세 설명
주요 메소드
Intercepting Filter 패턴
ChannelPipelineaddLast(ChannelHandler...handlers)
ChannelPipelineaddLast(Stringname,ChannelHandlerhandler)
ChannelHandler remove(Stringname)
<TextendsChannelHandler>Tremove(Class<T>handlerType)
EventLoop
등록된  Channel들의 모든 I/O 작업을 처리
구현체  NioEventLoopGroup를 주로 사용
주요 메소드
boolean inEventLoop()
<T>Future<T> submit(Callable<T>task)
<V>Promise<V> newPromise()
<V>ScheduledFuture<V>schedule(Callable<V>callable,longdelay,TimeUnitunit)
Channel관련 인터페이스 전체 구조
EventLoop
Channel
Channel
Channel
ChannelPipeline
ChannelHandler 1 ChannelHandler 2 ChannelHandler N
예제와 실습용 프로젝트
Git clone
Netty 4.x JavaDoc
https://github.com/hatemogi/netty­startup
gitclonehttps://github.com/hatemogi/netty-startup
처음에는 실패하는 유닛테스트가 준비돼 있고, 실습문제를 모두 풀면 유닛 테
스트가 모두 통과돼야합니다.
http://netty.io/4.0/api/index.html
첫 예제: DiscardServer
DiscardServer.java
DiscardServerHandler.java
src/nettystartup/h1/discard
src/nettystartup/h1/discard/DiscardServer.java
publicfinalclassDiscardServer{
publicstaticvoidmain(String[]args)throwsException{
EventLoopGroupbossGroup=newNioEventLoopGroup(1);
EventLoopGroupworkerGroup=newNioEventLoopGroup();
try{
ServerBootstrapb=newServerBootstrap();
b.group(bossGroup,workerGroup)
.channel(NioServerSocketChannel.class)
.handler(newLoggingHandler(LogLevel.INFO))
.childHandler(newDiscardServerHandler());
ChannelFuturef=b.bind(8010).sync();
System.err.println("Readyfor0.0.0.0:8010");
f.channel().closeFuture().sync();
}finally{
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
}
src/nettystartup/h1/discard/DiscardServerHandler.java
classDiscardServerHandlerextendsChannelInboundHandlerAdapter{
@Override
publicvoidchannelRead(C..H..Contextctx,Objectmsg)throwsException{
ByteBufbuf=(ByteBuf)msg;
try{
//discard
}finally{
buf.release();//이 부분은 두번째 시간에 설명합니다.
}
}
@Override
publicvoidexceptionCaught(C..H..Contextctx,Throwablecause){
cause.printStackTrace();
ctx.close();
}
}
DiscardServer 테스트
telnet localhost 8010
Trying::1...
Connectedtolocalhost.
Escapecharacteris'^]'.
helo
test
^]
telnet>close
Connectionclosed.
Netty와 유닛테스팅
EmbeddedChannel을 활용
EmbeddedChannelch=
newEmbeddedChannel(newHandlerToBeTested());
EmbeddedChannel
publicclassEmbeddedChannelextendsAbstractChannel{
publicEmbeddedChannel(ChannelHandler...handlers){}
publicObjectreadInbound(){...}
publicObjectreadOutbound(){...}
publicbooleanwriteInbound(Object...msgs){...}
publicbooleanwriteOutbound(Object...msgs){...}
publicvoidcheckException(){...}
}
test/.../h1/discard/DiscardServerHandlerTest.java
publicclassDiscardServerHandlerTest{
@Test
publicvoiddiscard(){
Stringm="discardtestn";
EmbeddedChannelch=newEmbeddedChannel(newDiscardServerHandler());
ByteBufin=Unpooled.wrappedBuffer(m.getBytes());
ch.writeInbound(in);
ByteBufr=(ByteBuf)ch.readOutbound();
assertThat(r,nullValue());
}
}
첫번째 실습: EchoServer
EchoServer
EchoServerHandler
EchoServerHandlerTest
src/nettystartup/h1/echo/EchoServer.java
publicfinalclassEchoServer{
publicstaticvoidmain(String[]args)throwsException{
EventLoopGroupbossGroup=newNioEventLoopGroup(1);
EventLoopGroupworkerGroup=newNioEventLoopGroup();
try{
ServerBootstrapb=newServerBootstrap();
b.group(bossGroup,workerGroup)
.channel(NioServerSocketChannel.class);
//TODO:[실습 1-1]이 부분을 채워서 EchoServerHandler를 등록합니다
ChannelFuturef=b.bind(8020).sync();
f.channel().closeFuture().sync();
}finally{
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
}
src/nettystartup/h1/echo/EchoServerHandler.java
classEchoServerHandlerextendsChannelInboundHandlerAdapter{
@Override
publicvoidchannelRead(ChannelHandlerContextctx,Objectmsg){
//TODO:[실습1-2]받은대로 응답하는 코드를 한 줄 작성합니다.release는 필요하지 않습니다.
}
@Override
publicvoidchannelReadComplete(ChannelHandlerContextctx){
ctx.flush();
}
@Override
publicvoidexceptionCaught(ChannelHandlerContextctx,Throwablecause){
cause.printStackTrace();
ctx.close();
}
}
test/nettystartup/h1/echo/EchoServerHandlerTest.java
publicclassEchoServerHandlerTest{
@Test
publicvoidecho(){
Stringm="echotestn";
EmbeddedChannelch=newEmbeddedChannel(newEchoServerHandler());
ByteBufin=Unpooled.copiedBuffer(m,CharsetUtil.UTF_8);
ch.writeInbound(in);
ByteBufr=(ByteBuf)ch.readOutbound();
releaseLater(r);
assertThat("응답이 없습니다",r,notNullValue());
assertThat("참조수는 1이어야 합니다",r.refCnt(),is(1));
assertThat("수신한 텍스트가 결과로 와야합니다",r.toString(CharsetUtil.UTF_8),equalTo(m));
}
}
실습 정리
Netty로 네트워크 서버를 만들어 봤습니다.
ChannelHandler의 기초를 익혔습니다.
메모리 모델은 다음 시간에 설명합니다.
참고자료
User guide for Netty 4.x
Netty4 Intro
Why Netty?
The C10K problem
Web Framework
Benchmarks
Reference Counted Objects
Netty 4.x JavaDoc
다음 시간에는...
http://hatemogi.github.io/netty­startup/2.html

Weitere ähnliche Inhalte

Was ist angesagt?

Web socket
Web socketWeb socket
Web socketymtech
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.sung ki choi
 
Netty 시작하기 (4)
Netty 시작하기 (4)Netty 시작하기 (4)
Netty 시작하기 (4)Daehyun Kim
 
Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기KwangSeob Jeong
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라NAVER D2
 
Mongo db intro &amp; tips
Mongo db intro &amp; tipsMongo db intro &amp; tips
Mongo db intro &amp; tipsInBum Kim
 
05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요noerror
 
Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기JeongHun Byeon
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Gitaek kwon
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기KwangSeob Jeong
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?Opennaru, inc.
 
Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님NAVER D2
 
Rhea mmo node_for_share
Rhea mmo node_for_shareRhea mmo node_for_share
Rhea mmo node_for_shareRhea Strike
 
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTPNAVER D2
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 SuHyun Jeon
 
nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제choi sungwook
 
Nodejs를 이용한 개발
Nodejs를 이용한 개발Nodejs를 이용한 개발
Nodejs를 이용한 개발WebFrameworks
 

Was ist angesagt? (20)

실시간통신
실시간통신실시간통신
실시간통신
 
Web socket
Web socketWeb socket
Web socket
 
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
[111015/아꿈사] HTML5를 여행하는 비(非) 웹 개발자를 위한 안내서 - 1부 웹소켓.
 
Netty 시작하기 (4)
Netty 시작하기 (4)Netty 시작하기 (4)
Netty 시작하기 (4)
 
Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기Valet 으로 windows php 개발 환경 구성하기
Valet 으로 windows php 개발 환경 구성하기
 
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
[141] 오픈소스를 쓰려는 자, 리베이스의 무게를 견뎌라
 
Mongo db intro &amp; tips
Mongo db intro &amp; tipsMongo db intro &amp; tips
Mongo db intro &amp; tips
 
05_동기화_개요
05_동기화_개요05_동기화_개요
05_동기화_개요
 
Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교
 
Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기Sonatype nexus 로 docker registry 관리하기
Sonatype nexus 로 docker registry 관리하기
 
Node
NodeNode
Node
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
 
Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님Spring Framework 튜토리얼 - 네이버 최영목님
Spring Framework 튜토리얼 - 네이버 최영목님
 
Rhea mmo node_for_share
Rhea mmo node_for_shareRhea mmo node_for_share
Rhea mmo node_for_share
 
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP[D2 CAMPUS]웹 개발자의 스펙 : HTTP
[D2 CAMPUS]웹 개발자의 스펙 : HTTP
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용
 
nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제nexus helm 설치, docker/helm repo 설정과 예제
nexus helm 설치, docker/helm repo 설정과 예제
 
Nodejs를 이용한 개발
Nodejs를 이용한 개발Nodejs를 이용한 개발
Nodejs를 이용한 개발
 

Ähnlich wie Netty 시작하기 (1)

제11회공개sw개발자대회 금상 TensorMSA(소개)
제11회공개sw개발자대회 금상 TensorMSA(소개)제11회공개sw개발자대회 금상 TensorMSA(소개)
제11회공개sw개발자대회 금상 TensorMSA(소개)Susang Kim
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!IBM Korea
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...문기 박
 
Open standard open cloud engine for digital business process
Open standard open cloud engine for digital business process Open standard open cloud engine for digital business process
Open standard open cloud engine for digital business process uEngine Solutions
 
Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Channy Yun
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토Goonoo Kim
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Jinsoo Jung
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
모바일 개발 트랜드
모바일 개발 트랜드모바일 개발 트랜드
모바일 개발 트랜드Terry Cho
 
중고나라 거래 통계 서비스 1차 개발 완료 보고
중고나라 거래 통계 서비스 1차 개발 완료 보고중고나라 거래 통계 서비스 1차 개발 완료 보고
중고나라 거래 통계 서비스 1차 개발 완료 보고embian
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos uEngine Solutions
 
designing, implementing and delivering microservices with event storming, spr...
designing, implementing and delivering microservices with event storming, spr...designing, implementing and delivering microservices with event storming, spr...
designing, implementing and delivering microservices with event storming, spr...uEngine Solutions
 
__Cloud_CNA_MSA_Service+Data+InferenceMesh 소개-박문기@메가존클라우드-20230320.pptx
__Cloud_CNA_MSA_Service+Data+InferenceMesh 소개-박문기@메가존클라우드-20230320.pptx__Cloud_CNA_MSA_Service+Data+InferenceMesh 소개-박문기@메가존클라우드-20230320.pptx
__Cloud_CNA_MSA_Service+Data+InferenceMesh 소개-박문기@메가존클라우드-20230320.pptx문기 박
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 YoungSu Son
 
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144Darion Kim
 
락플레이스 OpenShift Q&A 토크쇼 발표자료
락플레이스 OpenShift Q&A 토크쇼 발표자료락플레이스 OpenShift Q&A 토크쇼 발표자료
락플레이스 OpenShift Q&A 토크쇼 발표자료rockplace
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기Dexter Jung
 

Ähnlich wie Netty 시작하기 (1) (20)

제11회공개sw개발자대회 금상 TensorMSA(소개)
제11회공개sw개발자대회 금상 TensorMSA(소개)제11회공개sw개발자대회 금상 TensorMSA(소개)
제11회공개sw개발자대회 금상 TensorMSA(소개)
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!SoftLayer에서 VM 생성해보기!
SoftLayer에서 VM 생성해보기!
 
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
MSA(Service Mesh), MDA(Data Mesh), MIA(Inference Mesh) 기술동향 소개-박문기@메ᄀ...
 
Open standard open cloud engine for digital business process
Open standard open cloud engine for digital business process Open standard open cloud engine for digital business process
Open standard open cloud engine for digital business process
 
Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)Mozilla 오픈 웹 모바일 플랫폼 (2012)
Mozilla 오픈 웹 모바일 플랫폼 (2012)
 
댓글 플러그인 아포가토
댓글 플러그인 아포가토댓글 플러그인 아포가토
댓글 플러그인 아포가토
 
Slipp 발표 자료 20151212
Slipp 발표 자료 20151212Slipp 발표 자료 20151212
Slipp 발표 자료 20151212
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
모바일 개발 트랜드
모바일 개발 트랜드모바일 개발 트랜드
모바일 개발 트랜드
 
Netronics
NetronicsNetronics
Netronics
 
중고나라 거래 통계 서비스 1차 개발 완료 보고
중고나라 거래 통계 서비스 1차 개발 완료 보고중고나라 거래 통계 서비스 1차 개발 완료 보고
중고나라 거래 통계 서비스 1차 개발 완료 보고
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 
designing, implementing and delivering microservices with event storming, spr...
designing, implementing and delivering microservices with event storming, spr...designing, implementing and delivering microservices with event storming, spr...
designing, implementing and delivering microservices with event storming, spr...
 
__Cloud_CNA_MSA_Service+Data+InferenceMesh 소개-박문기@메가존클라우드-20230320.pptx
__Cloud_CNA_MSA_Service+Data+InferenceMesh 소개-박문기@메가존클라우드-20230320.pptx__Cloud_CNA_MSA_Service+Data+InferenceMesh 소개-박문기@메가존클라우드-20230320.pptx
__Cloud_CNA_MSA_Service+Data+InferenceMesh 소개-박문기@메가존클라우드-20230320.pptx
 
초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드 초보 개발자/학생들을 위한 오픈소스 트랜드
초보 개발자/학생들을 위한 오픈소스 트랜드
 
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
재업로드주소: https://www.slideshare.net/hnki0104/gsshop-103837144
 
락플레이스 OpenShift Q&A 토크쇼 발표자료
락플레이스 OpenShift Q&A 토크쇼 발표자료락플레이스 OpenShift Q&A 토크쇼 발표자료
락플레이스 OpenShift Q&A 토크쇼 발표자료
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기
 
Local Dev
Local DevLocal Dev
Local Dev
 

Netty 시작하기 (1)