'Server/node.js'에 해당되는 글 3건

  1. 2012.12.20 :: Heroku 에 클라우드 서비스 하기
  2. 2012.06.23 :: node 설치부터 운용까지
  3. 2011.12.24 :: Node.js
Server/node.js 2012. 12. 20. 00:36

1) Heroku 가입

  - http://www.heroku.com/

2) heroku toolbelt 다운받아서 설치

3) 프로젝트내 package.json 수정

{

"name": "firstthis",

"version": "0.0.1",

"dependencies":{

"express": "2.5.x"

},

"engines":{

"node":"0.8.x",    // 노드버전을 알려줘야한다.

"npm":"1.1.x"

}

}

4) 프로젝트 루트에 Procfile 만들기(확장자없다)

web: node server.js

5) heroku login

 - ssh key를 만들어야한다. git/bin 폴더가 path에 잡혀있어야한다.

 - key 를 만들고 나면 >heroku keys:add 명령으로 키를 추가한다.

6) 프로젝트 폴더에서

 >git init

 >git add .

 >git commit -m "설명글을 쓴다"

 - 이렇게 명령을 내려 git 에 커밋한다.

 >heroku create

 >git push heroku master

 - 이렇게 현재 git 에 커밋된 내용을 heroku 로 올린다. 이때 Procfile 이 없으면 reject 된다.

7) 프로젝트를 올리고 나면

 >heroku ps:scale web=1

 >heroku config:add NODE_ENV=production

 명령을 내려 헤로쿠의 노드 서버를 가동시킨다.

8) app 확인하기

 >heroku apps

 이렇게 명령을 내리면 현재 접근가능한 주소가 나온다.

 "주소값".herokuapp.com 을 통해 어디서나 접속가능하다.

'Server > node.js' 카테고리의 다른 글

node 설치부터 운용까지  (0) 2012.06.23
Node.js  (0) 2011.12.24
posted by kirhieyes
:
Server/node.js 2012. 6. 23. 19:27

1. 설치

 - 윈도우용 다운받아서 설치 ( 환경설정에 node 경로가 자동으로 등록된다. )

2. npm

 - 노드 0.6.3 버전부터 npm이 노드에 포함됬다.

 - 커맨드라인에서 >npm -v 라는 명령이 동작되면 설치되어 있는 것

3. 확장모듈 설치

 - 글로벌 설치 : >npm install 모듈명 -g    (>npm [명령어] [모듈명] [옵션])

 - 로컬 설치 : >npm install 모듈명

 - 설치된 모듈 리스트 보기: >npm list   ( 글로벌리스트를 볼려면 -g 를 붙인다 )

 - 확장 모듈 검색 : >npm search  ( 최초에는 인덱스를 만들기때문에 시간이 걸린다.)

 - 상세 정보 : >npm info 모듈명

 - 확장 모듈 update : >npm update 모듈명 ( 글로벌인 경우 -g를 붙인다.)

 - 확장 모듈 제거 : >npm uninstall 모듈명 ( 모듈의 디렉토리를 삭제해도 된다. )

4. 프로젝트 시작

 - 프로젝트명으로 폴더를 만들고 1) npm install express 2) npm install jade

 - 글로벌로 설치했지만 그냥 로컬에 기본적인 모듈을 설치해버리자.

 - 설치가 끝나면 >express 라고 명령하면 폴더가 비어있지않다고 경고가 나오지만 yes 로 설치한다.

- >npm install 명령을 내려 independency 설정을 해준다.

 - 기본 노드모듈이 설치가 되고 바로 >node app.js 를 실행해 서버가 시작되면 //localhost:3000 으로 접속해서 express 가 뜨면 설치가 잘된것이다.

5. 링크

http://crazia.tistory.com/955

6. 로컬 서버 개설하여 파일 서비스하기

$ npm install -g quickserve

# and then when you want to develop $ cd path/to/cocos2d-html5 $ quickserve .

> serving path/to/cocos2d-html5 at: http://localhost:1234

 

7. 설치할만한 모듈들

