SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Node.js 웹어플리케이션 아키텍처 
구축에 관련한 연구 
이트라이브 STG 정병헌 대리 
세 번째 이야기
무엇을 해 나아갈 것인가?! 
1. Node.js 알아보자! 
2. Node.js 로 만들어보자! 
1. 맛을 보면 압니다! 
2. 알기 위해 맛을 봐야지! 
3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 
4. …. 
3. Node.js 로 구축해보자! 
4. Node.js 로 적용해보자! 
• 웹개발을 하기 위해서 web application structure 를 한번 살짝 다듬어 보기로 합시다요. 
• 우리의 목적을 잃어버리지 않기 위해서 조금만 더 발을 딛여 나아가보도록 하죠..
2. Node.js 로 만들어보자!
3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 
지난번까지 해서 작성된 server.js 이구요… 
여전히 우리의 server 는 이벤트!가 발생될때 request, response 라는 Object!!를 인자로 받는 onRequest() 라는 아주 맛깔나는(?) 
callback 함수를 열심히 비동기로 호출하면서 밥벌이를 하고 있습니다. 
var http = require("http"); 
function onRequest(request, response){ 
response.writeHead(200, {"Content-Type": "text/plain"}); 
response.write("Hello World"); 
response.end(); 
} 
var server = http.createServer(onRequest); 
server.listen(8888); 
근데 맨 위에 “http” 라는 녀석의 정체를 뜬금없이 한 번 알아보고 넘어가 봐야할듯요;;; 
뭘까요? 우리가 깔아놓은 Node.js 의 내부 모듈이랍니다. 이미 사용하도록 작성 되어 있네요. 
네.. 쩜(.) 찍어서 만들어져 있는 메소드 “createServer()” 를 잘 쓰고 있어요. 
멋들어진 구조의 app를 만들기 위해 저는 이 server.js 가 하고 있는 비즈니스를 또 하나의 모듈로 만들겠습니다. 
(비즈니스.. 쉽게 말하면 http 서버를 여는 비즈니스를 하고 있지요?) 
server 라는 모듈에 “서버여요청에응답을시작하라!()”라는 메소드를 만들어서 쩜 찍어서 불러와 쓰겠습니다.
3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 
멋들어지게 부드럽게 감싸 줄꺼에요..(살살) 
var http = require("http"); 
function start() { 
function onRequest(request, response){ 
response.writeHead(200, {"Content-Type": "text/plain"}); 
response.write("Hello World"); 
response.end(); 
} 
var server = http.createServer(onRequest); 
server.listen(8888); 
console.log("Server has started."); 
} 
exports.start = start; 
start() 라는 이름의 함수로 한번 감싸줬습니다. 
그리고 나서 exports.start = start; 
뭔가를 꼭 내보내는 듯한 느낌의 코드를 하나 남겼어요. 
저렇게 씀으로써 우린 이런 짓거리를 할 수 있게 됩니다. 
바로…
3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 
짠~ 이렇게요… ㅇㅅㅇv 
index.js 라는 이름의 뭔가 새로운 구조적인 모듈을 하나 생성하기를… 
var server = require(“./server"); 
server.start(); 
Node.js 의 기본 내장 모듈이 아니더라도 이렇게 만들어서 쓰면 그만~인 거죠;;; 
이제 서버 시작 시킬때 “node index.js” 하면 그 전과 똑같은 걸 확인 할 수 있죠.. 
(생~~~략!!!) 
자!!! 이 만큼(아주 기초적이지만..) 어떤 구조를 쪼개고, 분리하고, 따로 빼고(다 같은말이잖소?!!) 하는 방법을 알아놨으면… 
이제 우리가 웹으로 수행해야 할!!, 우리가 만들어야 할 테스크, 비즈니스, 뭔가 로직…(왜 그러는데?!!)에 대하여 한 번 생각해봅시다. 
일 하나만 할 것 아니죠? 
웹페이지 하나만 딸랑~ 띄울 거 아니죠? 
 Web app 는 여러가지 요청(http request)을 받아서 알맞게 처리를 하죠… 
 클라이언트는 이 여러가지 요청을 기본적으로 web app 서버에 URL 로 던지죠… 
“다른 HTTP 요청이 코드의 다른 부분을 가리키도록 하는 
것을 “라우팅(routing)” 이라고 합니다. ” 
이렇게 얘기하고 있습니다. (구뤠.. 그렇다능.. 그렇다면…)
3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 
그렇다면 클라이언트가 요청한 URL을 뭔가로 구분을 해야 각각의 요청에 맞는 비즈니스를 할 수 있겠죠. 
그렇게 routing 을 하기 위한 뭔가를 만들어줘야 할텐데… 
위대하신 Node 의 신께서, 말 그대로 “url”이라는 이름의 내장 모듈을 내려 주셨으니… 
server.js 를 잠깐 다시 열어서 url 판별 코드를 심어보겠습니다. 
var http = require("http"); 
var url = require("url"); //내장 모듈 url을 쓰기위해 require 했습니다. 
function start() { 
function onRequest(request, response){ 
var pathname = url.parse(request.url).pathname; //이러한 method, attribute 등을 제공하네요.. 
console.log("Request for " + pathname + " received."); 
response.writeHead(200, {"Content-Type": "text/plain"}); 
response.write("Hello World"); 
response.end(); 
} 
var server = http.createServer(onRequest); 
server.listen(8888); 
console.log("Server has started."); 
} 
exports.start = start; 
url 모듈의 parse() 메소드와 pathname 속성 값으로 request 의 url 정보를 콘솔로 찍는 코드를 심어놨습니다. 
파라미터 request 객체도 당연하듯이 url 이라는 속성을 가지고 있군요. 
확인사살 해보실 분들은 브라우저에 “http://localhost:8888/아무거나다르게” 어러번 때러보시고....
3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 
이제 URL 판별 능력을 갖춘 서버 모듈이 만들어져 있으니… 
URL 에 따라 다른 비즈니스를 하도록 엮어줘야 할텐데… 라우팅.. 라우팅 해야할텐데… 
뭔가 아까 판별해서 나온 url pathname 값을 파라미터로 받아서 값에 따라 지지고 볶는 function 하나 만들면 되지 않을까요? 
 네~ 됩니다 고갱님!! 기왕이면 알흠다운 스트뤜춰~~를 위해서 “route.js” 라는 이름의 모듈을 생성해보십시오~ 
function route(pathname) { 
console.log("About to route a request for " + pathname); //하라는 비즈니스는 안하고 이런 거나 하고 있다;; 
} 
exports.route = route; 
url 판별코드는 server 에다 만들어 놓았는데.. 이걸 이 라우팅 모듈과 어떻게 엮어줄까요? 
일단 server 모듈에서 이 route() 함수를 불러야 할텐데… 
http 요청인 브라우저에 url 때림! 이라는 이벤트가 발생하면 저 위 뭐 같지도 않은 비즈니스를 하는 route() 를 호출하도록 만들면 되는 
것이지요? 어디에다가? 
이미 만들었잖아요.. server.start()  이 넘 속에서 url 뽑아오고 있잖아요.. (오늘 말장난이 좀 실속 없이 심한데?;;)
3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 
var http = require("http"); 
var url = require("url"); 
function start(route) { 
function onRequest(request, response){ 
var pathname = url.parse(request.url).pathname; 
console.log("Request for " + pathname + " received."); 
route(pathname); 
response.writeHead(200, {"Content-Type": "text/plain"}); 
response.write("Hello World"); 
response.end(); 
} 
var server = http.createServer(onRequest); 
server.listen(8888); 
console.log("Server has started."); 
} 
exports.start = start; 
자 route 함수(함수에요!!) 를 파라미터로 받아먹는 server.start() 메소드가 다시 만들어졌습니다. 
server.start() 메소드는 우리 index 양께서 호출하도록 만들었었죠… 
그럼 index 양에게 server 군과 데이트 할려고 부를 때 route 함수를 챙겨 가라고 전해줘야겠어요..
3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 
var server = require("./server"); 
var router = require("./router"); //router 모듈을 쓰겠thㅓ!! 
server.start(router.route); 
실행을 한번 해봅시다. (드디어 오늘 처음 콘솔 뜸 ㅋㅋ) 
브라우저에 때리는 url 에 따라 다른 비즈니 
스를 처리하게 되었습니다. 
(여기서는 url 자체를 걍 찍고 말지만…) 
지나가는 얘긴데 저번에도 살짝 찾아보라고 
만 했지만.. 자꾸 favicon 을 찾을려는 불가침 
의 습성 때문에 좀.. 거슬리긴 해요;;;
3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 
좌아~~ 이번 시간에는 
Web app 를 구축하겠다는 굳은 의지를 상실해가지 않도록 
node 모듈모듈모듈~~ 들의 구조화 얘기 쪼끔, 
우리가 만들어야 할 비즈니스!!! 구현에 대한 접근을 시작해보았습니다. 
뭔가 js 파일이 막 요레요레 늘어나고 분리되고 “ㅇ ㅏ~~ 뭔가 만드는 것 같다 ㅋㅋㅋ” 하는 기쁨보다는 
드..드…드디어 비즈니스에 대한 얘기를 꺼내게 된 것에 더욱 스스로 의미를 두고 싶습니다. 
다음 시간에는 이 죽일놈에 비즈니스를 좀 더 철저히 관리할 필요성에 대해서 얘기해보는 걸로 약속드리면서… 
달려갑니다!! 이상한 node 의 세계로… 
갑니다!! 혼자라면… 혼자 갑니다!! ( 흥~! ㄷ ㅏ 필요벗ㅇㅂ엉~!!) 
To be 게솎!

Weitere ähnliche Inhalte

Was ist angesagt?

Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
Html5 web workers
Html5 web workersHtml5 web workers
Html5 web workersWoo Jin Kim
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료shanka2
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 YoungSu Son
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs근호 최
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Gitaek kwon
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST APIWooyoung Ko
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기은아 정
 
Node.js 현재와 미래
Node.js 현재와 미래Node.js 현재와 미래
Node.js 현재와 미래JeongHun Byeon
 
AWS EC2 flask_uwsgi_nginx install guide korean
AWS EC2 flask_uwsgi_nginx install guide koreanAWS EC2 flask_uwsgi_nginx install guide korean
AWS EC2 flask_uwsgi_nginx install guide koreanJinsoo Park
 
Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기JeongHun Byeon
 
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치Juneyoung Oh
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용Jin wook
 

Was ist angesagt? (20)

Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
Node.js 기본과정
Node.js 기본과정Node.js 기본과정
Node.js 기본과정
 
Html5 web workers
Html5 web workersHtml5 web workers
Html5 web workers
 
Node.js 첫걸음
Node.js 첫걸음Node.js 첫걸음
Node.js 첫걸음
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
Nodejs 발표자료
Nodejs 발표자료Nodejs 발표자료
Nodejs 발표자료
 
[NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기 [NEXT] Flask 로 Restful API 서버 만들기
[NEXT] Flask 로 Restful API 서버 만들기
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs
 
Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교Rb vs wp 로드타임 성능비교
Rb vs wp 로드타임 성능비교
 
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
리스펙토링 세미나 - 웹 브라우저 동작 개념, Node.js를 통한 서버 이해, REST API
 
안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기안드로이드 DB, 서버 연동하기
안드로이드 DB, 서버 연동하기
 
Node.js 현재와 미래
Node.js 현재와 미래Node.js 현재와 미래
Node.js 현재와 미래
 
AWS EC2 flask_uwsgi_nginx install guide korean
AWS EC2 flask_uwsgi_nginx install guide koreanAWS EC2 flask_uwsgi_nginx install guide korean
AWS EC2 flask_uwsgi_nginx install guide korean
 
Express 프레임워크
Express 프레임워크Express 프레임워크
Express 프레임워크
 
Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기Node.js 자바스크립트로 서버사이드 개발하기
Node.js 자바스크립트로 서버사이드 개발하기
 
플라스크 템플릿
플라스크 템플릿플라스크 템플릿
플라스크 템플릿
 
휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치휴봇-슬랙 OSX 설치
휴봇-슬랙 OSX 설치
 
Node.js의 도입과 활용
Node.js의 도입과 활용Node.js의 도입과 활용
Node.js의 도입과 활용
 
Javascript 101
Javascript 101Javascript 101
Javascript 101
 
Meteor IoT
Meteor IoTMeteor IoT
Meteor IoT
 

Andere mochten auch

Apache tomcat 로드밸런싱 김태호-20140808
Apache tomcat 로드밸런싱 김태호-20140808Apache tomcat 로드밸런싱 김태호-20140808
Apache tomcat 로드밸런싱 김태호-20140808Taeho Kim
 
리눅스에 대하여
리눅스에 대하여리눅스에 대하여
리눅스에 대하여ETRIBE_STG
 
Android version
Android version Android version
Android version ETRIBE_STG
 
머큐리얼저장소추가 사용자추가 권한추가
머큐리얼저장소추가 사용자추가 권한추가머큐리얼저장소추가 사용자추가 권한추가
머큐리얼저장소추가 사용자추가 권한추가ETRIBE_STG
 
Wix - 웹 홈페이지 제작
Wix - 웹 홈페이지 제작Wix - 웹 홈페이지 제작
Wix - 웹 홈페이지 제작ETRIBE_STG
 
구글맵 JavaScript API
구글맵 JavaScript API구글맵 JavaScript API
구글맵 JavaScript APIETRIBE_STG
 
모바일에서 Ble pxp
모바일에서 Ble pxp모바일에서 Ble pxp
모바일에서 Ble pxpETRIBE_STG
 
Spring Security
Spring SecuritySpring Security
Spring SecurityETRIBE_STG
 
데이터베이스 시스템 chapter2_STG박하은
데이터베이스 시스템 chapter2_STG박하은데이터베이스 시스템 chapter2_STG박하은
데이터베이스 시스템 chapter2_STG박하은ETRIBE_STG
 
데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은ETRIBE_STG
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 
Amazon web service simple diagram overview
Amazon web service simple diagram overviewAmazon web service simple diagram overview
Amazon web service simple diagram overviewJuyeon Yu
 

Andere mochten auch (15)

Apache tomcat 로드밸런싱 김태호-20140808
Apache tomcat 로드밸런싱 김태호-20140808Apache tomcat 로드밸런싱 김태호-20140808
Apache tomcat 로드밸런싱 김태호-20140808
 
Objc literals
Objc literalsObjc literals
Objc literals
 
리눅스에 대하여
리눅스에 대하여리눅스에 대하여
리눅스에 대하여
 
Android version
Android version Android version
Android version
 
머큐리얼저장소추가 사용자추가 권한추가
머큐리얼저장소추가 사용자추가 권한추가머큐리얼저장소추가 사용자추가 권한추가
머큐리얼저장소추가 사용자추가 권한추가
 
Swing browser
Swing browserSwing browser
Swing browser
 
Wix - 웹 홈페이지 제작
Wix - 웹 홈페이지 제작Wix - 웹 홈페이지 제작
Wix - 웹 홈페이지 제작
 
구글맵 JavaScript API
구글맵 JavaScript API구글맵 JavaScript API
구글맵 JavaScript API
 
모바일에서 Ble pxp
모바일에서 Ble pxp모바일에서 Ble pxp
모바일에서 Ble pxp
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
데이터베이스 시스템 chapter2_STG박하은
데이터베이스 시스템 chapter2_STG박하은데이터베이스 시스템 chapter2_STG박하은
데이터베이스 시스템 chapter2_STG박하은
 
데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은데이터베이스 시스템 chapter1_STG박하은
데이터베이스 시스템 chapter1_STG박하은
 
AWS
AWSAWS
AWS
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
Amazon web service simple diagram overview
Amazon web service simple diagram overviewAmazon web service simple diagram overview
Amazon web service simple diagram overview
 

Ähnlich wie Node js[stg]onimusha 20140822

Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial우림 류
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기성일 한
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)beom kyun choi
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Testbeom kyun choi
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http RequestNAVER D2
 
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨sys4u
 
Node js[stg]onimusha 20140725
Node js[stg]onimusha 20140725Node js[stg]onimusha 20140725
Node js[stg]onimusha 20140725병헌 정
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기Seong Won Mun
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발SangHoon Han
 
Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storageJinKyoungHeo
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XpressEngine
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기John Kim
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Jay Park
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable FunctionsJongin Lee
 

Ähnlich wie Node js[stg]onimusha 20140822 (20)

Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기
 
Html5 performance
Html5 performanceHtml5 performance
Html5 performance
 
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
 
4-2. ajax
4-2. ajax4-2. ajax
4-2. ajax
 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
 
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 TestOkjsp 13주년 발표자료: 생존 프로그래밍 Test
Okjsp 13주년 발표자료: 생존 프로그래밍 Test
 
One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
 
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
 
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
JQuery를 이용하여 웹 위젯 작성하기_(주)시스포유아이앤씨
 
Node js[stg]onimusha 20140725
Node js[stg]onimusha 20140725Node js[stg]onimusha 20140725
Node js[stg]onimusha 20140725
 
.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기.NET에서 비동기 프로그래밍 배우기
.NET에서 비동기 프로그래밍 배우기
 
ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발ASP.NET Web API를 활용한 RESTful 서비스 개발
ASP.NET Web API를 활용한 RESTful 서비스 개발
 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
 
5-4. html5 offline and storage
5-4. html5 offline and storage5-4. html5 offline and storage
5-4. html5 offline and storage
 
Nodejs express
Nodejs expressNodejs express
Nodejs express
 
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
 
vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기vert.x 를 활용한 분산서버 개발하기
vert.x 를 활용한 분산서버 개발하기
 
Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발Mean 스택을 사용한 IoT 개발
Mean 스택을 사용한 IoT 개발
 
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
 

Node js[stg]onimusha 20140822

  • 1. Node.js 웹어플리케이션 아키텍처 구축에 관련한 연구 이트라이브 STG 정병헌 대리 세 번째 이야기
  • 2. 무엇을 해 나아갈 것인가?! 1. Node.js 알아보자! 2. Node.js 로 만들어보자! 1. 맛을 보면 압니다! 2. 알기 위해 맛을 봐야지! 3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 4. …. 3. Node.js 로 구축해보자! 4. Node.js 로 적용해보자! • 웹개발을 하기 위해서 web application structure 를 한번 살짝 다듬어 보기로 합시다요. • 우리의 목적을 잃어버리지 않기 위해서 조금만 더 발을 딛여 나아가보도록 하죠..
  • 3. 2. Node.js 로 만들어보자!
  • 4. 3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 지난번까지 해서 작성된 server.js 이구요… 여전히 우리의 server 는 이벤트!가 발생될때 request, response 라는 Object!!를 인자로 받는 onRequest() 라는 아주 맛깔나는(?) callback 함수를 열심히 비동기로 호출하면서 밥벌이를 하고 있습니다. var http = require("http"); function onRequest(request, response){ response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } var server = http.createServer(onRequest); server.listen(8888); 근데 맨 위에 “http” 라는 녀석의 정체를 뜬금없이 한 번 알아보고 넘어가 봐야할듯요;;; 뭘까요? 우리가 깔아놓은 Node.js 의 내부 모듈이랍니다. 이미 사용하도록 작성 되어 있네요. 네.. 쩜(.) 찍어서 만들어져 있는 메소드 “createServer()” 를 잘 쓰고 있어요. 멋들어진 구조의 app를 만들기 위해 저는 이 server.js 가 하고 있는 비즈니스를 또 하나의 모듈로 만들겠습니다. (비즈니스.. 쉽게 말하면 http 서버를 여는 비즈니스를 하고 있지요?) server 라는 모듈에 “서버여요청에응답을시작하라!()”라는 메소드를 만들어서 쩜 찍어서 불러와 쓰겠습니다.
  • 5. 3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 멋들어지게 부드럽게 감싸 줄꺼에요..(살살) var http = require("http"); function start() { function onRequest(request, response){ response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } var server = http.createServer(onRequest); server.listen(8888); console.log("Server has started."); } exports.start = start; start() 라는 이름의 함수로 한번 감싸줬습니다. 그리고 나서 exports.start = start; 뭔가를 꼭 내보내는 듯한 느낌의 코드를 하나 남겼어요. 저렇게 씀으로써 우린 이런 짓거리를 할 수 있게 됩니다. 바로…
  • 6. 3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 짠~ 이렇게요… ㅇㅅㅇv index.js 라는 이름의 뭔가 새로운 구조적인 모듈을 하나 생성하기를… var server = require(“./server"); server.start(); Node.js 의 기본 내장 모듈이 아니더라도 이렇게 만들어서 쓰면 그만~인 거죠;;; 이제 서버 시작 시킬때 “node index.js” 하면 그 전과 똑같은 걸 확인 할 수 있죠.. (생~~~략!!!) 자!!! 이 만큼(아주 기초적이지만..) 어떤 구조를 쪼개고, 분리하고, 따로 빼고(다 같은말이잖소?!!) 하는 방법을 알아놨으면… 이제 우리가 웹으로 수행해야 할!!, 우리가 만들어야 할 테스크, 비즈니스, 뭔가 로직…(왜 그러는데?!!)에 대하여 한 번 생각해봅시다. 일 하나만 할 것 아니죠? 웹페이지 하나만 딸랑~ 띄울 거 아니죠?  Web app 는 여러가지 요청(http request)을 받아서 알맞게 처리를 하죠…  클라이언트는 이 여러가지 요청을 기본적으로 web app 서버에 URL 로 던지죠… “다른 HTTP 요청이 코드의 다른 부분을 가리키도록 하는 것을 “라우팅(routing)” 이라고 합니다. ” 이렇게 얘기하고 있습니다. (구뤠.. 그렇다능.. 그렇다면…)
  • 7. 3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 그렇다면 클라이언트가 요청한 URL을 뭔가로 구분을 해야 각각의 요청에 맞는 비즈니스를 할 수 있겠죠. 그렇게 routing 을 하기 위한 뭔가를 만들어줘야 할텐데… 위대하신 Node 의 신께서, 말 그대로 “url”이라는 이름의 내장 모듈을 내려 주셨으니… server.js 를 잠깐 다시 열어서 url 판별 코드를 심어보겠습니다. var http = require("http"); var url = require("url"); //내장 모듈 url을 쓰기위해 require 했습니다. function start() { function onRequest(request, response){ var pathname = url.parse(request.url).pathname; //이러한 method, attribute 등을 제공하네요.. console.log("Request for " + pathname + " received."); response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } var server = http.createServer(onRequest); server.listen(8888); console.log("Server has started."); } exports.start = start; url 모듈의 parse() 메소드와 pathname 속성 값으로 request 의 url 정보를 콘솔로 찍는 코드를 심어놨습니다. 파라미터 request 객체도 당연하듯이 url 이라는 속성을 가지고 있군요. 확인사살 해보실 분들은 브라우저에 “http://localhost:8888/아무거나다르게” 어러번 때러보시고....
  • 8. 3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 이제 URL 판별 능력을 갖춘 서버 모듈이 만들어져 있으니… URL 에 따라 다른 비즈니스를 하도록 엮어줘야 할텐데… 라우팅.. 라우팅 해야할텐데… 뭔가 아까 판별해서 나온 url pathname 값을 파라미터로 받아서 값에 따라 지지고 볶는 function 하나 만들면 되지 않을까요?  네~ 됩니다 고갱님!! 기왕이면 알흠다운 스트뤜춰~~를 위해서 “route.js” 라는 이름의 모듈을 생성해보십시오~ function route(pathname) { console.log("About to route a request for " + pathname); //하라는 비즈니스는 안하고 이런 거나 하고 있다;; } exports.route = route; url 판별코드는 server 에다 만들어 놓았는데.. 이걸 이 라우팅 모듈과 어떻게 엮어줄까요? 일단 server 모듈에서 이 route() 함수를 불러야 할텐데… http 요청인 브라우저에 url 때림! 이라는 이벤트가 발생하면 저 위 뭐 같지도 않은 비즈니스를 하는 route() 를 호출하도록 만들면 되는 것이지요? 어디에다가? 이미 만들었잖아요.. server.start()  이 넘 속에서 url 뽑아오고 있잖아요.. (오늘 말장난이 좀 실속 없이 심한데?;;)
  • 9. 3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? var http = require("http"); var url = require("url"); function start(route) { function onRequest(request, response){ var pathname = url.parse(request.url).pathname; console.log("Request for " + pathname + " received."); route(pathname); response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); } var server = http.createServer(onRequest); server.listen(8888); console.log("Server has started."); } exports.start = start; 자 route 함수(함수에요!!) 를 파라미터로 받아먹는 server.start() 메소드가 다시 만들어졌습니다. server.start() 메소드는 우리 index 양께서 호출하도록 만들었었죠… 그럼 index 양에게 server 군과 데이트 할려고 부를 때 route 함수를 챙겨 가라고 전해줘야겠어요..
  • 10. 3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? var server = require("./server"); var router = require("./router"); //router 모듈을 쓰겠thㅓ!! server.start(router.route); 실행을 한번 해봅시다. (드디어 오늘 처음 콘솔 뜸 ㅋㅋ) 브라우저에 때리는 url 에 따라 다른 비즈니 스를 처리하게 되었습니다. (여기서는 url 자체를 걍 찍고 말지만…) 지나가는 얘긴데 저번에도 살짝 찾아보라고 만 했지만.. 자꾸 favicon 을 찾을려는 불가침 의 습성 때문에 좀.. 거슬리긴 해요;;;
  • 11. 3. 웹개발을 할 것이라는 것을 잊지는 않았겠지? 좌아~~ 이번 시간에는 Web app 를 구축하겠다는 굳은 의지를 상실해가지 않도록 node 모듈모듈모듈~~ 들의 구조화 얘기 쪼끔, 우리가 만들어야 할 비즈니스!!! 구현에 대한 접근을 시작해보았습니다. 뭔가 js 파일이 막 요레요레 늘어나고 분리되고 “ㅇ ㅏ~~ 뭔가 만드는 것 같다 ㅋㅋㅋ” 하는 기쁨보다는 드..드…드디어 비즈니스에 대한 얘기를 꺼내게 된 것에 더욱 스스로 의미를 두고 싶습니다. 다음 시간에는 이 죽일놈에 비즈니스를 좀 더 철저히 관리할 필요성에 대해서 얘기해보는 걸로 약속드리면서… 달려갑니다!! 이상한 node 의 세계로… 갑니다!! 혼자라면… 혼자 갑니다!! ( 흥~! ㄷ ㅏ 필요벗ㅇㅂ엉~!!) To be 게솎!