Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Node.js 시작하기

5,481 views

Published on

Node.js 시작하기

  • Be the first to comment

Node.js 시작하기

  1. 1. 쉽고 빠르게 시작하는 서버 사이드 어플리케이션 Node.js jaewan.huey.park@gmail.com
  2. 2. 목차 1. Node.js? 2. 역사 3. 어떻게 동작하는가? 4. npm 5. JavaScript 5. DEMO: Node.js 101, Express, socket.io 6. 정리 7. 참고자료 8. 질문과 답변 2 / 62
  3. 3. Node.js?
  4. 4. Node.js란? Platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. - 공식 홈페이지 설명 • Platform • Chrome's JavaScript runtime • event-driven • non-blocking I/O 4 / 62
  5. 5. Node.js란? • 서버 측에서 JavaScript를 활용한 플랫폼 • Chrome V8 JavaScript 엔진 사용 • event-driven • non-blocking I/O • node package manager • open-source • Linux, Windows, Mac OSX 지원 • 아직 beta: v0.12.5 5 / 62
  6. 6. Demo: Hello World!! https://github.com/HueyPark/Node.js-101/tree/master/HelloWorld
  7. 7. 역사
  8. 8. 역사 2009: Joyent의 지원을 받는 Ryan Dahl이 BDFL이 되어 Linux에 배포됨 BDFL(Benevolent Dictator for Life): open-source software 개발 리더, 창시자인 경우가 많음 예) GNU: Richard Matthew Stallman Linux: Linus Torvalds Python: Guido van Rossum 8 / 62
  9. 9. 역사 2011: open-source community에 의해 작성된 라이브러리를 배포하고 공유할 수 있는 node package manager 도입 package 수: 160,166개 저번 달 다운로드 수: 1,670,169,174번 - 2015.06.28. 기준 9 / 62
  10. 10. 역사 2011: Microsoft 와 Joyent가 협력하여 Windows에서 사용 가능한 버전의 Node.js를 구현함 10 / 62
  11. 11. 역사 2012: Ryan Dahl이 물러나고, 동료이자 npm 개발자인 Isaac Schlueter가 BDFL로 활동 2014: Timothy J. Fontaine 프로젝트의 새로운 리더로 활동 11 / 62
  12. 12. 12 / 62
  13. 13. 역사 2014: 노드JS 주요 개발자를 중심으로 Node Forward라는 기술위원회가 결성되고 독자기술인 io.js 발표 io.js는 BDFL 주도가 아닌 커뮤니티 주도 개발 회의과정을 공개, SNS로 내부 소식을 전파 https://www.youtube.com/channel/UC9Ug4jAzdP-T3ozwjpL9BYw 13 / 62
  14. 14. 역사 2015: Node.js와 io.js 커뮤니티가 Node.js로 통합될 것이라 발표 현재 최종 버전: Node.js 0.12.5, io.js 2.3.1 통합 저장소: https://github.com/nodejs/node 14 / 62
  15. 15. 어떻게 동작하는가?
  16. 16. event-driven • 마우스, 메시지, 혹은 다른 프로그램이나 스레드의 이벤트에 의해서 프로그램의 흐름이 결정되는 구조 • 일반적으로, 메인 루프가 이벤트를 수신하고, 개별이벤트 처리기를 호출해주는 방식 Event Queue Event Loop 16 / 62
  17. 17. non-blocking I/O • 작업이 완료되기 전에 다른 작업을 계속할 수 있는 I/O 처리방식 • 데이터베이스 작업 또는 통신을 시작한 후 I/O가 기다리지 않고 동작이 완료된 후에 작업을 진행 • 여전히 완료까지 대기하여야 하지만 동작에 의존성이 없는 다른 처리를 계속함 17 / 62
  18. 18. non-blocking I/O a b blocking I/O request response waiting a b non-blocking I/O request I/O complete notification 18 / 62
  19. 19. multi threded server 19 / 62
  20. 20. Node.js server 20 / 62
  21. 21. 왜? 많은 어플리케이션은 아래와 같은 코드를 가지고 있음 var result = db.query('select * from T'); //use result 쿼리가 실행될 때까지 어플리케이션은 무엇을 하고 있을까요? 21 / 62
  22. 22. 왜? 많은 어플리케이션은 아래와 같은 코드를 가지고 있음 var result = db.query('select * from T'); //use result 쿼리가 실행될 때까지 어플리케이션은 무엇을 하고 있을까요? 대부분 그냥 대기함 22 / 62
  23. 23. 왜? • 뿐만 아니라 Context switching에는 자원이 소모되고, 쓰레드는 메모리를 필요로 함 대규모의 동시 접속을 수용한다면, 모든 접속(connection)에 OS 쓰레드를 할당할 수 없음 23 / 62
  24. 24. 그래서! event-driven + non-blocking I/O 24 / 62
  25. 25. npm (node package manager)
  26. 26. npm (node package manager) JavaScript 개발자들이 code를 쉽게 공유하고 재사용하기 위한 package manger https://npmjs.org/ (2015.06.28. 기준) 26 / 62
  27. 27. 유용해 보이는 모듈들 • Express: 웹 프레임워크 • socket.io: 실시간 웹 엔진 • MongoDB, MySQL 등의 database driver • grunt: Task Runner, 빌드 툴 • TypeScript: JavaScript superset • twitter, Facebook 등의 연동 모듈 27 / 62
  28. 28. JavaScript
  29. 29. JavaScript C++ 프로그래머가 생각하는 JavaScript 특징
  30. 30. JavaScript C++ 프로그래머 내가 생각하는 JavaScript 특징
  31. 31. 내가 생각하는 JavaScript 특징 • duck typing • function as a first-class object • closure 31 / 62
  32. 32. duck typing "어떤 새가 오리처럼 걷고 수영하고 꽥꽥거리는 소리를 낸다면, 나는 그 새를 오리라고 할 것이다" 32 / 62
  33. 33. duck typing var number = 10; number = 'this is not number'; number = number + 7; 33 / 62
  34. 34. duck typing 34 / 62
  35. 35. function as a first-class object first-class object: 1960년 Christopher Strachey에 의해 소개된 개념 • 변수나 자료구조로 저장될 수 있음 • 서브루틴에 매개변수로 전달될 수 있음 • 서브루틴의 결과로 반환될 수 있음 35 / 62
  36. 36. closure • 컴퓨터 프로그래밍에서 독립된 변수를 참조하는 기능 • JavaScript에서는 함수가 환경변수를 참조함 36 / 62
  37. 37. closure function add(x) { return function(y) { return x + y; }; } 37 / 62
  38. 38. Demo: JavaScript https://github.com/HueyPark/Node.js-101/tree/master/JavaScript
  39. 39. Demo: JavaScript 1. duck typing 2. function as a first-class object, closure 39 / 62
  40. 40. Demo: Node.js 101 https://github.com/HueyPark/Node.js-101/tree/master/httpServer
  41. 41. DEMO: Node.js 101 1. default http server(app.js) 2. add server.js 3. add router.js 4. add requestHandlers.js 5. handler do everything, non-blocking I/O 41 / 62
  42. 42. Demo: Express https://github.com/HueyPark/Node.js-101/tree/master/Express
  43. 43. Express Fast, unopinionated, minimalist web framework for Node.js Node.js를 위한 빠르고, 고집없고, 깔끔한 web framework 43 / 62
  44. 44. 특징 • 강력한 라우팅 • 고성능 • 테스트 범위가 넓음 • HTTP 지원 (redirection, caching, ...) • 14개 이상의 View template engine • Content negotiation • 프로그램 실행이 빠름 44 / 62
  45. 45. DEMO: Express 1. install express-generator 2. create project 3. start 4. add users.POST() 45 / 62
  46. 46. Demo: socket.io https://github.com/HueyPark/Node.js-101/tree/master/chatServer
  47. 47. socket.io Featuring the fastest and most reliable real time engine 가장 빠르고 안전한 실시간 (클라이언트와 양방향 통신) 엔진 47 / 62
  48. 48. 특징 • Microsoft Office, Yammer, Zendesk, Trello에서 사용 • 지속적인 업데이트 중 • 엄청나게 강력하고, 쉽게 사용할 수 있음 48 / 62
  49. 49. DEMO: socket.io 1. install Express 2. install socket.io 3. add on 'connection', 'disconnect' 4. add on 'chat message' 5. http://52.68.210.207:9200/ 49 / 62
  50. 50. 정리
  51. 51. Node.js의 단점 • 기본적으로 single thread로 동작하여 CPU 의존성이 높은 경우 적합하지 않음 • callback이 중첩될 경우 지옥이 펼쳐짐 • JavaScript의 한계 51 / 62
  52. 52. 몇 가지 대안들 • callback이 중첩될 경우 지옥이 펼쳐짐?? • promise: ES6 표준에 포함된 새로운 문법, 비동기 JavaScript 코드 작성을 도와줌 http://www.ecma-international.org/ecma- 262/6.0/#sec-constructor-properties-of- the-global-object-promise 52 / 62
  53. 53. 몇 가지 대안들 JavaScript의 한계?? JavaScript Compiler!! 53 / 62
  54. 54. Node.js의 장점 event loop?? non-blocking I/O?? 54 / 62
  55. 55. Node.js의 장점 event loop?? non-blocking I/O?? 55 / 62
  56. 56. Node.js의 장점 JavaScript!! full stack 개발 가능 56 / 62
  57. 57. Node.js의 장점 node package manager 풍부한 생태계 (16만 모듈!!) 57 / 62
  58. 58. http://githut.info 58 / 62
  59. 59. 참고자료
  60. 60. 참고자료 • 공식 홈페이지: https://nodejs.org/ • Node.js 알아보기(Microsoft tech days mini 발표자료, 김명신): http://www.microsoftvirtualacademy.c om/training-courses/saturedaynoon- with-javascriptfriend 60 / 62
  61. 61. 참고자료 • The Node Beginner Book: http://www.nodebeginner.org/ • What Makes Node.js Faster Than Java?: https://strongloop.com/strongblog/no de-js-is-faster-than-java/ 61 / 62
  62. 62. 질문과 답변

×