1) global

 - nodemon >npm install nodemon -g

   : 실시간으로 소스를 수정하고 적용하게 해주는 모듈.

   : 실행>nodemon test.js     // node test.js 로 실행하는 것이 아니라...

 - forever >npm install forever -g

   : 데몬으로 돌릴 수 있게 해주는 모듈

   : 실행>forever start test.js

 - express >npm install express -g

   : 경량 프레임워크

   : express [옵션] [경로]

 - socket.io >npm install socket.io -g

   : 웹소켓

 - node-inspector >npm install node-inspector -g

   : 디버그용 툴

   : 우선 노드를 디버그 모드로 실행한다.

   -->node --debug-brk test.js   // 첫라인에서 멈추게 한다.

   : 다른 콘솔에서 인스펙터 실행

   --> node-inspector &

   --> 크롬에서 localhost:8080 으로 접속하면 디버그창 뜬다.

2) local

 - schedule >npm install node-schedule

   : 주기적으로 실행되는 명령을 내릴 수 있다.

 - jade >npm install jade

   : express 뷰 템플릿 엔진

 - mySQL >npm install mysql

   : sql 데이터베이스 사용

 - mongorian >npm install mongolian

   : noSQL 데이터베이스 사용

'Server > node.js' 카테고리의 다른 글

Heroku 에 클라우드 서비스 하기  (0) 2012.12.20
Node.js  (0) 2011.12.24
posted by kirhieyes
:
Server/node.js 2011. 12. 24. 02:34

정말 마음에 드는 엔진이다. 재밌는 자바스크립트로 서버까지~

이제부터 공부해봐야겠다.

1. Hello World 출력
    뭘 하던 이것부터 ~_~

1) util API 불러와서 출력하기
var sys = require("util")
setTimeout(function(){
 sys.puts("world");
}, 2000);
sys.puts("hello");

2) STDOUT 출력하기
console.log("Hellow World");

 2. HTTP 서버 모듈 생성

1) 코드

var http = require("http");

http.createServer(function(req, res){
 res.writeHead(200, {"Content-Type": "text/plain"});
 res.write("Hello World");
 res.end();
}).listen(8080);

http://localhost:8080/ 에 접속하면 "Hello World" 가 찍히는 웹페이지를 볼 수 있다.
서버 모듈을 생성하면서 이벤트가 발생하면 호출할 callback 함수로 익명함수를 인자로 넘겼다. 이제 이벤트가 없을 경우에는 아무런 동작도 안하지만 이벤트가 발생하면 인자로 넘긴 익명함수가 호출될 것이다.

var http = require("http");

function onRequest(req, res){
 console.log("Request received");
 res.writeHead(200, {"Content-Type": "text/plain"});
 res.write("Hello World");
 res.end();
}

http.createServer(onRequest).listen(8080);

console.log("Server has started");


즉 node.js의 핵심 정의는 callback을 가진 이벤트 드리븐 비동기 서버사이드 JavaScript 이다!!

2) 코드 리뷰
callback으로 익명함수(위에서는 onRequest)가 호출될때 request 와 reponse 객체가 넘어온다.
요청이 들어올 때마다 res.writeHead() 함수를 사용해 HTTP status 200과 content-type을 응답헤더로 보내고, res.write() 함수로 "Hello World"를 응답 body로 보낸다.
그리고 res.end() 로 응답을 마무리한다.

3. 모듈화
   server.js를 Node.js 모듈로 만들어서 다른 파일에서 사용할 수 있게 한다.
   현재 server.js 의 기능은 http 서버를 시작하는 것이다. 따라서 시작하는 메서드를 만들고 이를 export 해주면 된다.

var http = require("http");

function start(){
 function onRequest(req, res){
  console.log("Request received");
  res.writeHead(200, {"Content-Type":"text/plain"});
  res.write("Hello World");
  res.end();  
 }
 
 http.createServer(onRequest).listen(8080);
 console.log("Server has started"); 
}

exports.start = start;


이제 index.js 파일을 만들고 HTTP 서버를 시작시킨다.

var server = require("./server");

server.start();



파일을 require 하고 지역변수에 할당하면 export 된 함수를 쓸 수 있게 된다.
이렇게 서로 다른 파일들을 모듈로 만들어 서로 엮을 수 있다.
이제 서로 다른 요청에 대해 응답하기 위해 route를 만들어 보자.

