SlideShare uma empresa Scribd logo
1 de 39
Vert.x 가 좋다!
Vert.x is a poluglot, non-blocking, event-driven
Application platform that Runs on The JVM.
입문
Vert.x?
Vert.x is a polyglot, non-blocking, event-driven
Application platform that Runs on The JVM.
철학
Polyglot
Super Simple Concurrency model
Event Bus
Module System & Public Module Repository
아키텍처
Vert.x 애플리케이션은 Verticle 또는 Module
의 조합으로 이루어지며 이들 간의 통신은
Event Bus를 사용한다.
Vert.x 아키텍처
용어들…
Verticle
vert.x 인스턴스
동시성(concurrency)
Event-based Programming Model
Event Loops
Message Passing
Shared data
vert.x Core
Node.js 와의 성능 비교
200 OK 응답만 주었을 때의 성능 비교 72바이트 크기의 정적 파일 제공 성능 비교
개인적으로 좋은 부분
1. Event-based 프로그래밍 모델을 제공하
는 프레임웍.
2. 멀티코어 리소스를 쉼게 사용.
3. Event Bus.
4. Module System.
5. Polyglot.
개발자 커뮤니티
자료를 얻기 위한 실질적인 유일한 곳!!
주요 답변자
• timfox – RabbitMQ 개발자
• normanmaurer – Netty 개발자
Please don’t use StackOverflow to ask Vert.x questions – ask them here!
Hello World
public class MainVerticle extends Verticle {
public void start() {
container.logger().info(“MainVerticle start”);
vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
public void handle(HttpServerRequest req) {
req.response().headers().set(“Content-Type”, “text/plain”);
req.response().end(“Hello World!”);
}
}).listen(8080);
}
}
주의 사항
1. 코드의 중첩이 깊어지게 하지 말자
2. 차단 코드를 작성하지 말자
3. 상태전이에 주의 하자
개발 환경 구축
목차
1. 환경설정
2. 설치
3. 셋팅
4. gradle project template
5. auto redeploy
6. remote debugging
환경설정
• JDK 1.7 이상이 필요.
• Eclipse
설치
1. 홈페이지에서 최신 버전을 다운로드 받
는다.
2. 적당한 경로에 압축을 해제한다.
3. 환경변수에 경로를 설정한다.
4. vertx 명령이 실행되는지 확인한다.
5. 앞에 작성한 Hello World 코드를 작성하
여 실행해 본다.
http://vertx.io/downloads.html
설치
1. 홈페이지에서 최신 버전을 다운로드 받
는다.
2. 적당한 경로에 압축을 해제한다.
3. 환경변수에 경로를 설정한다.
4. vertx 명령이 실행되는지 확인한다.
5. 앞에 작성한 Hello World 코드를 작성하
여 실행해 본다.
jee1@~ $ cat .bashrc
PATH=“$PATH”:/home/jee1/vert.x/bin
jee1@~ $ source .bashrc
설치
1. 홈페이지에서 최신 버전을 다운로드 받
는다.
2. 적당한 경로에 압축을 해제한다.
3. 환경변수에 경로를 설정한다.
4. vertx 명령이 실행되는지 확인한다.
5. 앞에 작성한 Hello World 코드를 작성하
여 실행해 본다.
jee1@~ $ vertx
usage 문구가 표시되면 설치 완료.
설치
1. 홈페이지에서 최신 버전을 다운로드 받
는다.
2. 적당한 경로에 압축을 해제한다.
3. 환경변수에 경로를 설정한다.
4. vertx 명령이 실행되는지 확인한다.
5. 앞에 작성한 Hello World 코드를 작성하
여 실행해 본다.
jee1@work $ vertx run
HelloWorldVerticle.java
Verticle start.
이후 브라우저로 8080 포트에 접속하면
Hello World! 문구를 확인할 수 있음.
셋팅
기본 설정은 로그가 OS의 temp 디렉토리에
vertx.log 로 생성.
설정파일 위치 vert.x/conf/logging.properties
# Put the log in the system temporary directory
# java.util.logging.FileHandler.pattern = %t/vertx.log
java.uril.logging.FileHandler.pattern =
/home/jee1/vertx/log/vertx.log
jee1@~ $ cat vertx/log/vertx.log
[vert.x-eventloop-thread-2] 03:06:37,789 INFO [null-
HelloWorldVerticle.java-704507910] Verticle start.
gradle project template
간단한 프로토타입은 Verticle 로 개발가능.
그러나, Module 로 개발을 권장.
Module을 개발하기 위한 방법
• Maven 을 이용한 방법
• Gradle 을 이용한 방법
Gradle 는 Groovy의 빌드 도구.
별도 설치 필요 없음.
Gradle 를 이용한 방법 선호
특별한 이유는 없으나 팀 폭스가
그래들을 사용해서 예제가 Gradle 로
되어 있음.
그래서 너도 나도 Gradle…
gradle project template
1. git clone 하여 eclipse로 가져오기
2. mod.json 수정
3. HelloWorldVerticle 을 Module로 이동
4. Module 실행
gradle project template
1. git clone 하여 eclipse로 가져오기
2. mod.json 수정
3. HelloWorldVerticle 을 Module로 이동
4. Module 실행
jee1@work $ git clone https://github.com/vert-x/vertx-
gradle-template.git my-vertx-module
jee1@work $ cd my-vertx-module/
jee1@my-vertx-modyle $ git remote rm origin
jee1@my-vertx-modyle $ ./gradlew test
jee1@my-vertx-modyle $ ./gradlew eclipse
gradle project template
1. git clone 하여 eclipse로 가져오기
2. mod.json 수정
3. HelloWorldVerticle 을 Module로 이동
4. Module 실행
jee1@my-vertx-modyle $ vi ./src/main/resources/mod.json
“main”:“com.mycompany.myproject.PingVerticle”
gradle project template
1. git clone 하여 eclipse로 가져오기
2. mod.json 수정
3. HelloWorldVerticle 을 Module로 이동
4. Module 실행
jee1@my-vertx-modyle $ vi ./src/main/resources/mod.json
// “main”:“com.mycompany.myproject.PingVerticle”
“main”:”HelloworldVerticle”
jee1@my-vertx-modyle $ ./gradlew runModEclipse
두가지 문제
gradle project template
1. git clone 하여 eclipse로 가져오기
2. mod.json 수정
3. HelloWorldVerticle 을 Module로 이동
4. Module 실행
jee1@my-vertx-module $ vertx runmod
com.mycompany~my-module~0.0.1 –cp bin
jee1@my-vertx-module $ vi gradle/vertx.gradle
task copyModJson( type:Copy, dependsOn: 'copyMod' ,
description: 'Copy the mod.json into the local mods directory
for runmod auto-redeploy' ) {
file( "mods/$moduleName" ).mkdirs()
from "build/mods/$moduleName/mod.json”
into "mods/$moduleName“
}
jee1@my-vertx-module $ ./gradlew copyModJson
auto redeploy
mod.json 에 정의
기본값은 false
“main”:“HelloWorldVerticle”,
“auto-redeploy”:true,
remote debugging
vert.x/bin/vertx 의 시작부분에 있는
JVM_OPTS 를 수정
Eclipse의 remote debugging 에서 설정한 포
트(8000) 로 연결하면 remote debugging 사
용 가능.
#JVM_OPTS="-XX:+CMSClassUnloadingEnabled -XX:-
UseGCOverheadLimit“
#JVM_OPTS="“
JVM_OPTS="-Xdebug -
Xrunjdwp:transport=dt_socket,address=8000,server=y,suspe
nd=n”
DEMO
소스코드 다운받을 곳:
Event Loops 와 Verticle 인스턴스
목차
1. Vert.x ’s Threads
2. Event Loops
3. Verticle Instances
4. Event Loop & Verticle Instances
5. Performance Test
Vert.x ‘s Threads
main thread 1개
vert.x-eventloop-thread 가 4개
vert.x-worker-thread 가 20개
Event Loops
왜 eventloop-thread 가 4개인가? org.vertx.java.core.impl.VertxExecutorFactory.java
public static EventLoopGroup eventLoopGroup(String
poolName) {
int poolSize =
Integer.getInteger( "vertx.pool.eventloop.size" ,
Runtime.getRuntime().availableProcessors());
return new NioEventLoopGroup(poolSize, new
VertxThreadFactory(poolName));
}
jee1@my-vertx-module $ grep –c processor /proc/cpuinfo
4
Verticle Instances
-instances 옵션을 사용하여 인스턴스를 늘
릴수 있음.
Verticle 생성시 EventLoopGroup에서 하나
의 eventloop_thread를 할당하고 Verticle을
맵핑.  동기화등의 고민없이 쉽게 작성가
능.
jee1@my-vertx-module $ vertx runmod
com.mycompany~my-module~0.0.1 –cp bin –instances 10
org.vertx.java.platform.impl.DefaultPlatformManager.java
org.vertx.java.core.impl.DefaultContext.java
org.vertx.java.core.impl.DefaultVertx.java
Event Loop & Verticle Instances
• Event Loops 는 코어수에 따라 쓰레드 수
를 자동 결정
• Verticle Instances 는 –instances 옵션을
지정해서 인스턴스 수 변경 가능
• 1개의 Verticle 인스턴스가 생성될 때
Event Loops 에서 하나의 eventloop-
thread 가 할당
1. vertx-eventloop-thread-0
• Verticle-0
• Verticle-4
• Verticle-8
2. vertx-eventloop-thread-1
• Verticle-1
• Verticle-5
• Verticle-9
3. vertx-eventloop-thread-2
• Verticle-2
• Verticle-6
4. vertx-eventloop-thread-3
• Verticle-3
• Verticle-7
Performance Test
테스트한 환경에서의 eventloop-thread 는 4
Verticle의 인스턴스 수를 1,2,4,8 로 변화시
켜 테스트 진행.
Vertx 예제에 있는 http performance
example 사용하여 테스트 진행.
(https://github.com/vert-x/vertx-
examples/tree/master/src/raw/java/httpperf)
jee1@my-vertx-module $ vertx runmod
com.mycompany~my-module~0.0.1 –cp bin (–instances
2/4/8)
jee1@java $ vertx run perf / RateCounter.java –cluster
Starting clustering…
No Cluster-host specified so using address 10.0.1.6
jee1@java $ vertx run httpperf / RerfClient.java –instances 4
–cluster
Starting clustering…
No Cluster-host specified so using address 10.0.1.6
Performance Test
인스턴스 수 1 71968 Rate : count / sec : 124666.66666666667 Average rate :
120609.15962650067
74968 Rate : count / sec : 124666.66666666667 Average rate :
120771.52918578594
77968 Rate : count / sec : 123333.33333333333 Average rate :
120870.10055407346
80967 Rate : count / sec : 125375.12504168056 Average rate :
121036.96567737473
83967 Rate : count / sec : 123333.33333333333 Average rate :
121119.01104005145
86967 Rate : count / sec : 123333.33333333333 Average rate :
121195.39595478745
89967 Rate : count / sec : 126000.0 Average rate : 121355.60816743918
92967 Rate : count / sec : 126000.0 Average rate : 121505.48043929566
95968 Rate : count / sec : 123958.68043985339 Average rate :
121582.19406468823
98968 Rate : count / sec : 12533​​3.33333333333 Average rate :
121695.9017056018
Performance Test
인스턴스 수 2 72824 Rate : count / sec : 179393.13104368123 Average rate :
168241.23915192793
75825 Rate : count / sec : 176607.79740086637 Average rate :
168572.37059017475
78825 Rate : count / sec : 178666.66666666666 Average rate :
168956.5493​​1810973
81825 Rate : count / sec : 176000.0 Average rate : 169214.78765658417
84825 Rate : count / sec : 178000.0 Average rate : 169525.49366342468
87825 Rate : count / sec : 172000.0 Average rate : 169610.01992598918
90825 Rate : count / sec : 171333.33333333334 Average rate :
169666.94192127718
93825 Rate : count / sec : 175333.33333333334 Average rate :
169848.12150279776
96825 Rate : count / sec : 178000.0 Average rate : 170100.69713400464
99825 Rate : count / sec : 176666.66666666666 Average rate :
170298.02153769095
Performance Test
인스턴스 수 4 72069 Rate: count/sec: 189270.24325224926 Average rate:
173805.6584661921
75068 Rate: count/sec: 190730.24341447148 Average rate:
174481.8031651303
78068 Rate: count/sec: 190000.0 Average rate: 175078.13700876158
81068 Rate: count/sec: 189333.33333333334 Average rate:
175605.66438052006
84069 Rate: count/sec: 191936.02132622458 Average rate:
176188.60697760174
87068 Rate: count/sec: 190063.3544514838 Average rate:
176666.51352965497
90068 Rate: count/sec: 188666.66666666666 Average rate:
177066.21663631924
93069 Rate: count/sec: 193268.91036321226 Average rate:
177588.6707711483
96068 Rate: count/sec: 193397.79926642214 Average rate:
178082.19178082192
99068 Rate: count/sec: 192666.66666666666 Average rate:
178523.84220939153
Performance Test
인스턴스 수 8 70314 Rate : count / sec : 185333.33333333334 Average rate :
161646.32932275222
73315 Rate : count / sec : 186604.4651782739 Average rate :
162667.93971220078
76314 Rate : count / sec : 186728.90963654552 Average rate :
163613.4916267002
79313 Rate : count / sec : 187395.79859953318 Average rate :
164512.7532686949
82314 Rate : count / sec : 184605.1316227924 Average rate :
165245.28026824113
85313 Rate : count / sec : 186728.90963654552 Average rate :
166000.492304807
88314 Rate : count / sec : 186604.4651782739 Average rate :
166700.63636569513
91315 Rate : count / sec : 177940.68643785405 Average rate :
167070.0323057548
94314 Rate : count / sec : 179393.13104368123 Average rate :
167461.882647327
97314 Rate : count / sec : 178666.66666666666 Average rate :
167807.3041905584
Performance Test
- 인스턴스가 1인 경우는 약 120K
count/sec
- 인스턴스가 2인 경우는 약 170K
count/sec
- 인스턴스가 4인 경우는 약 190K
count/sec
- 인스턴스가 8인 경우는 약 180K
count/sec
참고사이트
• http://vertx.io
• http://helloworld.naver.com/helloworld/163784
• http://www.infoq.com/jp/news/2013/05/high-volume-vertx
• http://vertxproject.wordpress.com/2013/07/17/vert-x-2-0-0-final-is-
released/
• http://m.javaworld.com/javaworld/jw-07-2013/130730-osjp-
enterprise-messaging-and-integration-with-
vertx.html?source=IFWNLE_nlt_jw_2013-07-30
• http://www.infoq.com/jp/news/2013/08/tim_fox_vertx_2
감사합니다.

