SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
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)

Más contenido relacionado

La actualidad más candente

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

La actualidad más candente (20)

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

Destacado

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 2012Daum DNA
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.xTerry Cho
 
Java/Spring과 Node.js의공존
Java/Spring과 Node.js의공존Java/Spring과 Node.js의공존
Java/Spring과 Node.js의공존동수 장
 
I know - Chrome and Plugin
I know - Chrome and PluginI know - Chrome and Plugin
I know - Chrome and PluginTaewoo Kim
 
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
 
JavaScript 프레임워크 살펴보기
JavaScript 프레임워크 살펴보기JavaScript 프레임워크 살펴보기
JavaScript 프레임워크 살펴보기항희 이
 
Testing nodejs apps
Testing nodejs appsTesting nodejs apps
Testing nodejs appsfelipefsilva
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.jsWoo Jin Kim
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁WebFrameworks
 
Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Junsu Kim
 
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈Amazon Web Services Korea
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907NodejsFoundation
 

Destacado (14)

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
 
빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x빠르게훓어보는 Node.js와 Vert.x
빠르게훓어보는 Node.js와 Vert.x
 
Java/Spring과 Node.js의공존
Java/Spring과 Node.js의공존Java/Spring과 Node.js의공존
Java/Spring과 Node.js의공존
 
I know - Chrome and Plugin
I know - Chrome and PluginI know - Chrome and Plugin
I know - Chrome and Plugin
 
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
 
Node.js intro
Node.js introNode.js intro
Node.js intro
 
JavaScript 프레임워크 살펴보기
JavaScript 프레임워크 살펴보기JavaScript 프레임워크 살펴보기
JavaScript 프레임워크 살펴보기
 
Testing nodejs apps
Testing nodejs appsTesting nodejs apps
Testing nodejs apps
 
진짜기초 Node.js
진짜기초 Node.js진짜기초 Node.js
진짜기초 Node.js
 
웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁웹-프론트엔드 프레임워크를 고르기 위한 팁
웹-프론트엔드 프레임워크를 고르기 위한 팁
 
Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)Web Framework (웹 프레임워크)
Web Framework (웹 프레임워크)
 
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈
AWS 시작하기 및 Amazon S3 살펴보기 (윤석찬) - AWS 웨비나 시리즈
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907
 

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

Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.SeungWoo Lee
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 SuHyun Jeon
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기John Kim
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdfSeokju Hong
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)DK Lee
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용중선 곽
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개Sunghyouk Bae
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기Seong Won Mun
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기Ted Won
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임sung ki choi
 
[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
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea Strike
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?Opennaru, inc.
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축Ji-Woong Choi
 

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

Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.Node.js 팀 스터디 발표자료.
Node.js 팀 스터디 발표자료.
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용 Nodejs발표자료 - 팀 세미나용
Nodejs발표자료 - 팀 세미나용
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기
 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
자바 웹 개발 시작하기 (6주차 : 커뮤니티를 만들어보자!)
 
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
프로그래밍 패러다임의 진화 및 Spring의 금융권 적용
 
Multithread pattern 소개
Multithread pattern 소개Multithread pattern 소개
Multithread pattern 소개
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기
 
지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기지금 핫한 Real-time In-memory Stream Processing 이야기
지금 핫한 Real-time In-memory Stream Processing 이야기
 
[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임[111217 아꿈사연말모임] 웹소켓과온라인게임
[111217 아꿈사연말모임] 웹소켓과온라인게임
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
[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...
 
Rhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_ArchitectureRhea_MMO_SNG_Convergence_Server_Architecture
Rhea_MMO_SNG_Convergence_Server_Architecture
 
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
200.마이크로서비스에 적합한 오픈소스 WAS는 무엇?
 
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
[오픈소스컨설팅]쿠버네티스를 활용한 개발환경 구축
 

Más de Lee Ji Eun

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

Más de Lee Ji Eun (16)

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