SlideShare une entreprise Scribd logo
1  sur  51
빠르게 훑어 보는 node.js와 Vert.x
조대협
http://bcho.tistory.com
VS
소개
조대협 (조병욱)
• 벤처 개발자
• BEA 웹로직 기술 지원 엔지니어
• 오라클 장애 진단, 성능 튜닝
• NHN 잠깐
• 오라클 컨설턴트 (SOA,EAI,ALM,Enterprise 2.0)
• 오라클 아키텍트 (대용량 분산 시스템)
• MS APAC 클라우드 수석 아키텍트
• 프리렌서(좋은 말로 사장님)
• 지금은 어느 회사의 Chief(Cheap?) 아키텍트
블로그 : http://bcho.tistory.com
이메일 : bw.cho@samsung.com
페이스북 ServerSideArchitectGroup
https://www.facebook.com/groups/serverside
/
오늘은?
1.빠르게 훑어 보는 Node.js
2.Node.js와 유사한 Vert.x 들여다
보기
3.Node.js와 Vert.x 비교하기
1. 빠르게 훑어 보는 node.js
Node.js는?
• 자바 스크립트를 이용한 고성능 서버 프로토 타입
– 구글 크롬 V8 자바스크립트 엔진 사용
– CommonJS 기반
– 싱글 쓰레드 모델
– 비동기/논 블록킹 IO 기반
– 빠른 생산성, 아직은 비완성체
• 그런데 왜?
– 게임
– 높은 생산성
– 쉽다
– SOCKET.IO 푸쉬
– 레퍼런스
• 야머,링크드인,페이팔
Node.js의 내부구조
• 내부 구조
Node.js의 내부구조
• ELP (Event Loop)
socket fd = array[연결된 socket
connections]
for(int i=0;i<fd.length;i++){
if(fd 가 이벤트가 있으면){
알고리즘 처리
}// if
}// if
epoll,kqueue,dev/poll,select,iocp
Node.js의 내부구조
• Single Thread Model
멀티 쓰레드 싱글 쓰레드(Node.JS)
CPU Intensive 한 작업이 많으면
다른 request 처리가 줄줄이 밀림
 무거운 로직을 돌리기에는 적절
