블로그 이미지
윤영식
Frontend Application Architecter, Full Stacker, KnowHow Dispenser and Bike Rider

Publication

Statistics Graph

Recent Comment

완벽한 자바스크립트 아키텍쳐는 어떻게 구성되는지를 NodeJS, Google Chrome Extention, MongoDB를 통하여 알아보자


1) 역할

  - NodeJS : 서버 측면, 실시간 연결을 장시간 유지하기 위하여 Socket.io 사용한다

  - Google Chrome Extention : 클라이언트 측면, WebSocket, Notification과 Local Storage가 사용된다

  - MongoDB : 데이터를 저장한다 



2) 아키텍쳐

  - 트윗을 추적하여 실시간으로 클라이언트에게 브로드케스팅 한다

  - 클라이언트 "What's Next"는 Google Chrom browser extension 이다 (크롬 애플리케이션)

  - HTML5의 기능을 사용한다 

  - MongoDB에 트윗 내역을 저장하고 이벤트가 끝나면 통계를 생성한다 

  


3) Node 아키텍쳐

  - V8 JavaScrpt engine 기반의 서버사이드 애플리케이션 개발을 위한 오픈소스 툴킷이다 

  - Node 기반 API는 CommonJS 모듈 시스템을 사용하여 확장한다

  - 2009년 2월 라이언 일병 (Ryan Dahl)이 만들었고, Python의 Twisted나 Ruby의 EventMachine과 유사하다 

  - Joyent에서 no.de Node.js 호스팅 준비하면 진행하고 있다


      



4) Node의 목적

  - 쉽고 안전한 방법으로 고성능이며 확장가능한 네트워크 프로그램을 JavaScript로 만드는 것이 목적이다 

  - 목적을 위하여 취한 아키텍쳐 

    + Single Threaded : Apache 처럼 각 요청마다 thread를 띄우지 않는다

       > 단일 스레드를 사용함으로 CPU context switching일 피할 수 있다

       > 메모리상에 대량의 실행 컨텍스트를(Execution Context) 두지 않아도 된다

    + Event Loop : Marc Lehman 씨가 libev 라이브러를 C++로 작성한 것을 이용함

       > 이벤트 루프는 확장가능한 이벤트 알림 메커니즘(scalable event notification)을 위하여 epool 또는 kqueue를 사용한다 

    + Noe blocking I/O : Marc lehmann 씨가 libeio 라이브러를 작성한 것을 이용함 

       > input 또는 output response에 대해서 (예로 database, file system, web service등) 기다리면서 CPU time losss를 피한다

    

  - 위 특징들로 인해 Node는 thread에 자유로우면서 대량의 트래픽을 처리할 수 있게 한다 

  - 대부분의 프로토콜에(TCP, DNS, HTTP) 대해서 이미 내장되어 지원한다

  - 모든 I/O 관련 function 수행은 callback을 사용해야 한다 

  - Event Driven 언어인 JavaScript는 Node의 'Event Loop' 방식 개발에 적합하고, 익명함수/클로져 같은 자바스크립강점을 이용

  - 참조 PDF

  - GitHub에서 가장 인기있는 OSS 목록

  - 설치는 사이트에서 다운로드 또는 http://nodejs.org/dist 목록 파일 버전을 선택에서 wget등 여러 방법으로 설치함 



5) Node 서버 만들기 

  - Node 단순 서버 만들기


  - Socket.io 단순 서버 만들기


  - http server에 socket.io 모듈을 붙여서 기능을 첨부하는 것이다. 

    + a = b  대입연산의 변환  b(a) funcational로 표현됨 (functional lanuage는 assignment 즉, 대입문이 필요없다

    + 대입문이 없으므로 대입변수를(variable) 메모리에 생성할 필요가 없이 function이 state를 안가진다. (참조)

  - http.createSever()에서 callback function을 제거했으므로 client 요청에 대한 처리를 하지 않고

     대신 이벤트가 발생하면 데이터를 바로 push 한다

  - socket.io에 callback을 넣으면 클라이언트 요청을 처리한다 

var socket = io.listen(server, function(client) { ... new client connection ... } );



6) 트위터 추적 모듈 만들기

  - Twitter Streaming API를 사용해서 "What's Next" 이벤트 틔윗을 받는다

  - API는 설정 메션에 대한 모든 트윗을 전달해 준다 

  - Twitter API 연결 -> 새로운 트윗 발견시 매번 이벤트 발생을 모듈로 만든다 


7) 트위터 추적하기 

  - Basic Authorization을 사용모듈


8) Twitter OAuth 설정하기 

  - 원문의 Basic Authorization을 사용하지 않고(2010.8.31 종료됨) OAuth를 사용한다

  - OAuth 모듈을 설치한다 

$ npm install oauth

npm http GET https://registry.npmjs.org/oauth

npm http 200 https://registry.npmjs.org/oauth

npm http GET https://registry.npmjs.org/oauth/-/oauth-0.9.8.tgz

npm http 200 https://registry.npmjs.org/oauth/-/oauth-0.9.8.tgz

oauth@0.9.8 node_modules\oauth

  - https://dev.twitter.com/ 에 로그인하여서 Consumer Key, Request Token, Access Token을 만든다

  - OAuth를 적용한 코드를 다시 만들어 보자 (실천과제)



<참조>

  - 원문 : A Full Javascript Architecture, Part One - NodeJS

  - Twitter OAuth 설명글

  - Node.js + Express로 Twitter 보기

  - Twitter OAuth with node-oauth for node.js+express


저작자 표시 비영리 변경 금지
신고
posted by peter yun 윤영식