4. route
다른 HTTP 요청을 구분하여 각각에 맞는 응답처리파일을 가리키도록 하는 것을 "라우팅(routing)"이라고 한다.
요청 URL 과 GET/POST 파라미터를 router 로 전달하면 router 는 어떤 코드를 실행할 지 결정해야 한다.
따라서 HTTP 요청에서 URL 과 GET/POST 파라미터를 뽑아내야 한다. 이것을 route 부분에서 구현하는지 server 부분에서 구현하는지에 대한 논란은 있다.
일단은 HTTP server 의 일부로 만들어보자.

현재 우리에게 필요한 모든 정보를 request 객체를 통해 접근할 수 있다. 하지만 이 정보를 얻어 내기 위해 url 과 querystring 이라는 모듈이 추가로 필요하다.
- url 모듈 : URL 의 각각의 부분 (ex. URL path, query string)을 뽑아낼 수 있는 메서드를 제공한다.
- querystring 모듈 : query string 을 request 파라미터로 파싱하는 메서드를 제공한다. 또한 POST 요청의 body를 파싱한다.

1) URL path 가 무엇인지 파악하는 로직 작성(server.js)

var http = require("http");
var url = require("url");

function start(){
 function onRequest(req, res){
  var pathname = url.parse(req.url).pathname;
  console.log("Request for " + pathname + " received");
  res.writeHead(200, {"Content-Type":"text/plain"});
  res.write("Hello World");
  res.end();  
 }
 
 http.createServer(onRequest).listen(8080);
 console.log("Server has started"); 
}

exports.start = start;


이제 URL path 를 기반으로 요청을 request handler 로 매핑하는 router를 만들 수 있다.

2) 요청에 따라 교통정리를 하는 router.js

function route(pathname){

   console.log("About to route a request for " + pathname);

}

exports.route = route;

- server.js 의 확장부분

var http = require("http");
var url = require("url");

function start(route){
 function onRequest(req, res){
  var pathname = url.parse(req.url).pathname;
  console.log("Request for " + pathname + " received");

  route(pathname);
  res.writeHead(200, {"Content-Type":"text/plain"});
  res.write("Hello World");
  res.end();  
 }
 
 http.createServer(onRequest).listen(8080);
 console.log("Server has started"); 
}

exports.start = start;

- index.js 에서 server 에 route 주입

var server = require("./server");

var router = require("./router");

server.start(router.route);

3) 다중 요청 처리를 위해 requestHandlers 만들기

function start(){

   console.log("Request handler 'start' was called.");

}

function upload(){

   console.log("Request handler 'upload was called.");

}

exports.start = start;

exports.upload = upload;

- requestHandler의 리스트를 객체로 넘기고 index에서 받아서 route로 주사한다.

var server = require("./server");

var router = require("./router");

var requestHandler = require("./requestHandlers");

var handle = {};

handle["/"] = requestHandlers.start;

handle["/start"] = requestHandlers.start;

handle["/upload"] = requestHandlers.upload;

server.start(router.route);


- server.js 도 여기에 맞춰 수정

var http = require("http");
var url = require("url");

function start(route){
 function onRequest(req, res){
  var pathname = url.parse(req.url).pathname;
  console.log("Request for " + pathname + " received");

  route(handle, pathname);
  res.writeHead(200, {"Content-Type":"text/plain"});
  res.write("Hello World");
  res.end();  
 }
 
 http.createServer(onRequest).listen(8080);
 console.log("Server has started"); 
}

exports.start = start;


- route.js 에 handle 받을 수 있게 수정

function route(handle, pathname){

   console.log("About to route a request for " + pathname);

   if(typeof handle[pathname] === 'function'){

     handle[pathname]();

   }else{

     console.log("No request handler found for " + pathname);

   }

}

exports.route = route;








'Server > node.js' 카테고리의 다른 글

Heroku 에 클라우드 서비스 하기  (0) 2012.12.20
node 설치부터 운용까지  (0) 2012.06.23
posted by kirhieyes
: