완벽한 자바스크립트 아키텍쳐는 어떻게 구성되는지를 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
- 설치는 사이트에서 다운로드 또는 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
- Node.js + Express로 Twitter 보기
- Twitter OAuth with node-oauth for node.js+express
'Lean Agile Culture > Architecturing' 카테고리의 다른 글
[Design Pattern] Mediator Pattern 연구 (0) | 2013.03.25 |
---|---|
[기술셋] Backbone.js Node.js MongoDB를 이용한 Web Application 개발 (0) | 2013.01.31 |
[아키테쳐링] Netflix SlideShare (0) | 2012.12.10 |
[아키텍쳐링] Evernote SlideShare (0) | 2012.12.10 |
대용량 아키텍쳐 설계 엔지니어 되기 (0) | 2012.11.20 |