Mais conteúdo relacionado

Mais procurados

Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
Daum DNA
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
NAVER D2
 

Mais procurados (20)

Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기NODE.JS 글로벌 기업 적용 사례  그리고, real-time 어플리케이션 개발하기
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 
Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012Javascript everywhere - Node.js | Devon 2012
Javascript everywhere - Node.js | Devon 2012
 
Node.js
Node.jsNode.js
Node.js
 
PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정PHP를 위한 NginX(엔진엑스) 시작과 설정
PHP를 위한 NginX(엔진엑스) 시작과 설정
 
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
 
20141229 dklee docker
20141229 dklee docker20141229 dklee docker
20141229 dklee docker
 
자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료
 
Node.js 현재와 미래
Node.js 현재와 미래Node.js 현재와 미래
Node.js 현재와 미래
 
Nginx Testing in NAVER
Nginx Testing in NAVERNginx Testing in NAVER
Nginx Testing in NAVER
 
[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기[1A4]자바스크립트 라이브러리 개발 운영 경험기
[1A4]자바스크립트 라이브러리 개발 운영 경험기
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
Node.js + Websocket 삽질기
Node.js + Websocket 삽질기Node.js + Websocket 삽질기
Node.js + Websocket 삽질기
 
파크히어 Realm 사용 사례
파크히어 Realm 사용 사례파크히어 Realm 사용 사례
파크히어 Realm 사용 사례
 
Python server-101
Python server-101Python server-101
Python server-101
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
 
Springcamp spring boot intro
Springcamp spring boot introSpringcamp spring boot intro
Springcamp spring boot intro
 
Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구Node.js를 사용한 Big Data 사례연구
Node.js를 사용한 Big Data 사례연구
 

Destaque

Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012
Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012
Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012
Daum DNA
 
Smarter Testing with Spock
Smarter Testing with SpockSmarter Testing with Spock
Smarter Testing with Spock
Dmitry Voloshko
 

Destaque (20)

Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012
Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012
Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012
 
Java Testing With Spock - Ken Sipe (Trexin Consulting)
Java Testing With Spock - Ken Sipe (Trexin Consulting)Java Testing With Spock - Ken Sipe (Trexin Consulting)
Java Testing With Spock - Ken Sipe (Trexin Consulting)
 
Maven의 이해
Maven의 이해Maven의 이해
Maven의 이해
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS
프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS
프론트엔드 웹앱 프레임웍 - Bootstrap, Backbone 그리고 AngularJS
 
Unit/Integration Testing using Spock
Unit/Integration Testing using SpockUnit/Integration Testing using Spock
Unit/Integration Testing using Spock
 
Spring puzzlers
Spring puzzlersSpring puzzlers
Spring puzzlers
 
Smarter Testing with Spock
Smarter Testing with SpockSmarter Testing with Spock
Smarter Testing with Spock
 
스크럼 리뷰 이지원 발표용
스크럼 리뷰 이지원 발표용스크럼 리뷰 이지원 발표용
스크럼 리뷰 이지원 발표용
 
Spock
SpockSpock
Spock
 
Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법Ch10.애플리케이션 서버의 병목_발견_방법
Ch10.애플리케이션 서버의 병목_발견_방법
 
e-Sim Sharing (extract)
e-Sim Sharing (extract)e-Sim Sharing (extract)
e-Sim Sharing (extract)
 
톰캣 #11-팁
톰캣 #11-팁톰캣 #11-팁
톰캣 #11-팁
 
Smarter Testing With Spock
Smarter Testing With SpockSmarter Testing With Spock
Smarter Testing With Spock
 
톰캣 #08-웹서버 연동
톰캣 #08-웹서버 연동톰캣 #08-웹서버 연동
톰캣 #08-웹서버 연동
 
Spock framework
Spock frameworkSpock framework
Spock framework
 
JVM과 톰캣 튜닝
JVM과 톰캣 튜닝JVM과 톰캣 튜닝
JVM과 톰캣 튜닝
 
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
[리뷰] 풀스택 개발자를 위한 MEAM 스택 입문
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1
 
프로그래머로 부터 배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)
프로그래머로 부터  배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)프로그래머로 부터  배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)
프로그래머로 부터 배우는 코딩 기술 (プログラマから学ぶコーディングテクニック)
 