하지 않음
Node.js의 내부구조
• 보통 서버는 (Blocking Call)
Source : http://blog.cloudfoundry.com/2012/06/27/future-proofing-your-apps-cloud-foundry-and-node-js/
Node.js의 내부구조
• 그런데, node.js는? Async/Non-Blocking
http://strongloop.com/strongblog/node-js-is-faster-than-java/
Node.js의 내부구조
• Non blocking/Async IO
동기식 IO 비동기식 IO(node.js)
• 커피 주문하고 기다리기 • 커피 주문하고 진동벨 받기
동시 처리할 수 있는 사용자 수 = 쓰레드 수
※ 동시 접속이 많은 시스템 (채팅,게임)에 불
리함
Node.js의 내부구조
• Node.JS의 Thread Pool
– OS에 따라, 일부 IO는 NonBlocking IO를 제공하지 않음
– 이 경우 자체 Thread Pool을 이용하여, Non-Blocking IO인 것 처
럼 Async 처리 해줌
그럼 성능은?
• Node.JS가 항상 빠른 것은 아님..!!
Servlet + RESIN + MYSQL
Node.JS + MYSQL
http://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=query
어디다 써먹나?
• 빠른 Prototype 개발
• Socket.IO를 이용한 Push 처리
• File Up/Download 같이 동시 연결수가 많고, IO
Intensive한 네트워크 스트리밍
• 간단한 Single Page App
Node.JS 주요 모듈
• 모듈
분류 모듈명
웹 MVC Express
REST API Express
Socket IO Socket.IO
인증/인가 Pass Port
데이타베이스
MySQL Native,Redis Native, Mongoose, Mongo-
Native
로깅 Winston
단위 테스트 Mocha
설치,배포 npm
서버 기동 Forever
빌드 스크립트 grunt
Node.JS 주요 모듈
• NPM
• npm install {module}
• npm update {module}
• npm remove {module}
• npm info {module}
cf. Linux rpm
• package.json
※ C/C++ 기반의 Native module인 경우 컴파일러가 필요함
{
"name": "app",
"version": "0.0.1",
"dependencies": {
"express": "3.x",
"redis": "*"
}
“repository”: {“type”:”git”,”url”,”git://xxxx”}
cf. java maven pom.xml
Express
• 웹 애플리케이션 개발 프레임웍
• REST API 지원
• Session,Cookie 일반적인 웹 기능 모두 지원
• Redis를 이용한 Session Clustering 지원
• node.js의 대세!!
※ MEAN STACK (MongoDB + Express + AngularJS + Node.js) – CF. LAMP
Express
• Router
/app.js
(main)
/index.js
(route module)
• function index(req,res)
• function home(req,res)
/user.js
(route module)
• function list(req,res)
• function add(req,res)
HTTP GET/
HTTP GET /users
HTTP POST /users
Express
• Event Loop in Express
• REST API
Input
{ name:’Terry’,address:’Seoul’}
Output
{ result :’success’}
Express
• Template
Router (business logic)
+
Template (view)
• hogan.js (4257ms)
• ejs (5283 ms)
• jade - same author who made ejb. (13068ms)
※ Performance comparison https://github.com/Deathspike/template-benchmark
• Template Engines
[engine name (100,000 template rendering time ms)]
Express
• REST API
Input
{ name:’Terry’,address:’Seoul’}
Output
{ result :’success’}
MongoDB
• MongoDB
– NoSQL (RDB Like – Index, Grouping, Sorting etc)
– Document base (Store JSON)
Command SQL MongoDB
Insert
insert into users ("name","city")
values("terry","seoul")
db.users.insert({_id:"terry",ci
ty:"seoul"})
Select select * from users where id="terry" db.users.find({_id:"terry"})
Update
update users set city="busan" where
_id="terry"
db.users.update( {_id:"terry"
}, {$set :{ city:"Busan" } } )
Delete delete from users where _id="terry"
db.users.remove({_id:"terry"
})
MongoDB
• MongoDB in node.js
– MongoNative (JDBC in Java)
• Support Connection Pooling/Async IO
MongoDB
• MongoDB in node.js
– Mongoose (Object Data Mapper – ODM)
• Scheme base
• Data validation
• Support Connection Pooling/Async IO
Scheme
Validator
Model
MySQL
• MySQL in node.js
– MySQL Native module
• Support Connection Pooling/Async IO
Socket.IO
• Web push method
1. AJAX (Comet)
upgrade
2. Web Socket
– Similar to Streaming
– Start from ws:// (not http://)
Socket.IO
• Socket.IO is
– Abstract WebSocket, FlashSocket, AJAX Long Polling, AJAX
Multi part Streaming, IFrame, JSONP Polling
• Why?
Source : http://caniuse.com
• Node.JS module
• Different supportability in
browser.
• Socket.IO supports web
push with various
mechanism
Socket.IO
• Server
Socket.IO
• Client
Socket.IO
• 이벤트 보내고 받기
– 이벤트 보내기 : socket.emit(“이벤트명”,{메세지});
– 이벤트 받기 : socket.on(“이벤트명”,function(data){});
– 나를 제외한 클라이언트들에게 이벤트 보내기
socket.broadcast.emit(“이벤트명”,{메세지});
– 나를 포함한 모든 클라이언트들에게 이벤트 보내기
io.socket.emit(“이벤트명”,function(data){});
– 다른 특정 소켓에 메세지 보내기
io.socket(소켓ID).emit(“이벤트명”,{메세지});
• 소켓에 데이타 바인딩
– 저장 : socket.set(“키”,”값”,function(){});
– 가져오기 : socket.get(“키”,function(err,value){});
– 지우기 : socket.del(“키”, function(err,value){});
• 현재 소켓의 ID 가져오기
– socket.id
Socket.IO
• ROOM (채널)
– 채널 조인하기 : socket.join(“룸이름”)
– 채널에서 나오기 : socket.leave(“룸이름”);
– 룸안에 있는 소켓에 이벤트 보내기
io.sockets.in(“룸이름”).emit(“이벤트”,{메세지});
– 룸안에 있는 나를 제외한 소켓에 메세지 보내기
socket.brodcast.to(“룸이름”).emit(“이벤트”,{메세지});
– 현재 생성되어 있는 룸 이름 읽어오기
io.sockets.manager.rooms
– 룸안에 있는 소켓 목록 리턴
io.sockets.client(“룸이름”);
Socket.IO
• 클러스터 구성
node.js node.js node.js
redis
Browser Browser Browser Browser
socket.iopub sub sub sub
redis channel : ‘dispatch’
haproxy
– Socket.IO 정보는 기본적으로 로컬 메모리에 저장됨
– 클러스터 (멀티 노드) 사용시 Redis 를 사용하면 알아서 노드간
공유됨
• Just change session store to redis
비동기 코딩 패턴 Serial Sequence PatternSync Code
Parallel pattern
CALLBACK HELL !!
비동기 코딩 패턴
• Async 프레임웍을 이용한 단순화
– 흐름 제어
• Serial : 순차 실행
• Parallel : 병렬 실행
• Waterfall : 순차 실행, 전단계의 결과를 다음 단계로 넘김
Node.JS는 잘 죽는다.
• V8 엔진 Memory Leak
• Catch가 안되는 에러가 나면 죽어버린다
• 해결책 1. – 다시 스타트
– forever
– Supervisor (코드 변경시 자동 재시작)
– nodemon (코드 변경시 자동 재시작)
– PM2
• 해결책 2. – process.on(‘uncaughtException’, )
– 죽을때 무슨 원인으로 죽었는지를 모른다.
– domainAPI를 사용한다.
※ http://www.slideshare.net/domenicdenicola/domains-20010482
단위 테스트
• Mocha test framework
– 자바스크립트 테스트 프레임웍 (웹/node.js 지원)
– TDD와 BDD 양쪽 지원
TDD BDD
Language
assertEquals(count,5)
프로그래밍 언어에 가까움
$(count).should_be(5)
인간 언어에 가까움
테스트 케이스
개발
Spec  Coding  Test
Coding
Spec  Test  Coding
테스트 대상 단위 (함수)를 테스트 기능(시나리오)을 테스트
Clustering
• Clustering Module
– 하나의 Machine에서 여러개의 Node.js 인스턴스를 띄울 수 있음
– 같은 포트로 Listen
※ 굳이 그래야 하나? 어짜피 로드밸런서를 둬야 하는데
• 다른 Cluster 구성
– Cluster 모듈 없이 앞단에 Reverse Proxy (LB)배치
– Session, Socket.IO Sharing은 Redis로
모니터링 툴
• Appdyanmics
연계 시스템간의 성능 모니터링 가능 코드별 수행 시간 추적 가능
모니터링 툴
• NewRelic Nodetime (얼마전에 AppDyamics에 인수됨)
– 1 노드 모니터링 무료
구간별 소요시간 분석 가능
기타 눈여겨 볼만한 모듈
• Passport : 인증 모듈,소셜 인증,Oauth,OpenID등 인증등 제공
• Winstone : 로깅 모듈
2. Vert.x에 대한 간략한 소개
Vert.x는
• Overview
– JVM위에서 동작
– 고성능 네트워크 IO 서버인 Netty를 기반
– Hazlecast (IMDG)를 이용한 데이타 버스
– 뒷단은 비동기 IO가 아니라서 Thread Pool을 이용한 비동기 IO 시뮬
레이션 처리
– 동작 구조는 Single Thread (멀티 쓰레드 지원*)
– Polyglot ( Java,Javascript,Python,Groovy,Scala 지원)
– 다른 자바 서버에 Embedding이 가능함 (Tomcat과 같은 서버에
embed해서 돌릴 수 있음)Java
Java
Scrip
t
Pyth
on
Groo
vy
Scala
Netty
Polyglot Event
Bus
(Hazelca
st)
Worker
Thread
Pool
JVM
Vert.x 개념 잡기
• Verticle
– node.JS의 하나의 route 모듈과 같은 개념 (Servlet)
– 독립적인 ClassLoader에 의해 로딩됨 (Isolation 됨)
: 다른 Verticle과 공유되지 않기 때문에, 멀티 쓰레딩을 신경 쓸
필요가 없음
Vert.x 개념 잡기
• Worker Verticle
– EventBus를 통해서 오는 작업을 뒷단에서 비동기 처리
– Thread Pool을 사용함
Vert.x 개념 잡기
• Event Bus
– HazleCast 기반의 메세지 큐 (cf. node.js Redis)
– 다른 서버로 이벤트가 들어오더라도, HazelCast에 의해서 해당
event handler가 있는 서버로 이벤트를 라우팅 해줌
Vert.x 개념 잡기
• Vert.x Instance
– 하나의 JVM Process
– 동시에 여러개의 Verticle을 수
행할 수 있음
– 동시에 여러개의 Event Loop
Thread를 수행할 수 있음
Vert.x 개념 잡기
• Socket.IO, Pumping (node.js의 Pipe)등 node의 기본 주
요 기능은 대부분 제공함
• DB나 FILE IO는 Non blocking IO 라이브러리가 없음
(Thread Pool로 Async 처리만 함)
• HA 기능 제공
– Vert.x Instance가 죽으면 다른 머신에서 자동 RE-START
주의 사항
• JVM 기반이기 때문에 GC가 발생함
– 특히 HazelCast를 남용하면, Full GC Time 문제가 발생 가능
– 상용 버전의 HazelCast의 경우 Direct Memory Access를 이용하
여, 최소한의 GC Time으로 사용이 가능함
– 여러 인스턴스로 나눠서 메모리를 작게 잡고, 부하를 분산 시켜,
Full GC 소요 시간과, 발생 횟수를 줄여야 함
VS
3. node.js와 Vert.x 비교
Vert.x vs Node.JS
Vert.x Node.JS
에러처리
에러가 나더라도 STACK을 출력
하고 죽음 (추적이 용이)
에러가 나면, Context 정보 없
이 죽음 (추적이 어려움)
안정성
Netty,HazleCast등 비교적 안정
된 엔진위에 개발됨
V8엔진 자체가 불안함
웹개발
없음 Express 등 웹 개발 프레임웍
이 풍부함
프로그래밍 언어
Javascript,Python,Groovy,Java,Sc
ala
Javascript
비동기 Non-
Blocking IO
쓰레드풀을 이용한 Emulation OS 수준의 Non-Blocking IO
사용 (IO 처리에 유리)
지원 모듈 100개 이하 40,000개 이상
에코 시스템
공식 서적 2개(100페이지 미만)
컨설팅,교육 업체 없음
레퍼런스,서적,교육,컨설팅등
매우 풍부
모니터링
없음. 자바 모니터링 툴 사용 nodeTime(APM) 등 상용 모니
터링 툴
클러스터링 HA
HazleCast와 HA 기능을 이용하
여 제공
Redis와 HaProxy등으로 자체
구현 필요
결론
• Start up이나, B2C 서비스는 node.JS로 시작
– 자료 찾기 편리함
– 자주 죽어서 문제가 될 때면 돈 벌었음 (컨설팅 받으세요)
• 기술력이 충분하고, 고성능,고안정 서비스가 필요할 경우
Vert.x 고려
– 기반 엔진 자체가 튼튼하기 때문에 높은 성능과 안정성
– 모듈들이 적고, 자료가 부족하기 때문에, 자체 기술력이 높아야
함

Contenu connexe

Tendances

잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다Arawn Park
 
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기YongSung Yoon
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개if kakao
 
[MeetUp][2nd] 알아두면 쓸모있는 테라폼
[MeetUp][2nd] 알아두면 쓸모있는 테라폼[MeetUp][2nd] 알아두면 쓸모있는 테라폼
[MeetUp][2nd] 알아두면 쓸모있는 테라폼InfraEngineer
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기SeungYong Oh
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐Terry Cho
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetesSangSun Park
 
인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례Hyung Lee
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드Opennaru, inc.
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들Chris Ohk
 
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개태준 문
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 Amazon Web Services Korea
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질Young-Ho Cho
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with DockerRavindu Fernando
 
Microservices avec Spring Cloud
Microservices avec Spring CloudMicroservices avec Spring Cloud
Microservices avec Spring CloudFlorian Beaufumé
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
 

Tendances (20)

잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
잘 키운 모노리스 하나 열 마이크로서비스 안 부럽다
 
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
[Spring Camp 2018] 11번가 Spring Cloud 기반 MSA로의 전환 : 지난 1년간의 이야기
 
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
 
[MeetUp][2nd] 알아두면 쓸모있는 테라폼
[MeetUp][2nd] 알아두면 쓸모있는 테라폼[MeetUp][2nd] 알아두면 쓸모있는 테라폼
[MeetUp][2nd] 알아두면 쓸모있는 테라폼
 
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐
 
Spring cloud on kubernetes
Spring cloud on kubernetesSpring cloud on kubernetes
Spring cloud on kubernetes
 
인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례인프런 - 스타트업 인프랩 시작 사례
인프런 - 스타트업 인프랩 시작 사례
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드MSA ( Microservices Architecture ) 발표 자료 다운로드
MSA ( Microservices Architecture ) 발표 자료 다운로드
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
201904 websocket
201904 websocket201904 websocket
201904 websocket
 
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
DEVOPS 에 대한 전반적인 소개 및 자동화툴 소개
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
 
도메인 주도 설계의 본질
도메인 주도 설계의 본질도메인 주도 설계의 본질
도메인 주도 설계의 본질
 
Getting started with Docker
Getting started with DockerGetting started with Docker
Getting started with Docker
 
Microservices avec Spring Cloud
Microservices avec Spring CloudMicroservices avec Spring Cloud
Microservices avec Spring Cloud
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 

En vedette

DGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JS
DGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JSDGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JS
DGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JSdgmit2009
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기John Kim
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA Terry Cho
 
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용Terry Cho
 
1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스Terry Cho
 
모바일 개발 트랜드
모바일 개발 트랜드모바일 개발 트랜드
모바일 개발 트랜드Terry Cho
 
5. 솔루션 카달로그
5. 솔루션 카달로그5. 솔루션 카달로그
5. 솔루션 카달로그Terry Cho
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작Terry Cho
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법Terry Cho
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개Terry Cho
 
Redis data modeling examples
Redis data modeling examplesRedis data modeling examples
Redis data modeling examplesTerry Cho
 
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. restTerry Cho
 
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론Terry Cho
 
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐Terry Cho
 
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐Terry Cho
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 
머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기Terry Cho
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)Amazon Web Services Korea
 
서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)Terry Cho
 

En vedette (20)

DGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JS
DGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JSDGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JS
DGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JS
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA
 
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
14회 jco 컨퍼런스 조대협의 소프트웨어 개발 배포용
 
1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스
 
모바일 개발 트랜드
모바일 개발 트랜드모바일 개발 트랜드
모바일 개발 트랜드
 
5. 솔루션 카달로그
5. 솔루션 카달로그5. 솔루션 카달로그
5. 솔루션 카달로그
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
Redis data modeling examples
Redis data modeling examplesRedis data modeling examples
Redis data modeling examples
 
대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest대용량 분산 아키텍쳐 설계 #5. rest
대용량 분산 아키텍쳐 설계 #5. rest
 
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
 
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
대용량 분산 아키텍쳐 설계 #3 대용량 분산 시스템 아키텍쳐
 
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
대용량 분산 아키텍쳐 설계 #4. soa 아키텍쳐
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
마이크로서비스 아키텍처와 DevOps 기술 - Amazon 사례를 중심으로 (윤석찬)
 
서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)
 

Similaire à 빠르게훓어보는 Node.js와 Vert.x

Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 
Node.js
Node.jsNode.js
Node.jsymtech
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안Lee Ji Eun
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기Huey Park
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...JinKwon Lee
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyondJae Sung Park
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경NAVER Engineering
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 SuHyun Jeon
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
[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 - 3rdPark Jonggun
 
Node.js 20버전에 변경된 점들.pdf
Node.js 20버전에 변경된 점들.pdfNode.js 20버전에 변경된 점들.pdf
Node.js 20버전에 변경된 점들.pdfSeung kyoo Park
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기Ian Choi
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트Dong-Jin Park
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.SeungWoo Lee
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AIJoongi Kim
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 

Similaire à 빠르게훓어보는 Node.js와 Vert.x (20)

Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
Node.js
Node.jsNode.js
Node.js
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안세션3 node.js의 의미와 자바의 대안
세션3 node.js의 의미와 자바의 대안
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
Node.js 시작하기
Node.js 시작하기Node.js 시작하기
Node.js 시작하기
 
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
 
Front end dev 2016 & beyond
Front end dev 2016 & beyondFront end dev 2016 & beyond
Front end dev 2016 & beyond
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
[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
 
Node.js 20버전에 변경된 점들.pdf
Node.js 20버전에 변경된 점들.pdfNode.js 20버전에 변경된 점들.pdf
Node.js 20버전에 변경된 점들.pdf
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
[OpenStack] 공개 소프트웨어 오픈스택 입문 & 파헤치기
 
Unionweb프로젝트
Unionweb프로젝트Unionweb프로젝트
Unionweb프로젝트
 
Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 

Plus de Terry Cho

Kubernetes #6 advanced scheduling
Kubernetes #6   advanced schedulingKubernetes #6   advanced scheduling
Kubernetes #6 advanced schedulingTerry Cho
 
Kubernetes #4 volume &amp; stateful set
Kubernetes #4   volume &amp; stateful setKubernetes #4   volume &amp; stateful set
Kubernetes #4 volume &amp; stateful setTerry Cho
 
Kubernetes #3 security
Kubernetes #3   securityKubernetes #3   security
Kubernetes #3 securityTerry Cho
 
Kubernetes #2 monitoring
Kubernetes #2   monitoring Kubernetes #2   monitoring
Kubernetes #2 monitoring Terry Cho
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 introTerry Cho
 
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개Terry Cho
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화Terry Cho
 
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴Terry Cho
 
자바 성능 강의
자바 성능 강의자바 성능 강의
자바 성능 강의Terry Cho
 
Service operation
Service operationService operation
Service operationTerry Cho
 

Plus de Terry Cho (10)

Kubernetes #6 advanced scheduling
Kubernetes #6   advanced schedulingKubernetes #6   advanced scheduling
Kubernetes #6 advanced scheduling
 
Kubernetes #4 volume &amp; stateful set
Kubernetes #4   volume &amp; stateful setKubernetes #4   volume &amp; stateful set
Kubernetes #4 volume &amp; stateful set
 
Kubernetes #3 security
Kubernetes #3   securityKubernetes #3   security
Kubernetes #3 security
 
Kubernetes #2 monitoring
Kubernetes #2   monitoring Kubernetes #2   monitoring
Kubernetes #2 monitoring
 
Kubernetes #1 intro
Kubernetes #1   introKubernetes #1   intro
Kubernetes #1 intro
 
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
머신 러닝 입문 #1-머신러닝 소개와 kNN 소개
 
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
2014 공개소프트웨어 대회 소프트웨어 개발 트렌드의 변화
 
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
 
자바 성능 강의
자바 성능 강의자바 성능 강의
자바 성능 강의
 
Service operation
Service operationService operation
Service operation
 

빠르게훓어보는 Node.js와 Vert.x

  • 1. 빠르게 훑어 보는 node.js와 Vert.x 조대협 http://bcho.tistory.com VS
  • 2. 소개 조대협 (조병욱) • 벤처 개발자 • BEA 웹로직 기술 지원 엔지니어 • 오라클 장애 진단, 성능 튜닝 • NHN 잠깐 • 오라클 컨설턴트 (SOA,EAI,ALM,Enterprise 2.0) • 오라클 아키텍트 (대용량 분산 시스템) • MS APAC 클라우드 수석 아키텍트 • 프리렌서(좋은 말로 사장님) • 지금은 어느 회사의 Chief(Cheap?) 아키텍트 블로그 : http://bcho.tistory.com 이메일 : bw.cho@samsung.com 페이스북 ServerSideArchitectGroup https://www.facebook.com/groups/serverside /
  • 3. 오늘은? 1.빠르게 훑어 보는 Node.js 2.Node.js와 유사한 Vert.x 들여다 보기 3.Node.js와 Vert.x 비교하기
  • 4. 1. 빠르게 훑어 보는 node.js
  • 5. Node.js는? • 자바 스크립트를 이용한 고성능 서버 프로토 타입 – 구글 크롬 V8 자바스크립트 엔진 사용 – CommonJS 기반 – 싱글 쓰레드 모델 – 비동기/논 블록킹 IO 기반 – 빠른 생산성, 아직은 비완성체 • 그런데 왜? – 게임 – 높은 생산성 – 쉽다 – SOCKET.IO 푸쉬 – 레퍼런스 • 야머,링크드인,페이팔
  • 7. Node.js의 내부구조 • ELP (Event Loop) socket fd = array[연결된 socket connections] for(int i=0;i<fd.length;i++){ if(fd 가 이벤트가 있으면){ 알고리즘 처리 }// if }// if epoll,kqueue,dev/poll,select,iocp
  • 8. Node.js의 내부구조 • Single Thread Model 멀티 쓰레드 싱글 쓰레드(Node.JS) CPU Intensive 한 작업이 많으면 다른 request 처리가 줄줄이 밀림  무거운 로직을 돌리기에는 적절 하지 않음
  • 9. Node.js의 내부구조 • 보통 서버는 (Blocking Call) Source : http://blog.cloudfoundry.com/2012/06/27/future-proofing-your-apps-cloud-foundry-and-node-js/
  • 10. Node.js의 내부구조 • 그런데, node.js는? Async/Non-Blocking http://strongloop.com/strongblog/node-js-is-faster-than-java/
  • 11. Node.js의 내부구조 • Non blocking/Async IO 동기식 IO 비동기식 IO(node.js) • 커피 주문하고 기다리기 • 커피 주문하고 진동벨 받기 동시 처리할 수 있는 사용자 수 = 쓰레드 수 ※ 동시 접속이 많은 시스템 (채팅,게임)에 불 리함
  • 12. Node.js의 내부구조 • Node.JS의 Thread Pool – OS에 따라, 일부 IO는 NonBlocking IO를 제공하지 않음 – 이 경우 자체 Thread Pool을 이용하여, Non-Blocking IO인 것 처 럼 Async 처리 해줌
  • 13. 그럼 성능은? • Node.JS가 항상 빠른 것은 아님..!! Servlet + RESIN + MYSQL Node.JS + MYSQL http://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=query
  • 14. 어디다 써먹나? • 빠른 Prototype 개발 • Socket.IO를 이용한 Push 처리 • File Up/Download 같이 동시 연결수가 많고, IO Intensive한 네트워크 스트리밍 • 간단한 Single Page App
  • 15. Node.JS 주요 모듈 • 모듈 분류 모듈명 웹 MVC Express REST API Express Socket IO Socket.IO 인증/인가 Pass Port 데이타베이스 MySQL Native,Redis Native, Mongoose, Mongo- Native 로깅 Winston 단위 테스트 Mocha 설치,배포 npm 서버 기동 Forever 빌드 스크립트 grunt
  • 16. Node.JS 주요 모듈 • NPM • npm install {module} • npm update {module} • npm remove {module} • npm info {module} cf. Linux rpm • package.json ※ C/C++ 기반의 Native module인 경우 컴파일러가 필요함 { "name": "app", "version": "0.0.1", "dependencies": { "express": "3.x", "redis": "*" } “repository”: {“type”:”git”,”url”,”git://xxxx”} cf. java maven pom.xml
  • 17. Express • 웹 애플리케이션 개발 프레임웍 • REST API 지원 • Session,Cookie 일반적인 웹 기능 모두 지원 • Redis를 이용한 Session Clustering 지원 • node.js의 대세!! ※ MEAN STACK (MongoDB + Express + AngularJS + Node.js) – CF. LAMP
  • 18. Express • Router /app.js (main) /index.js (route module) • function index(req,res) • function home(req,res) /user.js (route module) • function list(req,res) • function add(req,res) HTTP GET/ HTTP GET /users HTTP POST /users
  • 19. Express • Event Loop in Express • REST API Input { name:’Terry’,address:’Seoul’} Output { result :’success’}
  • 20. Express • Template Router (business logic) + Template (view) • hogan.js (4257ms) • ejs (5283 ms) • jade - same author who made ejb. (13068ms) ※ Performance comparison https://github.com/Deathspike/template-benchmark • Template Engines [engine name (100,000 template rendering time ms)]
  • 21. Express • REST API Input { name:’Terry’,address:’Seoul’} Output { result :’success’}
  • 22. MongoDB • MongoDB – NoSQL (RDB Like – Index, Grouping, Sorting etc) – Document base (Store JSON) Command SQL MongoDB Insert insert into users ("name","city") values("terry","seoul") db.users.insert({_id:"terry",ci ty:"seoul"}) Select select * from users where id="terry" db.users.find({_id:"terry"}) Update update users set city="busan" where _id="terry" db.users.update( {_id:"terry" }, {$set :{ city:"Busan" } } ) Delete delete from users where _id="terry" db.users.remove({_id:"terry" })
  • 23. MongoDB • MongoDB in node.js – MongoNative (JDBC in Java) • Support Connection Pooling/Async IO
  • 24. MongoDB • MongoDB in node.js – Mongoose (Object Data Mapper – ODM) • Scheme base • Data validation • Support Connection Pooling/Async IO Scheme Validator Model
  • 25. MySQL • MySQL in node.js – MySQL Native module • Support Connection Pooling/Async IO
  • 26. Socket.IO • Web push method 1. AJAX (Comet) upgrade 2. Web Socket – Similar to Streaming – Start from ws:// (not http://)
  • 27. Socket.IO • Socket.IO is – Abstract WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling • Why? Source : http://caniuse.com • Node.JS module • Different supportability in browser. • Socket.IO supports web push with various mechanism
  • 30. Socket.IO • 이벤트 보내고 받기 – 이벤트 보내기 : socket.emit(“이벤트명”,{메세지}); – 이벤트 받기 : socket.on(“이벤트명”,function(data){}); – 나를 제외한 클라이언트들에게 이벤트 보내기 socket.broadcast.emit(“이벤트명”,{메세지}); – 나를 포함한 모든 클라이언트들에게 이벤트 보내기 io.socket.emit(“이벤트명”,function(data){}); – 다른 특정 소켓에 메세지 보내기 io.socket(소켓ID).emit(“이벤트명”,{메세지}); • 소켓에 데이타 바인딩 – 저장 : socket.set(“키”,”값”,function(){}); – 가져오기 : socket.get(“키”,function(err,value){}); – 지우기 : socket.del(“키”, function(err,value){}); • 현재 소켓의 ID 가져오기 – socket.id
  • 31. Socket.IO • ROOM (채널) – 채널 조인하기 : socket.join(“룸이름”) – 채널에서 나오기 : socket.leave(“룸이름”); – 룸안에 있는 소켓에 이벤트 보내기 io.sockets.in(“룸이름”).emit(“이벤트”,{메세지}); – 룸안에 있는 나를 제외한 소켓에 메세지 보내기 socket.brodcast.to(“룸이름”).emit(“이벤트”,{메세지}); – 현재 생성되어 있는 룸 이름 읽어오기 io.sockets.manager.rooms – 룸안에 있는 소켓 목록 리턴 io.sockets.client(“룸이름”);
  • 32. Socket.IO • 클러스터 구성 node.js node.js node.js redis Browser Browser Browser Browser socket.iopub sub sub sub redis channel : ‘dispatch’ haproxy – Socket.IO 정보는 기본적으로 로컬 메모리에 저장됨 – 클러스터 (멀티 노드) 사용시 Redis 를 사용하면 알아서 노드간 공유됨 • Just change session store to redis
  • 33. 비동기 코딩 패턴 Serial Sequence PatternSync Code Parallel pattern CALLBACK HELL !!
  • 34. 비동기 코딩 패턴 • Async 프레임웍을 이용한 단순화 – 흐름 제어 • Serial : 순차 실행 • Parallel : 병렬 실행 • Waterfall : 순차 실행, 전단계의 결과를 다음 단계로 넘김
  • 35. Node.JS는 잘 죽는다. • V8 엔진 Memory Leak • Catch가 안되는 에러가 나면 죽어버린다 • 해결책 1. – 다시 스타트 – forever – Supervisor (코드 변경시 자동 재시작) – nodemon (코드 변경시 자동 재시작) – PM2 • 해결책 2. – process.on(‘uncaughtException’, ) – 죽을때 무슨 원인으로 죽었는지를 모른다. – domainAPI를 사용한다. ※ http://www.slideshare.net/domenicdenicola/domains-20010482
  • 36. 단위 테스트 • Mocha test framework – 자바스크립트 테스트 프레임웍 (웹/node.js 지원) – TDD와 BDD 양쪽 지원 TDD BDD Language assertEquals(count,5) 프로그래밍 언어에 가까움 $(count).should_be(5) 인간 언어에 가까움 테스트 케이스 개발 Spec  Coding  Test Coding Spec  Test  Coding 테스트 대상 단위 (함수)를 테스트 기능(시나리오)을 테스트
  • 37. Clustering • Clustering Module – 하나의 Machine에서 여러개의 Node.js 인스턴스를 띄울 수 있음 – 같은 포트로 Listen ※ 굳이 그래야 하나? 어짜피 로드밸런서를 둬야 하는데 • 다른 Cluster 구성 – Cluster 모듈 없이 앞단에 Reverse Proxy (LB)배치 – Session, Socket.IO Sharing은 Redis로
  • 38. 모니터링 툴 • Appdyanmics 연계 시스템간의 성능 모니터링 가능 코드별 수행 시간 추적 가능
  • 39. 모니터링 툴 • NewRelic Nodetime (얼마전에 AppDyamics에 인수됨) – 1 노드 모니터링 무료 구간별 소요시간 분석 가능
  • 40. 기타 눈여겨 볼만한 모듈 • Passport : 인증 모듈,소셜 인증,Oauth,OpenID등 인증등 제공 • Winstone : 로깅 모듈
  • 41. 2. Vert.x에 대한 간략한 소개
  • 42. Vert.x는 • Overview – JVM위에서 동작 – 고성능 네트워크 IO 서버인 Netty를 기반 – Hazlecast (IMDG)를 이용한 데이타 버스 – 뒷단은 비동기 IO가 아니라서 Thread Pool을 이용한 비동기 IO 시뮬 레이션 처리 – 동작 구조는 Single Thread (멀티 쓰레드 지원*) – Polyglot ( Java,Javascript,Python,Groovy,Scala 지원) – 다른 자바 서버에 Embedding이 가능함 (Tomcat과 같은 서버에 embed해서 돌릴 수 있음)Java Java Scrip t Pyth on Groo vy Scala Netty Polyglot Event Bus (Hazelca st) Worker Thread Pool JVM
  • 43. Vert.x 개념 잡기 • Verticle – node.JS의 하나의 route 모듈과 같은 개념 (Servlet) – 독립적인 ClassLoader에 의해 로딩됨 (Isolation 됨) : 다른 Verticle과 공유되지 않기 때문에, 멀티 쓰레딩을 신경 쓸 필요가 없음
  • 44. Vert.x 개념 잡기 • Worker Verticle – EventBus를 통해서 오는 작업을 뒷단에서 비동기 처리 – Thread Pool을 사용함
  • 45. Vert.x 개념 잡기 • Event Bus – HazleCast 기반의 메세지 큐 (cf. node.js Redis) – 다른 서버로 이벤트가 들어오더라도, HazelCast에 의해서 해당 event handler가 있는 서버로 이벤트를 라우팅 해줌
  • 46. Vert.x 개념 잡기 • Vert.x Instance – 하나의 JVM Process – 동시에 여러개의 Verticle을 수 행할 수 있음 – 동시에 여러개의 Event Loop Thread를 수행할 수 있음
  • 47. Vert.x 개념 잡기 • Socket.IO, Pumping (node.js의 Pipe)등 node의 기본 주 요 기능은 대부분 제공함 • DB나 FILE IO는 Non blocking IO 라이브러리가 없음 (Thread Pool로 Async 처리만 함) • HA 기능 제공 – Vert.x Instance가 죽으면 다른 머신에서 자동 RE-START
  • 48. 주의 사항 • JVM 기반이기 때문에 GC가 발생함 – 특히 HazelCast를 남용하면, Full GC Time 문제가 발생 가능 – 상용 버전의 HazelCast의 경우 Direct Memory Access를 이용하 여, 최소한의 GC Time으로 사용이 가능함 – 여러 인스턴스로 나눠서 메모리를 작게 잡고, 부하를 분산 시켜, Full GC 소요 시간과, 발생 횟수를 줄여야 함
  • 50. Vert.x vs Node.JS Vert.x Node.JS 에러처리 에러가 나더라도 STACK을 출력 하고 죽음 (추적이 용이) 에러가 나면, Context 정보 없 이 죽음 (추적이 어려움) 안정성 Netty,HazleCast등 비교적 안정 된 엔진위에 개발됨 V8엔진 자체가 불안함 웹개발 없음 Express 등 웹 개발 프레임웍 이 풍부함 프로그래밍 언어 Javascript,Python,Groovy,Java,Sc ala Javascript 비동기 Non- Blocking IO 쓰레드풀을 이용한 Emulation OS 수준의 Non-Blocking IO 사용 (IO 처리에 유리) 지원 모듈 100개 이하 40,000개 이상 에코 시스템 공식 서적 2개(100페이지 미만) 컨설팅,교육 업체 없음 레퍼런스,서적,교육,컨설팅등 매우 풍부 모니터링 없음. 자바 모니터링 툴 사용 nodeTime(APM) 등 상용 모니 터링 툴 클러스터링 HA HazleCast와 HA 기능을 이용하 여 제공 Redis와 HaProxy등으로 자체 구현 필요
  • 51. 결론 • Start up이나, B2C 서비스는 node.JS로 시작 – 자료 찾기 편리함 – 자주 죽어서 문제가 될 때면 돈 벌었음 (컨설팅 받으세요) • 기술력이 충분하고, 고성능,고안정 서비스가 필요할 경우 Vert.x 고려 – 기반 엔진 자체가 튼튼하기 때문에 높은 성능과 안정성 – 모듈들이 적고, 자료가 부족하기 때문에, 자체 기술력이 높아야 함