Node module internal binding

2,735 views

Published on

  • Be the first to comment

Node module internal binding

  1. 1. 12년 6월 4일 월요일
  2. 2. Node.js Happy Hacking Node.js Black Edition & Module Internal Binding @nanhapark12년 6월 4일 월요일
  3. 3. 12년 6월 4일 월요일
  4. 4. About me12년 6월 4일 월요일
  5. 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.com12년 6월 4일 월요일
  6. 6. 12년 6월 4일 월요일
  7. 7. About Slides12년 6월 4일 월요일
  8. 8. About Slides Node.js Black Edition 프로젝트를 개인적으로 진 행하면서 느낀점들을 정리 $ node, 실행시 어떤 과정으로 실행되는지? Node Module이 어떤과정을 거쳐 사용자가 사용할 수 있게 되는지? npm을 통하지 않고, 원하는 Module을 빌드시점에 Native Module로 빌트인 방법은 어떻게 되는지?12년 6월 4일 월요일
  9. 9. 12년 6월 4일 월요일
  10. 10. Start Project Using Node.js12년 6월 4일 월요일
  11. 11. 냐 ? 거 아 미 친 Start Project Using Node.js12년 6월 4일 월요일
  12. 12. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 미 친 Start Project Using Node.js12년 6월 4일 월요일
  13. 13. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 팀장님에 미 친 게 이번 프로젝트 Node로 는 하겠습니 다. Start Project Using Node.js12년 6월 4일 월요일
  14. 14. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 팀장님에 미 친 게 이번 프로젝트 Node로 는 하겠습니 다. Start Project Using Node.js 내 가 총 대 를 매 보 자 .12년 6월 4일 월요일
  15. 15. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 팀장님에 미 친 게 이번 프로젝트 Node로 는 하겠습니 다. Start Project Using Node.js 내 가 총 대 를 매 보 후덜덜 자 .12년 6월 4일 월요일
  16. 16. 괜찮다. 이럴때 시작해보자 냐 ? 거 아 팀장님에 미 친 게 이번 프로젝트 Node로 는 하겠습니 다. Start Project Using Node.js 내 가 총 대 를 매 보 보자 후덜덜 자 가 되 . 서 최고 민 국에 대한12년 6월 4일 월요일
  17. 17. 12년 6월 4일 월요일
  18. 18. 한번 해볼까?! 고고고고12년 6월 4일 월요일
  19. 19. 한번 해볼까?! 고고고고 openapi 를 호출하여 무언가 해보자 작업시작 !! 유후~~ 재밌겠다. 음.. http native module이 있군. var http = require(‘http’); 그 다음.. createClient, request, parameters, callbacks..... wow! 아주 구현하기 어렵다. What Fu*k !!12년 6월 4일 월요일
  20. 20. 한번 해볼까?! 고고고고 openapi 를 호출하여 무언가 해보자 작업시작 !! 유후~~ 재밌겠다. 음.. http native module이 있군. var http = require(‘http’); 그 다음.. createClient, request, parameters, callbacks..... wow! 아주 구현하기 어렵다. What Fu*k !!12년 6월 4일 월요일
  21. 21. 한번 해볼까?! 고고고고 openapi 를 호출하여 무언가 해보자 작업시작 !! 유후~~ 재밌겠다. 음.. http native module이 있군. var http = require(‘http’); 그 다음.. createClient, request, parameters, callbacks..... wow! 아주 구현하기 어렵다. What Fu*k !!12년 6월 4일 월요일
  22. 22. 12년 6월 4일 월요일
  23. 23. Node.js 실무작업 목록12년 6월 4일 월요일
  24. 24. Node.js 실무작업 목록 Jabber (Erlang) 채팅서버를 Node.js 으로 작업 OAuth, Socket.io HAProxy, Stunnel, Redis 현재 클라우드빌드 프로젝트 Node.js 으로 작업중 API 서버 쉘스크립트 기타 개인적인 홈페이지 nodeqa, naggomsu12년 6월 4일 월요일
  25. 25. 12년 6월 4일 월요일
  26. 26. 작업 과정에서 느꼈던 아쉬운 점들12년 6월 4일 월요일
  27. 27. 작업 과정에서 느꼈던 아쉬운 점들 TIP 공유 커뮤니티 부족 인터페이스 수준의 API 제공 제공되는 API를 사용하여 작업하기 어렵다. 원하는 결과를 얻기 위해 적지 않은 코딩을 해야한다. 해결방법 신들린 구글링 -> 시간소요 ;; project deadline ....;; 3rd party module name을 알아야 하고, github 소스 를 분석 / 삽질 시작12년 6월 4일 월요일
  28. 28. 12년 6월 4일 월요일
  29. 29. 3rd party module keyword 중요성 증대12년 6월 4일 월요일
  30. 30. 3rd party module keyword 중요성 증대 제공되는 API를 이용하여 1개의 API호출/응답 관련 작 업하는데 소비하는 비용이 너무 크다. restler or request 라는 모듈 키워드만 알고 있어도 확 실한 도움이 될 것이다. 키워드를 알아도 사용방법을 브라우져를 열고 검색해 서 알아내야 하고, 대중적인 사용방법 또한 익혀야 한 다. 터미널 스타일 개발자는 검색이 불편하다. (나만 그런 가 ㅋ) linux man 과 같은것을 만들어보자.12년 6월 4일 월요일
  31. 31. 12년 6월 4일 월요일
  32. 32. 3rd party module 찾아서...12년 6월 4일 월요일
  33. 33. 3rd party module 찾아서...12년 6월 4일 월요일
  34. 34. 3rd party module 찾아서...12년 6월 4일 월요일
  35. 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. 36. 12년 6월 4일 월요일
  37. 37. Node.js Black Edition Project Start12년 6월 4일 월요일
  38. 38. 12년 6월 4일 월요일
  39. 39. To-Do12년 6월 4일 월요일
  40. 40. To-Do 유용하고 검증된 3rd party module을 Native Module 으로 컴파일하자. 대중성 있는 Module이 무엇일까? Most Depend on, http://search.npmjs.org/ 실무에서 진행중인 프로젝트에 적용해보자 역시 실무빨을 받아야 뭔가 남는다. 약 20개 Native Module 작업완료12년 6월 4일 월요일
  41. 41. To-Do 유용하고 검증된 3rd party module을 Native Module 으로 컴파일하자. 대중성 있는 Module이 무엇일까? Most Depend on, http://search.npmjs.org/ 실무에서 진행중인 프로젝트에 적용해보자 역시 실무빨을 받아야 뭔가 남는다. 약 20개 Native Module 작업완료12년 6월 4일 월요일
  42. 42. 12년 6월 4일 월요일
  43. 43. Node.js 언어 구성12년 6월 4일 월요일
  44. 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. 45. 12년 6월 4일 월요일
  46. 46. v8 util JS2C12년 6월 4일 월요일
  47. 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/1412년 6월 4일 월요일
  48. 48. 12년 6월 4일 월요일
  49. 49. JS2C Live Coding12년 6월 4일 월요일
  50. 50. 12년 6월 4일 월요일
  51. 51. Native Module 장점12년 6월 4일 월요일
  52. 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. 53. 12년 6월 4일 월요일
  54. 54. 12년 6월 4일 월요일
  55. 55. Nodeman (Node.js Manual)12년 6월 4일 월요일
  56. 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. 57. 12년 6월 4일 월요일
  58. 58. Nodeman Live Coding12년 6월 4일 월요일
  59. 59. 12년 6월 4일 월요일
  60. 60. Node.js Fun Arch.12년 6월 4일 월요일
  61. 61. 12년 6월 4일 월요일
  62. 62. Event Driven12년 6월 4일 월요일
  63. 63. Event Driven12년 6월 4일 월요일
  64. 64. Event Driven12년 6월 4일 월요일
  65. 65. Event Driven12년 6월 4일 월요일
  66. 66. Event Driven 인생은 이벤트의 연속이다. 휴;;12년 6월 4일 월요일
  67. 67. 12년 6월 4일 월요일
  68. 68. Event Loop (Monitoring)12년 6월 4일 월요일
  69. 69. Event Loop (Monitoring)12년 6월 4일 월요일
  70. 70. Event Loop (Monitoring) 당신은 1년치의 이벤트를 달력에 등록하고 (epoll/ kqueue) 그것을 실행하는 사람은 당신 혼자일 수도 있고, 여러개 의 이벤트를 각각의 이벤트업체나 친구들에게 맡겨서 이 벤트를 진행시킬 수 있다.(libeio) 당신이 똑똑하고, 가정적이고, 실행계획능력이 뛰어난다 면, 이벤트 실행은 별거 아니다. (libev) 사실. 돈이 문제이기도 함.12년 6월 4일 월요일
  71. 71. 12년 6월 4일 월요일
  72. 72. 단일쓰레드 ? No. 메인쓰레드만 단일 !12년 6월 4일 월요일
  73. 73. 단일쓰레드 ? No. 메인쓰레드만 단일 ! I/O 처리 libeio12년 6월 4일 월요일
  74. 74. 단일쓰레드 ? No. 메인쓰레드만 단일 ! 메인쓰레드만 메인쓰레드의 I/O 처리 단일쓰레드 V8 libeio file I/O max polling (google chrome) count 1012년 6월 4일 월요일
  75. 75. 12년 6월 4일 월요일
  76. 76. Architecture & I/O Flow (libeio)12년 6월 4일 월요일
  77. 77. Architecture & I/O Flow (libeio)12년 6월 4일 월요일
  78. 78. Architecture & I/O Flow (libeio) http://nodeqa.com/nodejs_ref/612년 6월 4일 월요일
  79. 79. Architecture & I/O Flow (libeio) http://nodeqa.com/nodejs_ref/612년 6월 4일 월요일
  80. 80. Architecture & I/O Flow (libeio) http://nodeqa.com/nodejs_ref/612년 6월 4일 월요일
  81. 81. 12년 6월 4일 월요일
  82. 82. Module Internal Binding12년 6월 4일 월요일
  83. 83. 12년 6월 4일 월요일
  84. 84. 최초 Node 실행시 프롬프트 뜨기 전까지...12년 6월 4일 월요일
  85. 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 start12년 6월 4일 월요일
  86. 86. 12년 6월 4일 월요일
  87. 87. process.binding()12년 6월 4일 월요일
  88. 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. 89. 12년 6월 4일 월요일
  90. 90. Make Native Module (DIY)12년 6월 4일 월요일
  91. 91. 12년 6월 4일 월요일
  92. 92. javascript를 Native Module로... #112년 6월 4일 월요일
  93. 93. javascript를 Native Module로... #1 very easy !! lib/**.js 파일들의 기본취지 node.js programming cpp module 을 API로 제공하기 위한 Wrapper process.binding 으로 cpp 불러들임.12년 6월 4일 월요일
  94. 94. 12년 6월 4일 월요일
  95. 95. javascript를 Native Module로... #212년 6월 4일 월요일
  96. 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 install12년 6월 4일 월요일
  97. 97. 12년 6월 4일 월요일
  98. 98. cpp를 native module로 만들어보자.12년 6월 4일 월요일
  99. 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 install12년 6월 4일 월요일
  100. 100. 12년 6월 4일 월요일
  101. 101. Native Module Live Coding12년 6월 4일 월요일
  102. 102. 12년 6월 4일 월요일
  103. 103. 끝. 감사합니다.12년 6월 4일 월요일

×