Semelhante a Vert.x 세미나 이지원_배포용

Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
지수 윤
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
Ted Won
 

Semelhante a Vert.x 세미나 이지원_배포용 (20)

Node.js 20버전에 변경된 점들.pdf
Node.js 20버전에 변경된 점들.pdfNode.js 20버전에 변경된 점들.pdf
Node.js 20버전에 변경된 점들.pdf
 
Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발Jenkins를 활용한 javascript 개발
Jenkins를 활용한 javascript 개발
 
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOSConfd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
Confd, systemd, fleet을 이용한 어플리케이션 배포 in CoreOS
 
okspring3x
okspring3xokspring3x
okspring3x
 
ARTIK 710 IoT class 02
ARTIK 710 IoT class 02ARTIK 710 IoT class 02
ARTIK 710 IoT class 02
 
[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd[IoT] MAKE with Open H/W + Node.JS - 3rd
[IoT] MAKE with Open H/W + Node.JS - 3rd
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우
 
공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반공간정보아카데미 - Day1 오픈소스개발 일반
공간정보아카데미 - Day1 오픈소스개발 일반
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
Internship backend
Internship backendInternship backend
Internship backend
 
01.개발환경 교육교재
01.개발환경 교육교재01.개발환경 교육교재
01.개발환경 교육교재
 
02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재02.공통컴포넌트 실습교재
02.공통컴포넌트 실습교재
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
[오픈소스컨설팅] Docker를 활용한 Gitlab CI/CD 구성 테스트
 
Image Deep Learning 실무적용
Image Deep Learning 실무적용Image Deep Learning 실무적용
Image Deep Learning 실무적용
 
RHAMT 소개
RHAMT 소개RHAMT 소개
RHAMT 소개
 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 

Último

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
Wonjun Hwang
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
Wonjun Hwang
 

Último (6)

Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)Merge (Kitworks Team Study 이성수 발표자료 240426)
Merge (Kitworks Team Study 이성수 발표자료 240426)
 
캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차캐드앤그래픽스 2024년 5월호 목차
캐드앤그래픽스 2024년 5월호 목차
 
A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)A future that integrates LLMs and LAMs (Symposium)
A future that integrates LLMs and LAMs (Symposium)
 
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution DetectionMOODv2 : Masked Image Modeling for Out-of-Distribution Detection
MOODv2 : Masked Image Modeling for Out-of-Distribution Detection
 
Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)Console API (Kitworks Team Study 백혜인 발표자료)
Console API (Kitworks Team Study 백혜인 발표자료)
 
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
Continual Active Learning for Efficient Adaptation of Machine LearningModels ...
 

Vert.x 세미나 이지원_배포용

  • 1. Vert.x 가 좋다! Vert.x is a poluglot, non-blocking, event-driven Application platform that Runs on The JVM.
  • 2. 입문 Vert.x? Vert.x is a polyglot, non-blocking, event-driven Application platform that Runs on The JVM.
  • 3. 철학 Polyglot Super Simple Concurrency model Event Bus Module System & Public Module Repository
  • 4. 아키텍처 Vert.x 애플리케이션은 Verticle 또는 Module 의 조합으로 이루어지며 이들 간의 통신은 Event Bus를 사용한다. Vert.x 아키텍처
  • 5. 용어들… Verticle vert.x 인스턴스 동시성(concurrency) Event-based Programming Model Event Loops Message Passing Shared data vert.x Core
  • 6. Node.js 와의 성능 비교 200 OK 응답만 주었을 때의 성능 비교 72바이트 크기의 정적 파일 제공 성능 비교
  • 7. 개인적으로 좋은 부분 1. Event-based 프로그래밍 모델을 제공하 는 프레임웍. 2. 멀티코어 리소스를 쉼게 사용. 3. Event Bus. 4. Module System. 5. Polyglot.
  • 8. 개발자 커뮤니티 자료를 얻기 위한 실질적인 유일한 곳!! 주요 답변자 • timfox – RabbitMQ 개발자 • normanmaurer – Netty 개발자 Please don’t use StackOverflow to ask Vert.x questions – ask them here!
  • 9. Hello World public class MainVerticle extends Verticle { public void start() { container.logger().info(“MainVerticle start”); vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() { public void handle(HttpServerRequest req) { req.response().headers().set(“Content-Type”, “text/plain”); req.response().end(“Hello World!”); } }).listen(8080); } }
  • 10. 주의 사항 1. 코드의 중첩이 깊어지게 하지 말자 2. 차단 코드를 작성하지 말자 3. 상태전이에 주의 하자
  • 11. 개발 환경 구축 목차 1. 환경설정 2. 설치 3. 셋팅 4. gradle project template 5. auto redeploy 6. remote debugging
  • 12. 환경설정 • JDK 1.7 이상이 필요. • Eclipse
  • 13. 설치 1. 홈페이지에서 최신 버전을 다운로드 받 는다. 2. 적당한 경로에 압축을 해제한다. 3. 환경변수에 경로를 설정한다. 4. vertx 명령이 실행되는지 확인한다. 5. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. http://vertx.io/downloads.html
  • 14. 설치 1. 홈페이지에서 최신 버전을 다운로드 받 는다. 2. 적당한 경로에 압축을 해제한다. 3. 환경변수에 경로를 설정한다. 4. vertx 명령이 실행되는지 확인한다. 5. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. jee1@~ $ cat .bashrc PATH=“$PATH”:/home/jee1/vert.x/bin jee1@~ $ source .bashrc
  • 15. 설치 1. 홈페이지에서 최신 버전을 다운로드 받 는다. 2. 적당한 경로에 압축을 해제한다. 3. 환경변수에 경로를 설정한다. 4. vertx 명령이 실행되는지 확인한다. 5. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. jee1@~ $ vertx usage 문구가 표시되면 설치 완료.
  • 16. 설치 1. 홈페이지에서 최신 버전을 다운로드 받 는다. 2. 적당한 경로에 압축을 해제한다. 3. 환경변수에 경로를 설정한다. 4. vertx 명령이 실행되는지 확인한다. 5. 앞에 작성한 Hello World 코드를 작성하 여 실행해 본다. jee1@work $ vertx run HelloWorldVerticle.java Verticle start. 이후 브라우저로 8080 포트에 접속하면 Hello World! 문구를 확인할 수 있음.
  • 17. 셋팅 기본 설정은 로그가 OS의 temp 디렉토리에 vertx.log 로 생성. 설정파일 위치 vert.x/conf/logging.properties # Put the log in the system temporary directory # java.util.logging.FileHandler.pattern = %t/vertx.log java.uril.logging.FileHandler.pattern = /home/jee1/vertx/log/vertx.log jee1@~ $ cat vertx/log/vertx.log [vert.x-eventloop-thread-2] 03:06:37,789 INFO [null- HelloWorldVerticle.java-704507910] Verticle start.
  • 18. gradle project template 간단한 프로토타입은 Verticle 로 개발가능. 그러나, Module 로 개발을 권장. Module을 개발하기 위한 방법 • Maven 을 이용한 방법 • Gradle 을 이용한 방법 Gradle 는 Groovy의 빌드 도구. 별도 설치 필요 없음. Gradle 를 이용한 방법 선호 특별한 이유는 없으나 팀 폭스가 그래들을 사용해서 예제가 Gradle 로 되어 있음. 그래서 너도 나도 Gradle…
  • 19. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행
  • 20. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행 jee1@work $ git clone https://github.com/vert-x/vertx- gradle-template.git my-vertx-module jee1@work $ cd my-vertx-module/ jee1@my-vertx-modyle $ git remote rm origin jee1@my-vertx-modyle $ ./gradlew test jee1@my-vertx-modyle $ ./gradlew eclipse
  • 21. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행 jee1@my-vertx-modyle $ vi ./src/main/resources/mod.json “main”:“com.mycompany.myproject.PingVerticle”
  • 22. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행 jee1@my-vertx-modyle $ vi ./src/main/resources/mod.json // “main”:“com.mycompany.myproject.PingVerticle” “main”:”HelloworldVerticle” jee1@my-vertx-modyle $ ./gradlew runModEclipse 두가지 문제
  • 23. gradle project template 1. git clone 하여 eclipse로 가져오기 2. mod.json 수정 3. HelloWorldVerticle 을 Module로 이동 4. Module 실행 jee1@my-vertx-module $ vertx runmod com.mycompany~my-module~0.0.1 –cp bin jee1@my-vertx-module $ vi gradle/vertx.gradle task copyModJson( type:Copy, dependsOn: 'copyMod' , description: 'Copy the mod.json into the local mods directory for runmod auto-redeploy' ) { file( "mods/$moduleName" ).mkdirs() from "build/mods/$moduleName/mod.json” into "mods/$moduleName“ } jee1@my-vertx-module $ ./gradlew copyModJson
  • 24. auto redeploy mod.json 에 정의 기본값은 false “main”:“HelloWorldVerticle”, “auto-redeploy”:true,
  • 25. remote debugging vert.x/bin/vertx 의 시작부분에 있는 JVM_OPTS 를 수정 Eclipse의 remote debugging 에서 설정한 포 트(8000) 로 연결하면 remote debugging 사 용 가능. #JVM_OPTS="-XX:+CMSClassUnloadingEnabled -XX:- UseGCOverheadLimit“ #JVM_OPTS="“ JVM_OPTS="-Xdebug - Xrunjdwp:transport=dt_socket,address=8000,server=y,suspe nd=n”
  • 27. Event Loops 와 Verticle 인스턴스 목차 1. Vert.x ’s Threads 2. Event Loops 3. Verticle Instances 4. Event Loop & Verticle Instances 5. Performance Test
  • 28. Vert.x ‘s Threads main thread 1개 vert.x-eventloop-thread 가 4개 vert.x-worker-thread 가 20개
  • 29. Event Loops 왜 eventloop-thread 가 4개인가? org.vertx.java.core.impl.VertxExecutorFactory.java public static EventLoopGroup eventLoopGroup(String poolName) { int poolSize = Integer.getInteger( "vertx.pool.eventloop.size" , Runtime.getRuntime().availableProcessors()); return new NioEventLoopGroup(poolSize, new VertxThreadFactory(poolName)); } jee1@my-vertx-module $ grep –c processor /proc/cpuinfo 4
  • 30. Verticle Instances -instances 옵션을 사용하여 인스턴스를 늘 릴수 있음. Verticle 생성시 EventLoopGroup에서 하나 의 eventloop_thread를 할당하고 Verticle을 맵핑.  동기화등의 고민없이 쉽게 작성가 능. jee1@my-vertx-module $ vertx runmod com.mycompany~my-module~0.0.1 –cp bin –instances 10 org.vertx.java.platform.impl.DefaultPlatformManager.java org.vertx.java.core.impl.DefaultContext.java org.vertx.java.core.impl.DefaultVertx.java
  • 31. Event Loop & Verticle Instances • Event Loops 는 코어수에 따라 쓰레드 수 를 자동 결정 • Verticle Instances 는 –instances 옵션을 지정해서 인스턴스 수 변경 가능 • 1개의 Verticle 인스턴스가 생성될 때 Event Loops 에서 하나의 eventloop- thread 가 할당 1. vertx-eventloop-thread-0 • Verticle-0 • Verticle-4 • Verticle-8 2. vertx-eventloop-thread-1 • Verticle-1 • Verticle-5 • Verticle-9 3. vertx-eventloop-thread-2 • Verticle-2 • Verticle-6 4. vertx-eventloop-thread-3 • Verticle-3 • Verticle-7
  • 32. Performance Test 테스트한 환경에서의 eventloop-thread 는 4 Verticle의 인스턴스 수를 1,2,4,8 로 변화시 켜 테스트 진행. Vertx 예제에 있는 http performance example 사용하여 테스트 진행. (https://github.com/vert-x/vertx- examples/tree/master/src/raw/java/httpperf) jee1@my-vertx-module $ vertx runmod com.mycompany~my-module~0.0.1 –cp bin (–instances 2/4/8) jee1@java $ vertx run perf / RateCounter.java –cluster Starting clustering… No Cluster-host specified so using address 10.0.1.6 jee1@java $ vertx run httpperf / RerfClient.java –instances 4 –cluster Starting clustering… No Cluster-host specified so using address 10.0.1.6
  • 33. Performance Test 인스턴스 수 1 71968 Rate : count / sec : 124666.66666666667 Average rate : 120609.15962650067 74968 Rate : count / sec : 124666.66666666667 Average rate : 120771.52918578594 77968 Rate : count / sec : 123333.33333333333 Average rate : 120870.10055407346 80967 Rate : count / sec : 125375.12504168056 Average rate : 121036.96567737473 83967 Rate : count / sec : 123333.33333333333 Average rate : 121119.01104005145 86967 Rate : count / sec : 123333.33333333333 Average rate : 121195.39595478745 89967 Rate : count / sec : 126000.0 Average rate : 121355.60816743918 92967 Rate : count / sec : 126000.0 Average rate : 121505.48043929566 95968 Rate : count / sec : 123958.68043985339 Average rate : 121582.19406468823 98968 Rate : count / sec : 12533​​3.33333333333 Average rate : 121695.9017056018
  • 34. Performance Test 인스턴스 수 2 72824 Rate : count / sec : 179393.13104368123 Average rate : 168241.23915192793 75825 Rate : count / sec : 176607.79740086637 Average rate : 168572.37059017475 78825 Rate : count / sec : 178666.66666666666 Average rate : 168956.5493​​1810973 81825 Rate : count / sec : 176000.0 Average rate : 169214.78765658417 84825 Rate : count / sec : 178000.0 Average rate : 169525.49366342468 87825 Rate : count / sec : 172000.0 Average rate : 169610.01992598918 90825 Rate : count / sec : 171333.33333333334 Average rate : 169666.94192127718 93825 Rate : count / sec : 175333.33333333334 Average rate : 169848.12150279776 96825 Rate : count / sec : 178000.0 Average rate : 170100.69713400464 99825 Rate : count / sec : 176666.66666666666 Average rate : 170298.02153769095
  • 35. Performance Test 인스턴스 수 4 72069 Rate: count/sec: 189270.24325224926 Average rate: 173805.6584661921 75068 Rate: count/sec: 190730.24341447148 Average rate: 174481.8031651303 78068 Rate: count/sec: 190000.0 Average rate: 175078.13700876158 81068 Rate: count/sec: 189333.33333333334 Average rate: 175605.66438052006 84069 Rate: count/sec: 191936.02132622458 Average rate: 176188.60697760174 87068 Rate: count/sec: 190063.3544514838 Average rate: 176666.51352965497 90068 Rate: count/sec: 188666.66666666666 Average rate: 177066.21663631924 93069 Rate: count/sec: 193268.91036321226 Average rate: 177588.6707711483 96068 Rate: count/sec: 193397.79926642214 Average rate: 178082.19178082192 99068 Rate: count/sec: 192666.66666666666 Average rate: 178523.84220939153
  • 36. Performance Test 인스턴스 수 8 70314 Rate : count / sec : 185333.33333333334 Average rate : 161646.32932275222 73315 Rate : count / sec : 186604.4651782739 Average rate : 162667.93971220078 76314 Rate : count / sec : 186728.90963654552 Average rate : 163613.4916267002 79313 Rate : count / sec : 187395.79859953318 Average rate : 164512.7532686949 82314 Rate : count / sec : 184605.1316227924 Average rate : 165245.28026824113 85313 Rate : count / sec : 186728.90963654552 Average rate : 166000.492304807 88314 Rate : count / sec : 186604.4651782739 Average rate : 166700.63636569513 91315 Rate : count / sec : 177940.68643785405 Average rate : 167070.0323057548 94314 Rate : count / sec : 179393.13104368123 Average rate : 167461.882647327 97314 Rate : count / sec : 178666.66666666666 Average rate : 167807.3041905584
  • 37. Performance Test - 인스턴스가 1인 경우는 약 120K count/sec - 인스턴스가 2인 경우는 약 170K count/sec - 인스턴스가 4인 경우는 약 190K count/sec - 인스턴스가 8인 경우는 약 180K count/sec
  • 38. 참고사이트 • http://vertx.io • http://helloworld.naver.com/helloworld/163784 • http://www.infoq.com/jp/news/2013/05/high-volume-vertx • http://vertxproject.wordpress.com/2013/07/17/vert-x-2-0-0-final-is- released/ • http://m.javaworld.com/javaworld/jw-07-2013/130730-osjp- enterprise-messaging-and-integration-with- vertx.html?source=IFWNLE_nlt_jw_2013-07-30 • http://www.infoq.com/jp/news/2013/08/tim_fox_vertx_2