SlideShare a Scribd company logo

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

Terry Cho
Terry Cho

node.js 의 구조와, 기능, 프레임웍등 vert.x에 대한 간략한 소개와 node.js와 비교를 통한 각 서버에 대한 장단점 분석

1 of 51
Download to read offline
빠르게 훑어 보는 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의 내부구조
• 내부 구조

Recommended

Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass SlidesNir Kaufman
 
Introduction to JWT and How to integrate with Spring Security
Introduction to JWT and How to integrate with Spring SecurityIntroduction to JWT and How to integrate with Spring Security
Introduction to JWT and How to integrate with Spring SecurityBruno Henrique Rother
 
Build RESTful API Using Express JS
Build RESTful API Using Express JSBuild RESTful API Using Express JS
Build RESTful API Using Express JSCakra Danu Sedayu
 
코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우코틀린 멀티플랫폼, 미지와의 조우
코틀린 멀티플랫폼, 미지와의 조우Arawn Park
 
파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 파이썬 플라스크 이해하기
파이썬 플라스크 이해하기 Yong Joon Moon
 
Nodejs functions & modules
Nodejs functions & modulesNodejs functions & modules
Nodejs functions & modulesmonikadeshmane
 
Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Overlapped IO와 IOCP 조사 발표
Overlapped IO와 IOCP 조사 발표Kwen Won Lee
 

More Related Content

What's hot

컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기우영 주
 
[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩NHN FORWARD
 
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry BuzdinModern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry BuzdinJava User Group Latvia
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Minchul Jung
 
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...Mario Jorge Pereira
 
Understanding JWT Exploitation
Understanding JWT ExploitationUnderstanding JWT Exploitation
Understanding JWT ExploitationAkshaeyBhosale
 
Introduction to Swagger
Introduction to SwaggerIntroduction to Swagger
Introduction to SwaggerKnoldus Inc.
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API07.pallav
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)Heungsub Lee
 
Solid NodeJS with TypeScript, Jest & NestJS
Solid NodeJS with TypeScript, Jest & NestJSSolid NodeJS with TypeScript, Jest & NestJS
Solid NodeJS with TypeScript, Jest & NestJSRafael Casuso Romate
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.jsRob O'Doherty
 

What's hot (20)

컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기컴포넌트 관점에서 개발하기
컴포넌트 관점에서 개발하기
 
[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩[2019] 200만 동접 게임을 위한 MySQL 샤딩
[2019] 200만 동접 게임을 위한 MySQL 샤딩
 
Express js
Express jsExpress js
Express js
 
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry BuzdinModern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
Modern Security with OAuth 2.0 and JWT and Spring by Dmitry Buzdin
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
RxSwift to Combine
RxSwift to CombineRxSwift to Combine
RxSwift to Combine
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1Ch6 대용량서비스레퍼런스아키텍처 part.1
Ch6 대용량서비스레퍼런스아키텍처 part.1
 
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...Hands-On Java web passando por  Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
Hands-On Java web passando por Servlets, JSP, JSTL, JDBC, Hibernate, DAO, MV...
 
Understanding JWT Exploitation
Understanding JWT ExploitationUnderstanding JWT Exploitation
Understanding JWT Exploitation
 
Introduction to Swagger
Introduction to SwaggerIntroduction to Swagger
Introduction to Swagger
 
Introduction to NodeJS
Introduction to NodeJSIntroduction to NodeJS
Introduction to NodeJS
 
Vue js for beginner
Vue js for beginner Vue js for beginner
Vue js for beginner
 
Node js introduction
Node js introductionNode js introduction
Node js introduction
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
Express node js
Express node jsExpress node js
Express node js
 
Solid NodeJS with TypeScript, Jest & NestJS
Solid NodeJS with TypeScript, Jest & NestJSSolid NodeJS with TypeScript, Jest & NestJS
Solid NodeJS with TypeScript, Jest & NestJS
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
 

Viewers also liked

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
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐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
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴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
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기Jaewoo Ahn
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해Terry Cho
 

Viewers also liked (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 컨퍼런스 조대협의 소프트웨어 개발 배포용
 
3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐3. 마이크로 서비스 아키텍쳐
3. 마이크로 서비스 아키텍쳐
 
1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스1. 아키텍쳐 설계 프로세스
1. 아키텍쳐 설계 프로세스
 
모바일 개발 트랜드
모바일 개발 트랜드모바일 개발 트랜드
모바일 개발 트랜드
 
5. 솔루션 카달로그
5. 솔루션 카달로그5. 솔루션 카달로그
5. 솔루션 카달로그
 
R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작R 프로그래밍-향상된 데이타 조작
R 프로그래밍-향상된 데이타 조작
 
R 프로그래밍 기본 문법
R 프로그래밍 기본 문법R 프로그래밍 기본 문법
R 프로그래밍 기본 문법
 
R 기본-데이타형 소개
R 기본-데이타형 소개R 기본-데이타형 소개
R 기본-데이타형 소개
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
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 아키텍쳐
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기마이크로서비스 아키텍처로 개발하기
마이크로서비스 아키텍처로 개발하기
 
Micro Service Architecture의 이해
Micro Service Architecture의 이해Micro Service Architecture의 이해
Micro Service Architecture의 이해
 

Similar to 빠르게훓어보는 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
 

Similar to 빠르게훓어보는 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
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 

More from Terry Cho

Kubernetes #6 advanced scheduling
Kubernetes #6   advanced schedulingKubernetes #6   advanced scheduling
Kubernetes #6 advanced schedulingTerry Cho
 
Kubernetes #4 volume & stateful set
Kubernetes #4   volume & stateful setKubernetes #4   volume & stateful set
Kubernetes #4 volume & 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
 
머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기Terry Cho
 
서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)Terry Cho
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry 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
 

More from Terry Cho (13)

Kubernetes #6 advanced scheduling
Kubernetes #6   advanced schedulingKubernetes #6   advanced scheduling
Kubernetes #6 advanced scheduling
 
Kubernetes #4 volume & stateful set
Kubernetes #4   volume & stateful setKubernetes #4   volume & stateful set
Kubernetes #4 volume & 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
 
머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기머신러닝으로 얼굴 인식 모델 개발 삽질기
머신러닝으로 얼굴 인식 모델 개발 삽질기
 
서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)서비스 지향 아키텍쳐 (SOA)
서비스 지향 아키텍쳐 (SOA)
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
머신 러닝 입문 #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 고려 – 기반 엔진 자체가 튼튼하기 때문에 높은 성능과 안정성 – 모듈들이 적고, 자료가 부족하기 때문에, 자체 기술력이 높아야 함