SlideShare a Scribd company logo
Node.js의 의미와 자바의 대안
유행
Node.js 코드
                 자바스크립트

                            모듈


                             콜백
 소켓 !!!                   (이벤트 핸들러)
 하지만 쉬워 보이는...
Node.js란?
       자바스크립트로 고용량 서버 네트워크 서비나
        애플리케이션을 작성할 수 있는 프레임워크
 ●   자바스크립트 & 모듈화 (CommonJS)
 ●   비동기 I/O 추상화
 ●   이벤트 기반 단일 쓰레드 동시성 처리
 ●   웹 애플리케이션 프레임워크가 아님!! 기반 네트워크 프레임워크
C10K 문제
    “이젠 웹 서버가 만 개의 클라이언트를 동시에 처리해야 할 때라고
     생각하지 않나요? 무엇보다, 웹은 정말 큰 세상이 됐어요. 컴퓨터
              가 처리할 수 있는 용량도 커졌고요.”
                        ...
        “결국, 하드웨어는 이제 병목이 아니에요.” - 댄 케이글

●   1999년 문서 작성 ( http://www.kegel.com/c10k.html )
●   CPU: 500MHz, RAM: 1G, 100Mbps x 6 = $3000
●   아파치 Prefork 모드에서 MaxRequestWorkers 기본 최대값 256
C10K 문제
●   클라이언트 제어
    ●   one process for each client (classic Unix approach)
    ●   one OS-level thread: many clients
         –   a user-level thread (classic Java green threads)
         –   a state machine
                                이걸 이벤트 구동 방식이라고 말해보죠
         –   a continuation
    ●   one OS-level thread for each client (Java native threads)
    ●   one OS-level thread for each active client
●   비동기 I/O
쓰레드(& 프로세스)
                               포크
                               fork
                                      쓰레드 = 경량 프로세스
         프로세스
                                             생성   메모리   안전성
 코드             쓰레드
                                      프로세스   느림   무거움   높음
           스텍             PC
                                      쓰레드    빠름   가벼움   낮음
정적 데이터
                쓰레드
           스텍             PC          메모리를 차지함
동적 데이터          `   ...               생성 비용 발생
  (힙)
           스텍
                쓰레드
                          PC
                                      컨텍스트 스위칭 비용
                                      공유 메모리/자원 잠금
                                       = 병목 (또는 데드락, 라이브락)

                                      1G 메모리에서 쓰레드 개수 512 개
                                      스텍 = 2M
다중 쓰레드 방식


   `   `
이벤트 구동 방식




`   `   `   `
이벤트 VS 쓰레드
요청 1

요청 2



       Request   readFile()   Read



이벤트

쓰레드 &
블럭 I/O
이벤트의 특징
●   동시 처리 작업량이 많을 수록 컨텍스트 스위칭 비용 절약
    고속 웹 서버, 메시징
    이벤트 ~= 비선점형 스케쥴링
●   오랫동안 connection을 물고 있으면서 CPU보다 I/O 대기 시간이 길 수록 메모
    리 절약
    DB 중심 Ajax 서버, 네트워크 프록시, 채팅, 알림, 대용량 파일 업로드
●   무상태이므로 쓰레드의 복잡성이 없음
●   위 요인을 못 살릴 수록 node.js의 장점이 희미해짐
초간단 웹서버
var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs");

http.createServer(function(request, response) {
    var uri = url.parse(request.url).pathname;
    var filename = path.join(process.cwd(), uri);
    path.exists(filename, function(exists) {
        if(!exists) { … }
        else {
            fs.readFile(filename, "binary", function(err, file){
                response.sendHeader(200);
                response.write(file, "binary");
                 response.close();
            });
        }
    });
}).listen(8080);
Node.js의 구조
                           왜 자바스크립트인가?
                           "자바스크립트는 다른 동적 언어와 차별화되
 노드 애플리케이션            JS
                           는 어떤 특성이 있다. 쓰레드란 개념이 없
                           다는 점이다. 자바스크립트의 동시성은 전적
                           으로 이벤트에 기반을 둔다" - Ryan Dahl
  Node Binding             ●   클로저 지원
                           ●   비동기 처리에 익숙함
                      C
          Event
                           ●   가장 많이 퍼진 언어 중 하나
 V8       Loop             ●   단순하다 (단일쓰레드 밖에 방법이 없음)
                           ●   고속 V8 엔진
                 비동기 I/O
왜 Node.js를...



           &
        Polyglot
Node.js 용도?
●   Websocket 서버 – 채팅, 알림
●   파일 업로드 서버
●   광고 서버
●   Real-Time data app - 웹 서버만 가능하지 않다
●   REST API, Ajax 서버
자바와 연동
           pub               sub
   Node            MQ                Java
           sub               pub




                 Json/Http
    Node                             Java


           sub                 pub
                   MQ
Redis를 사용한 연동
자바
redpub.publish("alert:" + id + ":update", updateCount);


노드
var ws = require('./lib/ws'), redis = require("./lib/redis-client");

var pubsub = redis.createClient();
var connect;
pubsub.stream.addListener('connect', function() {
    pubsub.subscribeTo('alert:*:update', function(channel, data) {
        if (connect) { connect.write(data); }
    });
});
…

var server = ws.createServer({}, httpServer);
server.addListener("connection", function(conn){
  connect = conn;
  conn.broadcast("<"+conn.id+"> connected");
  …
});
server.addListener("close", function(conn){
  conn.broadcast("<"+conn.id+"> disconnected");
});
server.listen(8000);
Node.java ?
●   Non-blocking I/O (NIO) server/Client framework
●   Reactor Pattern!!! = 비동기 이벤트 구동
●   TCP, UDP, HTTP, SSL/TLS
●   Websocket, Protobuf, RTSP
●   단일 쓰레드 / 다중 쓰레드 지원
● 자바!!!
● Trustin Lee(aka 이희승)
httpserver
public void messageReceived(ChannelHandlerContext ctx,
MessageEvent e) throws Exception {
  HttpRequest request =(HttpRequest) e.getMessage();

    buf.setLength(0);
    buf.append("Hello Universern");

    ChannelBuffer content = request.getContent();
    if (content.readable()) {
      buf.append("CONTENT: " +
              content.toString(CharsetUtil.UTF_8));
    }
    writeResponse(e);
}
Netty ++ ?
●   Javascript
●   쉬운 비동기 이벤트 주도 방식
●   단일 또는 다중 스레드
●   자바 통합
●   JVM의 이식성, 안정성, 성능
●   보다 많은 모듈
●   독립 실행(platform) 뿐 아니라 내장(framework)도 가능
Vert.x
●   Javascript ( & Java, Ruby, Groovy, Scala, Clojure, Python...)
●   비동기 이벤트 주도 방식 ( 단일 또는 다중 스레드 )
●   수평 확장성: 분산 이벤트 버스
●   TCP, SSL, HTTP/HTTPS              버스      JS    Ruby    Java
                                      모듈
●   WebSocket, SockJS
●   Jar로 내장 가능 = framework                  분산 이벤트 버스



                                            Core        Netty
Web Server 예제
자바스크립트       (아직)CommonJS가 아님
load('vertx.js')                         콜백!!
vertx.createHttpServer().requestHandler(function(req)
{
    req.response.sendFile('webroot/' + req.path);
}).listen(8080)

그루비                                     람다식
vertx.createHttpServer().requestHandler { req ->
    req.response.sendFile "webroot/$req.uri"
}.listen(8080)
Web Server 예제
import org.vertx.java.core.Handler;
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.deploy.Verticle;

public class Server extends Verticle {
  public void start() {
    vertx.createHttpServer().requestHandler(
        new Handler<HttpServerRequest>() {
 익명 클래스 public void handle(HttpServerRequest req) {
           req.response.sendFile("webroot/"+req.path);
          }
        }).listen(8080);
    }
}
Vert.x의 상황
●   Vert.x 1.1.0 출시 (너무 급했음)
●   빈약한 기본 제공 모듈
    Web Server, MonogoDB, Mailer, Auth, Work Queue
●   그리고, 자극적인 밴치마크와
    http://vertxproject.wordpress.com/2012/05/09/vert-x-vs-node-js-simple-http-benchmarks/

●   하고 싶은 것들...
    https://github.com/purplefox/vert.x/wiki/Modules-&-Features-wish-list
    https://github.com/purplefox/vert.x/wiki/Task-list
●   소심한 Node 호환 계층
    https://github.com/nelsonsilva/node.vert.x
●   커뮤니티 전무
Vert.x를 기다릴 이유?




                             Polyglot
  Software package metrics
그럼 Node.js를 잊어?
●   Community & ecosystem
    Express(sinatra for node.js)
    Socket.io
    Geddy, RailwayJS(Rails for node.js)
    Cucumber.js, mocha, JASMINE
●   MODULES!! https://github.com/joyent/node/wiki/Modules
    many pure JS async modules
    눈에 띄게 많아지는 제 3자 모듈 목록
●   자바스크립트! “나도 할 수 있다, 서버 프로그래밍!”
●   7월 22일 현재 안전판 0.6.19(개발 0.7.12)

More Related Content

PDF
Javascript everywhere - Node.js | Devon 2012
PPTX
Node.js의 도입과 활용
PPTX
Node.js + Websocket 삽질기
PPTX
Nodejs 발표자료
PPTX
Leadweb Nodejs
PDF
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
PPTX
Node.js
PDF
Node.js 시작하기
Javascript everywhere - Node.js | Devon 2012
Node.js의 도입과 활용
Node.js + Websocket 삽질기
Nodejs 발표자료
Leadweb Nodejs
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Node.js
Node.js 시작하기

What's hot (20)

PDF
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
PDF
Node.js 자바스크립트로 서버사이드 개발하기
PDF
Node.js in Flitto
PDF
Node.js 현재와 미래
PDF
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
PDF
Play node conference
PPTX
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
PPTX
Vert.x 세미나 이지원_배포용
PPTX
Beejei node.js & web service
PPTX
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
PPTX
아꿈사 발표 Node JS 프로그래밍 8장
PDF
Node.js 기본
PDF
[C5]deview 2012 nodejs
PDF
Isomorphicspring Isomorphic - spring web seminar 2015
PPTX
Node.js를 사용한 Big Data 사례연구
PDF
Node.js 기본과정
PDF
Vert.x
PDF
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
PPTX
Rhea mmo node_for_share
PDF
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
Node.js 자바스크립트로 서버사이드 개발하기
Node.js in Flitto
Node.js 현재와 미래
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
Play node conference
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Vert.x 세미나 이지원_배포용
Beejei node.js & web service
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
아꿈사 발표 Node JS 프로그래밍 8장
Node.js 기본
[C5]deview 2012 nodejs
Isomorphicspring Isomorphic - spring web seminar 2015
Node.js를 사용한 Big Data 사례연구
Node.js 기본과정
Vert.x
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Rhea mmo node_for_share
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
Ad

Viewers also liked (14)

PDF
Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012
PPTX
빠르게훓어보는 Node.js와 Vert.x
PDF
Java/Spring과 Node.js의공존
PPTX
I know - Chrome and Plugin
PDF
DGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JS
PDF
Node.js intro
PDF
JavaScript 프레임워크 살펴보기
PPTX
Testing nodejs apps
PDF
진짜기초 Node.js
PPTX
웹-프론트엔드 프레임워크를 고르기 위한 팁
PDF
Web Framework (웹 프레임워크)
PDF
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈
PDF
웹 Front-End 실무 이야기
PDF
Node Foundation Membership Overview 20160907
Vert.x&amp;Socket.IO 이해 및 활용 | Devon 2012
빠르게훓어보는 Node.js와 Vert.x
Java/Spring과 Node.js의공존
I know - Chrome and Plugin
DGMIT 제3회 R&D 컨퍼런스 1TEAM : NODE.JS
Node.js intro
JavaScript 프레임워크 살펴보기
Testing nodejs apps
진짜기초 Node.js
웹-프론트엔드 프레임워크를 고르기 위한 팁
Web Framework (웹 프레임워크)
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈
웹 Front-End 실무 이야기
Node Foundation Membership Overview 20160907
Ad

Similar to 세션3 node.js의 의미와 자바의 대안 (20)

PDF
Node.js 팀 스터디 발표자료.
PDF
Node.js 첫걸음
PPTX
Nodejs, PhantomJS, casperJs, YSlow, expressjs
PDF
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
PDF
Nodejs발표자료 - 팀 세미나용
PDF
vert.x 를 활용한 분산서버 개발하기
PDF
OpenStack Swift Debugging
PDF
쓰레드.pdf
KEY
Html5 performance
PDF
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
PPTX
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
PDF
Multithread pattern 소개
PDF
.NET에서 비동기 프로그래밍 배우기
PDF
지금 핫한 Real-time In-memory Stream Processing 이야기
PPTX
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
PDF
[111217 아꿈사연말모임] 웹소켓과온라인게임
PDF
Node.js at OKJSP
PDF
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
PPT
Rhea_MMO_SNG_Convergence_Server_Architecture
PPTX
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
Node.js 팀 스터디 발표자료.
Node.js 첫걸음
Nodejs, PhantomJS, casperJs, YSlow, expressjs
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
Nodejs발표자료 - 팀 세미나용
vert.x 를 활용한 분산서버 개발하기
OpenStack Swift Debugging
쓰레드.pdf
Html5 performance
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
Multithread pattern 소개
.NET에서 비동기 프로그래밍 배우기
지금 핫한 Real-time In-memory Stream Processing 이야기
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
[111217 아꿈사연말모임] 웹소켓과온라인게임
Node.js at OKJSP
[Korea Linux Forum] Implementing web based online multiplayer tetris with Ope...
Rhea_MMO_SNG_Convergence_Server_Architecture
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?

More from Lee Ji Eun (16)

PDF
유한 상태 기반의 한국어 형태소 분석기_이상호
PDF
컨텐츠 기반 A/B 테스트 구현 사례
PDF
Google AlphaGo, 어떻게 동작할까요?
PDF
FIDO 생체인증 기술 개발 사례
PDF
납땜하는 개발자 이야기 @Tech판교
PDF
Enterprise Docker
PDF
T map network graph_t map spider 프로젝트 at_tech
PDF
FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교
PDF
Deep learning 기반TmapPOI 추천기술개발사례
PDF
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
PDF
반응형 웹 기술 이해 V.2
PDF
구글 인박스 히드라 프로그래밍
PDF
세션2 sencha touch 클라우드, sencha.io
PDF
안드로이드 오픈마켓_보안이슈
PDF
모바일광고플랫폼
PPT
20120512 공개sw개발자대회 sk플래닛기업과제소개
유한 상태 기반의 한국어 형태소 분석기_이상호
컨텐츠 기반 A/B 테스트 구현 사례
Google AlphaGo, 어떻게 동작할까요?
FIDO 생체인증 기술 개발 사례
납땜하는 개발자 이야기 @Tech판교
Enterprise Docker
T map network graph_t map spider 프로젝트 at_tech
FIDO기반 생체인식 인증기술_SK플래닛@tech세미나판교
Deep learning 기반TmapPOI 추천기술개발사례
SK플래닛_README_마이크로서비스 아키텍처로 개발하기
반응형 웹 기술 이해 V.2
구글 인박스 히드라 프로그래밍
세션2 sencha touch 클라우드, sencha.io
안드로이드 오픈마켓_보안이슈
모바일광고플랫폼
20120512 공개sw개발자대회 sk플래닛기업과제소개

세션3 node.js의 의미와 자바의 대안

  • 3. Node.js 코드 자바스크립트 모듈 콜백 소켓 !!! (이벤트 핸들러) 하지만 쉬워 보이는...
  • 4. Node.js란? 자바스크립트로 고용량 서버 네트워크 서비나 애플리케이션을 작성할 수 있는 프레임워크 ● 자바스크립트 & 모듈화 (CommonJS) ● 비동기 I/O 추상화 ● 이벤트 기반 단일 쓰레드 동시성 처리 ● 웹 애플리케이션 프레임워크가 아님!! 기반 네트워크 프레임워크
  • 5. C10K 문제 “이젠 웹 서버가 만 개의 클라이언트를 동시에 처리해야 할 때라고 생각하지 않나요? 무엇보다, 웹은 정말 큰 세상이 됐어요. 컴퓨터 가 처리할 수 있는 용량도 커졌고요.” ... “결국, 하드웨어는 이제 병목이 아니에요.” - 댄 케이글 ● 1999년 문서 작성 ( http://www.kegel.com/c10k.html ) ● CPU: 500MHz, RAM: 1G, 100Mbps x 6 = $3000 ● 아파치 Prefork 모드에서 MaxRequestWorkers 기본 최대값 256
  • 6. C10K 문제 ● 클라이언트 제어 ● one process for each client (classic Unix approach) ● one OS-level thread: many clients – a user-level thread (classic Java green threads) – a state machine 이걸 이벤트 구동 방식이라고 말해보죠 – a continuation ● one OS-level thread for each client (Java native threads) ● one OS-level thread for each active client ● 비동기 I/O
  • 7. 쓰레드(& 프로세스) 포크 fork 쓰레드 = 경량 프로세스 프로세스 생성 메모리 안전성 코드 쓰레드 프로세스 느림 무거움 높음 스텍 PC 쓰레드 빠름 가벼움 낮음 정적 데이터 쓰레드 스텍 PC 메모리를 차지함 동적 데이터 ` ... 생성 비용 발생 (힙) 스텍 쓰레드 PC 컨텍스트 스위칭 비용 공유 메모리/자원 잠금 = 병목 (또는 데드락, 라이브락) 1G 메모리에서 쓰레드 개수 512 개 스텍 = 2M
  • 10. 이벤트 VS 쓰레드 요청 1 요청 2 Request readFile() Read 이벤트 쓰레드 & 블럭 I/O
  • 11. 이벤트의 특징 ● 동시 처리 작업량이 많을 수록 컨텍스트 스위칭 비용 절약 고속 웹 서버, 메시징 이벤트 ~= 비선점형 스케쥴링 ● 오랫동안 connection을 물고 있으면서 CPU보다 I/O 대기 시간이 길 수록 메모 리 절약 DB 중심 Ajax 서버, 네트워크 프록시, 채팅, 알림, 대용량 파일 업로드 ● 무상태이므로 쓰레드의 복잡성이 없음 ● 위 요인을 못 살릴 수록 node.js의 장점이 희미해짐
  • 12. 초간단 웹서버 var http = require("http"), url = require("url"), path = require("path"), fs = require("fs"); http.createServer(function(request, response) { var uri = url.parse(request.url).pathname; var filename = path.join(process.cwd(), uri); path.exists(filename, function(exists) { if(!exists) { … } else { fs.readFile(filename, "binary", function(err, file){ response.sendHeader(200); response.write(file, "binary"); response.close(); }); } }); }).listen(8080);
  • 13. Node.js의 구조 왜 자바스크립트인가? "자바스크립트는 다른 동적 언어와 차별화되 노드 애플리케이션 JS 는 어떤 특성이 있다. 쓰레드란 개념이 없 다는 점이다. 자바스크립트의 동시성은 전적 으로 이벤트에 기반을 둔다" - Ryan Dahl Node Binding ● 클로저 지원 ● 비동기 처리에 익숙함 C Event ● 가장 많이 퍼진 언어 중 하나 V8 Loop ● 단순하다 (단일쓰레드 밖에 방법이 없음) ● 고속 V8 엔진 비동기 I/O
  • 14. 왜 Node.js를... & Polyglot
  • 15. Node.js 용도? ● Websocket 서버 – 채팅, 알림 ● 파일 업로드 서버 ● 광고 서버 ● Real-Time data app - 웹 서버만 가능하지 않다 ● REST API, Ajax 서버
  • 16. 자바와 연동 pub sub Node MQ Java sub pub Json/Http Node Java sub pub MQ
  • 17. Redis를 사용한 연동 자바 redpub.publish("alert:" + id + ":update", updateCount); 노드 var ws = require('./lib/ws'), redis = require("./lib/redis-client"); var pubsub = redis.createClient(); var connect; pubsub.stream.addListener('connect', function() { pubsub.subscribeTo('alert:*:update', function(channel, data) { if (connect) { connect.write(data); } }); }); … var server = ws.createServer({}, httpServer); server.addListener("connection", function(conn){ connect = conn; conn.broadcast("<"+conn.id+"> connected"); … }); server.addListener("close", function(conn){ conn.broadcast("<"+conn.id+"> disconnected"); }); server.listen(8000);
  • 18. Node.java ? ● Non-blocking I/O (NIO) server/Client framework ● Reactor Pattern!!! = 비동기 이벤트 구동 ● TCP, UDP, HTTP, SSL/TLS ● Websocket, Protobuf, RTSP ● 단일 쓰레드 / 다중 쓰레드 지원 ● 자바!!! ● Trustin Lee(aka 이희승)
  • 19. httpserver public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { HttpRequest request =(HttpRequest) e.getMessage(); buf.setLength(0); buf.append("Hello Universern"); ChannelBuffer content = request.getContent(); if (content.readable()) { buf.append("CONTENT: " + content.toString(CharsetUtil.UTF_8)); } writeResponse(e); }
  • 20. Netty ++ ? ● Javascript ● 쉬운 비동기 이벤트 주도 방식 ● 단일 또는 다중 스레드 ● 자바 통합 ● JVM의 이식성, 안정성, 성능 ● 보다 많은 모듈 ● 독립 실행(platform) 뿐 아니라 내장(framework)도 가능
  • 21. Vert.x ● Javascript ( & Java, Ruby, Groovy, Scala, Clojure, Python...) ● 비동기 이벤트 주도 방식 ( 단일 또는 다중 스레드 ) ● 수평 확장성: 분산 이벤트 버스 ● TCP, SSL, HTTP/HTTPS 버스 JS Ruby Java 모듈 ● WebSocket, SockJS ● Jar로 내장 가능 = framework 분산 이벤트 버스 Core Netty
  • 22. Web Server 예제 자바스크립트 (아직)CommonJS가 아님 load('vertx.js') 콜백!! vertx.createHttpServer().requestHandler(function(req) { req.response.sendFile('webroot/' + req.path); }).listen(8080) 그루비 람다식 vertx.createHttpServer().requestHandler { req -> req.response.sendFile "webroot/$req.uri" }.listen(8080)
  • 23. Web Server 예제 import org.vertx.java.core.Handler; import org.vertx.java.core.http.HttpServerRequest; import org.vertx.java.deploy.Verticle; public class Server extends Verticle { public void start() { vertx.createHttpServer().requestHandler( new Handler<HttpServerRequest>() { 익명 클래스 public void handle(HttpServerRequest req) { req.response.sendFile("webroot/"+req.path); } }).listen(8080); } }
  • 24. Vert.x의 상황 ● Vert.x 1.1.0 출시 (너무 급했음) ● 빈약한 기본 제공 모듈 Web Server, MonogoDB, Mailer, Auth, Work Queue ● 그리고, 자극적인 밴치마크와 http://vertxproject.wordpress.com/2012/05/09/vert-x-vs-node-js-simple-http-benchmarks/ ● 하고 싶은 것들... https://github.com/purplefox/vert.x/wiki/Modules-&-Features-wish-list https://github.com/purplefox/vert.x/wiki/Task-list ● 소심한 Node 호환 계층 https://github.com/nelsonsilva/node.vert.x ● 커뮤니티 전무
  • 25. Vert.x를 기다릴 이유? Polyglot Software package metrics
  • 26. 그럼 Node.js를 잊어? ● Community & ecosystem Express(sinatra for node.js) Socket.io Geddy, RailwayJS(Rails for node.js) Cucumber.js, mocha, JASMINE ● MODULES!! https://github.com/joyent/node/wiki/Modules many pure JS async modules 눈에 띄게 많아지는 제 3자 모듈 목록 ● 자바스크립트! “나도 할 수 있다, 서버 프로그래밍!” ● 7월 22일 현재 안전판 0.6.19(개발 0.7.12)