SlideShare ist ein Scribd-Unternehmen logo
1 von 103
12년	 6월	 4일	 월요일
Node.js Happy Hacking
                          Node.js Black Edition & Module Internal Binding




                                               @nanhapark


12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
About me




12년	 6월	 4일	 월요일
About me

        http://about.me/nanha
        Seoul, FRENDS.KR 그룹에서 활동중
        이전 회사인 cafe24에서 7년간 근무, 5년간 연구소에 재직 후
        현재 KTH 이직함
        ------------------------------------------------------
        :) Javascript(Node.JS), python, perl, bash, php
        :) company: KTH, part: DevOps
        ------------------------------------------------------
        Node.js Q&A : http://nodeqa.com
        Node.js Nodeman : http://nodeman.org
        Node.js Black Edition : http://black.nodeman.org
        나꼼수여 영원하라: http://naggomsu.nanha.com


12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
About Slides




12년	 6월	 4일	 월요일
About Slides


                   Node.js Black Edition 프로젝트를 개인적으로 진
                   행하면서 느낀점들을 정리

                   $ node, 실행시 어떤 과정으로 실행되는지?

                   Node Module이 어떤과정을 거쳐 사용자가 사용할
                   수 있게 되는지?

                   npm을 통하지 않고, 원하는 Module을 빌드시점에
                   Native Module로 빌트인 방법은 어떻게 되는지?


12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Start Project Using Node.js




12년	 6월	 4일	 월요일
냐 ?
        거 아
     미 친




        Start Project Using Node.js




12년	 6월	 4일	 월요일
괜찮다. 이럴때 시작해보자
                   냐 ?
        거 아
     미 친




        Start Project Using Node.js




12년	 6월	 4일	 월요일
괜찮다. 이럴때 시작해보자
                   냐 ?
        거 아              팀장님에
     미 친                      게 이번
                                   프로젝트
                          Node로         는
                                하겠습니
                                     다.




        Start Project Using Node.js




12년	 6월	 4일	 월요일
괜찮다. 이럴때 시작해보자
                   냐 ?
        거 아              팀장님에
     미 친                      게 이번
                                   프로젝트
                          Node로         는
                                하겠습니
                                     다.




        Start Project Using Node.js
                                내
                                  가
                                      총
                                       대
                                          를
                                              매
                                               보
                                                  자
                                                   .

12년	 6월	 4일	 월요일
괜찮다. 이럴때 시작해보자
                   냐 ?
        거 아              팀장님에
     미 친                      게 이번
                                   프로젝트
                          Node로         는
                                하겠습니
                                     다.




        Start Project Using Node.js
                                내
                                  가
                                      총
                                       대
                                          를
                                              매
                                               보
                                      후덜덜
                                                  자
                                                   .

12년	 6월	 4일	 월요일
괜찮다. 이럴때 시작해보자
                    냐 ?
        거 아                  팀장님에
     미 친                             게 이번
                                          프로젝트
                                 Node로         는
                                       하겠습니
                                            다.




        Start Project Using Node.js
                                        내
                                         가
                                             총
                                              대
                                                 를
                                                     매
                                                      보
                                   보자
                                             후덜덜
                                                         자
                              가 되                         .
                          서 최고
                   민 국에
          대한
12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
한번 해볼까?! 고고고고




12년	 6월	 4일	 월요일
한번 해볼까?! 고고고고


            openapi 를 호출하여 무언가 해보자

            작업시작 !! 유후~~ 재밌겠다.

            음.. http native module이 있군.

            var http = require(‘http’); 그 다음..

            createClient, request, parameters, callbacks..... wow!
            아주 구현하기 어렵다. What Fu*k !!



12년	 6월	 4일	 월요일
한번 해볼까?! 고고고고


            openapi 를 호출하여 무언가 해보자

            작업시작 !! 유후~~ 재밌겠다.

            음.. http native module이 있군.

            var http = require(‘http’); 그 다음..

            createClient, request, parameters, callbacks..... wow!
            아주 구현하기 어렵다. What Fu*k !!



