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일 월요일
8. About Slides
Node.js Black Edition 프로젝트를 개인적으로 진
행하면서 느낀점들을 정리
$ node, 실행시 어떤 과정으로 실행되는지?
Node Module이 어떤과정을 거쳐 사용자가 사용할
수 있게 되는지?
npm을 통하지 않고, 원하는 Module을 빌드시점에
Native Module로 빌트인 방법은 어떻게 되는지?
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일 월요일
24. Node.js 실무작업 목록
Jabber (Erlang) 채팅서버를 Node.js 으로 작업
OAuth, Socket.io
HAProxy, Stunnel, Redis
현재 클라우드빌드 프로젝트 Node.js 으로 작업중
API 서버
쉘스크립트
기타 개인적인 홈페이지 nodeqa, naggomsu
12년 6월 4일 월요일
27. 작업 과정에서 느꼈던 아쉬운 점들
TIP 공유 커뮤니티 부족
인터페이스 수준의 API 제공
제공되는 API를 사용하여 작업하기 어렵다.
원하는 결과를 얻기 위해 적지 않은 코딩을 해야한다.
해결방법
신들린 구글링 -> 시간소요 ;; project deadline ....;;
3rd party module name을 알아야 하고, github 소스
를 분석 / 삽질 시작
12년 6월 4일 월요일
30. 3rd party module keyword 중요성 증대
제공되는 API를 이용하여 1개의 API호출/응답 관련 작
업하는데 소비하는 비용이 너무 크다.
restler or request 라는 모듈 키워드만 알고 있어도 확
실한 도움이 될 것이다.
키워드를 알아도 사용방법을 브라우져를 열고 검색해
서 알아내야 하고, 대중적인 사용방법 또한 익혀야 한
다.
터미널 스타일 개발자는 검색이 불편하다. (나만 그런
가 ㅋ) linux man 과 같은것을 만들어보자.
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일 월요일
44. Node.js 언어 구성
Python: Build Script
Javascript: API (native module)
cpp: core (v8)
c: opensource (libuv, libev, libeio, http_parser, zlib ...)
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일 월요일
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일 월요일
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일 월요일
70. Event Loop (Monitoring)
당신은 1년치의 이벤트를 달력에 등록하고 (epoll/
kqueue)
그것을 실행하는 사람은 당신 혼자일 수도 있고, 여러개
의 이벤트를 각각의 이벤트업체나 친구들에게 맡겨서 이
벤트를 진행시킬 수 있다.(libeio)
당신이 똑똑하고, 가정적이고, 실행계획능력이 뛰어난다
면, 이벤트 실행은 별거 아니다. (libev)
사실. 돈이 문제이기도 함.
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일 월요일
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일 월요일
93. javascript를 Native Module로... #1
very easy !!
lib/**.js 파일들의 기본취지
node.js programming
cpp module 을 API로 제공하기 위한 Wrapper
process.binding 으로 cpp 불러들임.
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일 월요일
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일 월요일