12년	 6월	 4일	 월요일
한번 해볼까?! 고고고고


            openapi 를 호출하여 무언가 해보자

            작업시작 !! 유후~~ 재밌겠다.

            음.. http native module이 있군.

            var http = require(‘http’); 그 다음..

            createClient, request, parameters, callbacks..... wow!
            아주 구현하기 어렵다. What Fu*k !!



12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Node.js 실무작업 목록




12년	 6월	 4일	 월요일
Node.js 실무작업 목록

            Jabber (Erlang) 채팅서버를 Node.js 으로 작업
                   OAuth, Socket.io

                   HAProxy, Stunnel, Redis

            현재 클라우드빌드 프로젝트 Node.js 으로 작업중
                   API 서버

                   쉘스크립트

            기타 개인적인 홈페이지 nodeqa, naggomsu


12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
작업 과정에서 느꼈던 아쉬운 점들




12년	 6월	 4일	 월요일
작업 과정에서 느꼈던 아쉬운 점들

            TIP 공유 커뮤니티 부족

            인터페이스 수준의 API 제공

            제공되는 API를 사용하여 작업하기 어렵다.

            원하는 결과를 얻기 위해 적지 않은 코딩을 해야한다.

            해결방법

                   신들린 구글링 -> 시간소요 ;; project deadline ....;;

                   3rd party module name을 알아야 하고, github 소스
                   를 분석 / 삽질 시작
12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
3rd party module keyword 중요성 증대




12년	 6월	 4일	 월요일
3rd party module keyword 중요성 증대

            제공되는 API를 이용하여 1개의 API호출/응답 관련 작
            업하는데 소비하는 비용이 너무 크다.

            restler or request 라는 모듈 키워드만 알고 있어도 확
            실한 도움이 될 것이다.

            키워드를 알아도 사용방법을 브라우져를 열고 검색해
            서 알아내야 하고, 대중적인 사용방법 또한 익혀야 한
            다.

            터미널 스타일 개발자는 검색이 불편하다. (나만 그런
            가 ㅋ) linux man 과 같은것을 만들어보자.

12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
3rd party module 찾아서...




12년	 6월	 4일	 월요일
3rd party module 찾아서...




12년	 6월	 4일	 월요일
3rd party module 찾아서...




12년	 6월	 4일	 월요일
3rd party module 찾아서...


            File System - byline | fileutils | glob | graceful-fs |
            minimatch | mkdirp |
            Control Flow - async | fibers | fibrous | step |
            jsdom, request, restler, mongoose, node-static, ejs,
            jade, xml2js, js2xml, socket.io, commander, optimist,
            uuid, underscore
            etc ...., 너무 많다......



12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Node.js Black Edition
        Project Start



12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
To-Do




12년	 6월	 4일	 월요일
To-Do

            유용하고 검증된 3rd party module을 Native Module
            으로 컴파일하자.

            대중성 있는 Module이 무엇일까?

                   Most Depend on, http://search.npmjs.org/
            실무에서 진행중인 프로젝트에 적용해보자

                   역시 실무빨을 받아야 뭔가 남는다.

            약 20개 Native Module 작업완료


12년	 6월	 4일	 월요일
To-Do

            유용하고 검증된 3rd party module을 Native Module
            으로 컴파일하자.

            대중성 있는 Module이 무엇일까?

                   Most Depend on, http://search.npmjs.org/
            실무에서 진행중인 프로젝트에 적용해보자

                   역시 실무빨을 받아야 뭔가 남는다.

            약 20개 Native Module 작업완료


12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Node.js 언어 구성




12년	 6월	 4일	 월요일
Node.js 언어 구성


            Python: Build Script

            Javascript: API (native module)

            cpp: core (v8)

            c: opensource (libuv, libev, libeio, http_parser, zlib ...)




12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
v8 util JS2C




12년	 6월	 4일	 월요일
v8 util JS2C

                   Node 의 기본 API (http, fs ..) 를 v8에 compile하기
                   위한 tool

                   v8 utility (./tools/js2c.py)
                   WAF Build Script (wscript) 에서 import

                   Convert Javascript (lib/**) to C source (header)
                     src/node_javascript.cc 에서 header file load

                   http://nodeqa.com/nodejs_ref/10
                   http://nodeqa.com/nodejs_ref/14

12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
JS2C Live Coding




12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Native Module 장점




12년	 6월	 4일	 월요일
Native Module 장점

            default
                   javascript -> file load -> v8 compile
            hacking
                   javascript -> file load -> c -> v8 compile
            not npm
            3rd party module 찾아서 여행을 떠나지 않아도 된다.

                   바로 require !

12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Nodeman (Node.js Manual)




12년	 6월	 4일	 월요일
Nodeman (Node.js Manual)
           http://nodeman.org

           터미널에서 바로 Snippet code를 얻자.

           Node.js 기본 API 를 비롯하여 유용한 3rd party module manual
           제공해보자.

           약 50개의 대중적인 검증된 모듈 위주로 readme.md 내용을
           colorful 작업하여 집약시킴.

           usage: nodeman [modulename]

           builtin list: nodeman -b

                   카테고리별로 검증된 모듈목록을 확인할 수 있다.

           기본 API 포함, 약 40개 Native Module 작업완료. update ... ing...
12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Nodeman Live Coding




12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Node.js Fun Arch.




12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Event Driven




12년	 6월	 4일	 월요일
Event Driven




12년	 6월	 4일	 월요일
Event Driven




12년	 6월	 4일	 월요일
Event Driven




12년	 6월	 4일	 월요일
Event Driven



          인생은 이벤트의 연속이다.
                휴;;



12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Event Loop (Monitoring)




12년	 6월	 4일	 월요일
Event Loop (Monitoring)




12년	 6월	 4일	 월요일
Event Loop (Monitoring)

             당신은 1년치의 이벤트를 달력에 등록하고 (epoll/
             kqueue)
             그것을 실행하는 사람은 당신 혼자일 수도 있고, 여러개
             의 이벤트를 각각의 이벤트업체나 친구들에게 맡겨서 이
             벤트를 진행시킬 수 있다.(libeio)

             당신이 똑똑하고, 가정적이고, 실행계획능력이 뛰어난다
             면, 이벤트 실행은 별거 아니다. (libev)

             사실. 돈이 문제이기도 함.

12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
단일쓰레드 ? No. 메인쓰레드만 단일 !




12년	 6월	 4일	 월요일
단일쓰레드 ? No. 메인쓰레드만 단일 !




                   I/O 처리
                     libeio



12년	 6월	 4일	 월요일
단일쓰레드 ? No. 메인쓰레드만 단일 !


                                 메인쓰레드만
                 메인쓰레드의
                  I/O 처리         단일쓰레드

                       V8
                    libeio
                                 file I/O
                                 max polling
               (google chrome)   count 10




12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Architecture & I/O Flow (libeio)




12년	 6월	 4일	 월요일
Architecture & I/O Flow (libeio)




12년	 6월	 4일	 월요일
Architecture & I/O Flow (libeio)




                   http://nodeqa.com/nodejs_ref/6
12년	 6월	 4일	 월요일
Architecture & I/O Flow (libeio)




                   http://nodeqa.com/nodejs_ref/6
12년	 6월	 4일	 월요일
Architecture & I/O Flow (libeio)




                   http://nodeqa.com/nodejs_ref/6
12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Module Internal Binding




12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
최초 Node 실행시 프롬프트 뜨기 전까지...




12년	 6월	 4일	 월요일
최초 Node 실행시 프롬프트 뜨기 전까지...


            제일 먼저 실행되는 파일 src/node_main.cc

                   int main....
            두번째로 실행되는 파일 src/node.cc LINE 2618

                   process 객체 생성 ex) process.binding, process API

            lib/**.js Native Modules v8 compile
                   src/node_javascript.cc LINE 36
            event loop start

12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
process.binding()




12년	 6월	 4일	 월요일
process.binding()

            Node API 의 핵심역할

            cpp module을 javascript으로 불러들일 수 있도록 중개역할을
            한다.

                   FROM src/node_**.cc TO src/**.js
                   ex) http (http_parser)
            binding을 lib/**.js 에서 사용할 수 있도록 API 형식으로 선언

                   src/node.cc LINE 1727, 2101
                   NODE_SET_METHOD (process, "binding", Binding);

12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Make Native Module (DIY)




12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
javascript를 Native Module로... #1




12년	 6월	 4일	 월요일
javascript를 Native Module로... #1


            very easy !!

            lib/**.js 파일들의 기본취지

                   node.js programming

                     cpp module 을 API로 제공하기 위한 Wrapper

                     process.binding 으로 cpp 불러들임.


12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
javascript를 Native Module로... #2




12년	 6월	 4일	 월요일
javascript를 Native Module로... #2

            lib/**.js 생성하기

                   ** 에 포함되는 dependency 존재할 시 **_sub.js 형태로
                   만들어서 require 하는것이 일반적. 서브디렉토리는 지원
                   하지 않음. 예) require “winston_transport.js”

                   fs, http ... 등 모두 1개의 javascript 파일로 이루어져 있으
                   며, process.binding 을 사용하여 cpp lib import

            WAF build tool 에 의하여 변경사항이 있을경우 rebuild

            make && make install


12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
cpp를 native module로 만들어보자.




12년	 6월	 4일	 월요일
cpp를 native module로 만들어보자.


            일반적인 방법 http://nodejs.org/api/addons.html

                   *.node 만들기 && require

            src/node_**.h (optinal), src/node_**.cc
            src/node_extension.h 추가

            lib/**.js 추가하고 process.binding 사용하여 import

            wscript 918 LINE 부분에 추가

            make && make install

12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
Native Module Live Coding




12년	 6월	 4일	 월요일
12년	 6월	 4일	 월요일
끝. 감사합니다.




12년	 6월	 4일	 월요일

Weitere ähnliche Inhalte

Andere mochten auch

Presentación Rodrigo Valdes - eCommerce Day Santiago 2016
Presentación Rodrigo Valdes - eCommerce Day Santiago 2016Presentación Rodrigo Valdes - eCommerce Day Santiago 2016
Presentación Rodrigo Valdes - eCommerce Day Santiago 2016eCommerce Institute
 
Presentación Gonzalo Jimenez - eCommerce Day Santiago 2016
Presentación Gonzalo Jimenez - eCommerce Day Santiago 2016Presentación Gonzalo Jimenez - eCommerce Day Santiago 2016
Presentación Gonzalo Jimenez - eCommerce Day Santiago 2016eCommerce Institute
 
Presentación Ricardo Alonso - eCommerce Day Santiago 2016
Presentación Ricardo Alonso - eCommerce Day Santiago 2016Presentación Ricardo Alonso - eCommerce Day Santiago 2016
Presentación Ricardo Alonso - eCommerce Day Santiago 2016eCommerce Institute
 
DIREITO TRIBUTÁRIO II REVISÃO PARA AV 2 CEDIDO POR BRENDA LÍVIA
DIREITO TRIBUTÁRIO II   REVISÃO PARA AV 2  CEDIDO POR BRENDA LÍVIA DIREITO TRIBUTÁRIO II   REVISÃO PARA AV 2  CEDIDO POR BRENDA LÍVIA
DIREITO TRIBUTÁRIO II REVISÃO PARA AV 2 CEDIDO POR BRENDA LÍVIA Esdras Arthur Lopes Pessoa
 
Five-Factor Model of Personality, Assessment, and Job Performance
Five-Factor Model of Personality, Assessment, and Job PerformanceFive-Factor Model of Personality, Assessment, and Job Performance
Five-Factor Model of Personality, Assessment, and Job PerformanceA.J. Panneton
 

Andere mochten auch (6)

Presentación Rodrigo Valdes - eCommerce Day Santiago 2016
Presentación Rodrigo Valdes - eCommerce Day Santiago 2016Presentación Rodrigo Valdes - eCommerce Day Santiago 2016
Presentación Rodrigo Valdes - eCommerce Day Santiago 2016
 
Presentación Gonzalo Jimenez - eCommerce Day Santiago 2016
Presentación Gonzalo Jimenez - eCommerce Day Santiago 2016Presentación Gonzalo Jimenez - eCommerce Day Santiago 2016
Presentación Gonzalo Jimenez - eCommerce Day Santiago 2016
 
Albania
AlbaniaAlbania
Albania
 
Presentación Ricardo Alonso - eCommerce Day Santiago 2016
Presentación Ricardo Alonso - eCommerce Day Santiago 2016Presentación Ricardo Alonso - eCommerce Day Santiago 2016
Presentación Ricardo Alonso - eCommerce Day Santiago 2016
 
DIREITO TRIBUTÁRIO II REVISÃO PARA AV 2 CEDIDO POR BRENDA LÍVIA
DIREITO TRIBUTÁRIO II   REVISÃO PARA AV 2  CEDIDO POR BRENDA LÍVIA DIREITO TRIBUTÁRIO II   REVISÃO PARA AV 2  CEDIDO POR BRENDA LÍVIA
DIREITO TRIBUTÁRIO II REVISÃO PARA AV 2 CEDIDO POR BRENDA LÍVIA
 
Five-Factor Model of Personality, Assessment, and Job Performance
Five-Factor Model of Personality, Assessment, and Job PerformanceFive-Factor Model of Personality, Assessment, and Job Performance
Five-Factor Model of Personality, Assessment, and Job Performance
 

Node module internal binding

  • 1. 12년 6월 4일 월요일
  • 2. Node.js Happy Hacking Node.js Black Edition & Module Internal Binding @nanhapark 12년 6월 4일 월요일
  • 3. 12년 6월 4일 월요일
  • 4. About me 12년 6월 4일 월요일
  • 5. About me http://about.me/nanha Seoul, FRENDS.KR 그룹에서 활동중 이전 회사인 cafe24에서 7년간 근무, 5년간 연구소에 재직 후 현재 KTH 이직함 ------------------------------------------------------ :) Javascript(Node.JS), python, perl, bash, php :) company: KTH, part: DevOps ------------------------------------------------------ Node.js Q&A : http://nodeqa.com Node.js Nodeman : http://nodeman.org Node.js Black Edition : http://black.nodeman.org 나꼼수여 영원하라: http://naggomsu.nanha.com 12년 6월 4일 월요일
  • 6. 12년 6월 4일 월요일
  • 7. About Slides 12년 6월 4일 월요일
  • 8. About Slides Node.js Black Edition 프로젝트를 개인적으로 진 행하면서 느낀점들을 정리 $ node, 실행시 어떤 과정으로 실행되는지? Node Module이 어떤과정을 거쳐 사용자가 사용할 수 있게 되는지? npm을 통하지 않고, 원하는 Module을 빌드시점에 Native Module로 빌트인 방법은 어떻게 되는지? 12년 6월 4일 월요일
  • 9. 12년 6월 4일 월요일
  • 10. Start Project Using Node.js 12년 6월 4일 월요일
  • 11. 냐 ? 거 아 미 친 Start Project Using Node.js 12년 6월 4일 월요일
  • 12. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 미 친 Start Project Using Node.js 12년 6월 4일 월요일
  • 13. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 팀장님에 미 친 게 이번 프로젝트 Node로 는 하겠습니 다. Start Project Using Node.js 12년 6월 4일 월요일
  • 14. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 팀장님에 미 친 게 이번 프로젝트 Node로 는 하겠습니 다. Start Project Using Node.js 내 가 총 대 를 매 보 자 . 12년 6월 4일 월요일
  • 15. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 팀장님에 미 친 게 이번 프로젝트 Node로 는 하겠습니 다. Start Project Using Node.js 내 가 총 대 를 매 보 후덜덜 자 . 12년 6월 4일 월요일
  • 16. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 팀장님에 미 친 게 이번 프로젝트 Node로 는 하겠습니 다. Start Project Using Node.js 내 가 총 대 를 매 보 보자 후덜덜 자 가 되 . 서 최고 민 국에 대한 12년 6월 4일 월요일
  • 17. 12년 6월 4일 월요일
  • 19. 한번 해볼까?! 고고고고 openapi 를 호출하여 무언가 해보자 작업시작 !! 유후~~ 재밌겠다. 음.. http native module이 있군. var http = require(‘http’); 그 다음.. createClient, request, parameters, callbacks..... wow! 아주 구현하기 어렵다. What Fu*k !! 12년 6월 4일 월요일
  • 20. 한번 해볼까?! 고고고고 openapi 를 호출하여 무언가 해보자 작업시작 !! 유후~~ 재밌겠다. 음.. http native module이 있군. var http = require(‘http’); 그 다음.. createClient, request, parameters, callbacks..... wow! 아주 구현하기 어렵다. What Fu*k !! 12년 6월 4일 월요일
  • 21. 한번 해볼까?! 고고고고 openapi 를 호출하여 무언가 해보자 작업시작 !! 유후~~ 재밌겠다. 음.. http native module이 있군. var http = require(‘http’); 그 다음.. createClient, request, parameters, callbacks..... wow! 아주 구현하기 어렵다. What Fu*k !! 12년 6월 4일 월요일
  • 22. 12년 6월 4일 월요일
  • 23. Node.js 실무작업 목록 12년 6월 4일 월요일
  • 24. Node.js 실무작업 목록 Jabber (Erlang) 채팅서버를 Node.js 으로 작업 OAuth, Socket.io HAProxy, Stunnel, Redis 현재 클라우드빌드 프로젝트 Node.js 으로 작업중 API 서버 쉘스크립트 기타 개인적인 홈페이지 nodeqa, naggomsu 12년 6월 4일 월요일
  • 25. 12년 6월 4일 월요일
  • 26. 작업 과정에서 느꼈던 아쉬운 점들 12년 6월 4일 월요일
  • 27. 작업 과정에서 느꼈던 아쉬운 점들 TIP 공유 커뮤니티 부족 인터페이스 수준의 API 제공 제공되는 API를 사용하여 작업하기 어렵다. 원하는 결과를 얻기 위해 적지 않은 코딩을 해야한다. 해결방법 신들린 구글링 -> 시간소요 ;; project deadline ....;; 3rd party module name을 알아야 하고, github 소스 를 분석 / 삽질 시작 12년 6월 4일 월요일
  • 28. 12년 6월 4일 월요일
  • 29. 3rd party module keyword 중요성 증대 12년 6월 4일 월요일
  • 30. 3rd party module keyword 중요성 증대 제공되는 API를 이용하여 1개의 API호출/응답 관련 작 업하는데 소비하는 비용이 너무 크다. restler or request 라는 모듈 키워드만 알고 있어도 확 실한 도움이 될 것이다. 키워드를 알아도 사용방법을 브라우져를 열고 검색해 서 알아내야 하고, 대중적인 사용방법 또한 익혀야 한 다. 터미널 스타일 개발자는 검색이 불편하다. (나만 그런 가 ㅋ) linux man 과 같은것을 만들어보자. 12년 6월 4일 월요일
  • 31. 12년 6월 4일 월요일
  • 32. 3rd party module 찾아서... 12년 6월 4일 월요일
  • 33. 3rd party module 찾아서... 12년 6월 4일 월요일
  • 34. 3rd party module 찾아서... 12년 6월 4일 월요일
  • 35. 3rd party module 찾아서... File System - byline | fileutils | glob | graceful-fs | minimatch | mkdirp | Control Flow - async | fibers | fibrous | step | jsdom, request, restler, mongoose, node-static, ejs, jade, xml2js, js2xml, socket.io, commander, optimist, uuid, underscore etc ...., 너무 많다...... 12년 6월 4일 월요일
  • 36. 12년 6월 4일 월요일
  • 37. Node.js Black Edition Project Start 12년 6월 4일 월요일
  • 38. 12년 6월 4일 월요일
  • 40. To-Do 유용하고 검증된 3rd party module을 Native Module 으로 컴파일하자. 대중성 있는 Module이 무엇일까? Most Depend on, http://search.npmjs.org/ 실무에서 진행중인 프로젝트에 적용해보자 역시 실무빨을 받아야 뭔가 남는다. 약 20개 Native Module 작업완료 12년 6월 4일 월요일
  • 41. To-Do 유용하고 검증된 3rd party module을 Native Module 으로 컴파일하자. 대중성 있는 Module이 무엇일까? Most Depend on, http://search.npmjs.org/ 실무에서 진행중인 프로젝트에 적용해보자 역시 실무빨을 받아야 뭔가 남는다. 약 20개 Native Module 작업완료 12년 6월 4일 월요일
  • 42. 12년 6월 4일 월요일
  • 43. Node.js 언어 구성 12년 6월 4일 월요일
  • 44. Node.js 언어 구성 Python: Build Script Javascript: API (native module) cpp: core (v8) c: opensource (libuv, libev, libeio, http_parser, zlib ...) 12년 6월 4일 월요일
  • 45. 12년 6월 4일 월요일
  • 46. v8 util JS2C 12년 6월 4일 월요일
  • 47. v8 util JS2C Node 의 기본 API (http, fs ..) 를 v8에 compile하기 위한 tool v8 utility (./tools/js2c.py) WAF Build Script (wscript) 에서 import Convert Javascript (lib/**) to C source (header) src/node_javascript.cc 에서 header file load http://nodeqa.com/nodejs_ref/10 http://nodeqa.com/nodejs_ref/14 12년 6월 4일 월요일
  • 48. 12년 6월 4일 월요일
  • 49. JS2C Live Coding 12년 6월 4일 월요일
  • 50. 12년 6월 4일 월요일
  • 51. Native Module 장점 12년 6월 4일 월요일
  • 52. Native Module 장점 default javascript -> file load -> v8 compile hacking javascript -> file load -> c -> v8 compile not npm 3rd party module 찾아서 여행을 떠나지 않아도 된다. 바로 require ! 12년 6월 4일 월요일
  • 53. 12년 6월 4일 월요일
  • 54. 12년 6월 4일 월요일
  • 55. Nodeman (Node.js Manual) 12년 6월 4일 월요일
  • 56. Nodeman (Node.js Manual) http://nodeman.org 터미널에서 바로 Snippet code를 얻자. Node.js 기본 API 를 비롯하여 유용한 3rd party module manual 제공해보자. 약 50개의 대중적인 검증된 모듈 위주로 readme.md 내용을 colorful 작업하여 집약시킴. usage: nodeman [modulename] builtin list: nodeman -b 카테고리별로 검증된 모듈목록을 확인할 수 있다. 기본 API 포함, 약 40개 Native Module 작업완료. update ... ing... 12년 6월 4일 월요일
  • 57. 12년 6월 4일 월요일
  • 58. Nodeman Live Coding 12년 6월 4일 월요일
  • 59. 12년 6월 4일 월요일
  • 60. Node.js Fun Arch. 12년 6월 4일 월요일
  • 61. 12년 6월 4일 월요일
  • 62. Event Driven 12년 6월 4일 월요일
  • 63. Event Driven 12년 6월 4일 월요일
  • 64. Event Driven 12년 6월 4일 월요일
  • 65. Event Driven 12년 6월 4일 월요일
  • 66. Event Driven 인생은 이벤트의 연속이다. 휴;; 12년 6월 4일 월요일
  • 67. 12년 6월 4일 월요일
  • 68. Event Loop (Monitoring) 12년 6월 4일 월요일
  • 69. Event Loop (Monitoring) 12년 6월 4일 월요일
  • 70. Event Loop (Monitoring) 당신은 1년치의 이벤트를 달력에 등록하고 (epoll/ kqueue) 그것을 실행하는 사람은 당신 혼자일 수도 있고, 여러개 의 이벤트를 각각의 이벤트업체나 친구들에게 맡겨서 이 벤트를 진행시킬 수 있다.(libeio) 당신이 똑똑하고, 가정적이고, 실행계획능력이 뛰어난다 면, 이벤트 실행은 별거 아니다. (libev) 사실. 돈이 문제이기도 함. 12년 6월 4일 월요일
  • 71. 12년 6월 4일 월요일
  • 72. 단일쓰레드 ? No. 메인쓰레드만 단일 ! 12년 6월 4일 월요일
  • 73. 단일쓰레드 ? No. 메인쓰레드만 단일 ! I/O 처리 libeio 12년 6월 4일 월요일
  • 74. 단일쓰레드 ? No. 메인쓰레드만 단일 ! 메인쓰레드만 메인쓰레드의 I/O 처리 단일쓰레드 V8 libeio file I/O max polling (google chrome) count 10 12년 6월 4일 월요일
  • 75. 12년 6월 4일 월요일
  • 76. Architecture & I/O Flow (libeio) 12년 6월 4일 월요일
  • 77. Architecture & I/O Flow (libeio) 12년 6월 4일 월요일
  • 78. Architecture & I/O Flow (libeio) http://nodeqa.com/nodejs_ref/6 12년 6월 4일 월요일
  • 79. Architecture & I/O Flow (libeio) http://nodeqa.com/nodejs_ref/6 12년 6월 4일 월요일
  • 80. Architecture & I/O Flow (libeio) http://nodeqa.com/nodejs_ref/6 12년 6월 4일 월요일
  • 81. 12년 6월 4일 월요일
  • 82. Module Internal Binding 12년 6월 4일 월요일
  • 83. 12년 6월 4일 월요일
  • 84. 최초 Node 실행시 프롬프트 뜨기 전까지... 12년 6월 4일 월요일
  • 85. 최초 Node 실행시 프롬프트 뜨기 전까지... 제일 먼저 실행되는 파일 src/node_main.cc int main.... 두번째로 실행되는 파일 src/node.cc LINE 2618 process 객체 생성 ex) process.binding, process API lib/**.js Native Modules v8 compile src/node_javascript.cc LINE 36 event loop start 12년 6월 4일 월요일
  • 86. 12년 6월 4일 월요일
  • 88. process.binding() Node API 의 핵심역할 cpp module을 javascript으로 불러들일 수 있도록 중개역할을 한다. FROM src/node_**.cc TO src/**.js ex) http (http_parser) binding을 lib/**.js 에서 사용할 수 있도록 API 형식으로 선언 src/node.cc LINE 1727, 2101 NODE_SET_METHOD (process, "binding", Binding); 12년 6월 4일 월요일
  • 89. 12년 6월 4일 월요일
  • 90. Make Native Module (DIY) 12년 6월 4일 월요일
  • 91. 12년 6월 4일 월요일
  • 92. javascript를 Native Module로... #1 12년 6월 4일 월요일
  • 93. javascript를 Native Module로... #1 very easy !! lib/**.js 파일들의 기본취지 node.js programming cpp module 을 API로 제공하기 위한 Wrapper process.binding 으로 cpp 불러들임. 12년 6월 4일 월요일
  • 94. 12년 6월 4일 월요일
  • 95. javascript를 Native Module로... #2 12년 6월 4일 월요일
  • 96. javascript를 Native Module로... #2 lib/**.js 생성하기 ** 에 포함되는 dependency 존재할 시 **_sub.js 형태로 만들어서 require 하는것이 일반적. 서브디렉토리는 지원 하지 않음. 예) require “winston_transport.js” fs, http ... 등 모두 1개의 javascript 파일로 이루어져 있으 며, process.binding 을 사용하여 cpp lib import WAF build tool 에 의하여 변경사항이 있을경우 rebuild make && make install 12년 6월 4일 월요일
  • 97. 12년 6월 4일 월요일
  • 98. cpp를 native module로 만들어보자. 12년 6월 4일 월요일
  • 99. cpp를 native module로 만들어보자. 일반적인 방법 http://nodejs.org/api/addons.html *.node 만들기 && require src/node_**.h (optinal), src/node_**.cc src/node_extension.h 추가 lib/**.js 추가하고 process.binding 사용하여 import wscript 918 LINE 부분에 추가 make && make install 12년 6월 4일 월요일
  • 100. 12년 6월 4일 월요일
  • 101. Native Module Live Coding 12년 6월 4일 월요일
  • 102. 12년 6월 4일 월요일