Ubuntu 에서 Node.js 설치 및 설정 방법에 대해 알아보자.


설치를 위해서는 nodejs 사이트에서 패키지를 다운받는 법도 있지만, apt-get 을 통하여 설치도 가능하다.


Node.js 는 버전이 다르기 때문에 다음을 참고하여 원하는 버전을 다운받는다.

  • 4.xx
    • curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
      sudo apt-get install -y nodejs
  • 5.xx
    • curl -sL https://deb.nodesource.com/setup_5.x | sudo -E bash -
      sudo apt-get install -y nodejs


Nodejs 심볼릭 링크 생성

    • ln -s /usr/bin/nodejs /usr/bin/node


NPM Config 설정

  • npm registry
    • npm config set registry http://registry.npmjs.org/
  • npm directory 설정
    • mkdir ~/global-modules npm config set prefix '~/global-modules'

    • 시스템 변수 등록
      • ~/.profile 파일에 다음을 추가
        • export PATH=~/global-modules/bin:$PATH
      • 업데이트
        • source ~/.profile
  • npm proxy 설정
    • npm config set proxy http://111.111.111.111:8081 npm config set https-proxy https://111.111.111.111:8081 npm config set strict-ssl false npm config set registry http://registry.npmjs.org/

    • 위와 같이 설정한 값은 ~/.npmrc 파일에 저장된다.


Reference


Posted by leechwin
,

node.js 에서 log 를 관리하는 여러 모듈이 있는데 그중 범용적으로 많이 쓰이는 winston 과 jsnlog 모듈에 대해 소개한다.


Winston 은 nodejs의 server-side 에서 많이 사용하는 로그모듈이다.

  • Multiple transports 라는 개념으로 로그를 레벨별로 다양하게 분리하거나 Console출력, 파일이나 DB에 저장, Remote(Http) 전송등의 기능을 제공한다.
var logger = new (winston.Logger)({
  transports: [
    new (winston.transports.File)({
      name: 'info-file',
      filename: 'filelog-info.log',
      level: 'info'
    }),
    new (winston.transports.File)({
      name: 'error-file',
      filename: 'filelog-error.log',
      level: 'error'
    })
  ]
});

Jsnlog 는 Client의 로그를 Server에 전달하여 Server에서 Server와 Client의 로그를 모두 관리 할 수 있는 기능을 제공한다.

  • C#, PHP, Nodejs 서버와 연동가능
  • Client 로그를 AJAX를 이용하로 서버로 전송가능
  • Winston의 Transport 모듈과 연동가능
    • Server Side(app.js)
    • var winston = require('winston');
      var JL = require('jsnlog').JL;
       var consoleAppender = new (winston.transports.Console)();
      var fileAppender = new winston.transports.File({ json: false, filename: 'filelog.log' });
      JL().setOptions({ appenders: [ consoleAppender, fileAppender ] });
      
    • Client Side(logger.js)
    • var ajaxAppender = JL.createAjaxAppender('ajaxAppender');
      var consoleAppender = JL.createConsoleAppender('consoleAppender');
      JL().setOptions({'appenders': [ajaxAppender, consoleAppender]});
      
  • API
    • Logger Name
      • Logger 생성시 인자로 Logger의 Name을 줄수 있다.
      • JL("MyLogger").warn("log message");
        
    • Log Level 지정가능
    • LOG
      • log(level: number, logObject: any): Logger
        • 일반적인 log API와 다르게 첫번째 인자로 level을 숫자로 넣어주어야 한다.
        • Numeric Severities
        • From Named Severity
          To Numeric Severity
          TRACE1000
          DEBUG2000
          INFO3000
          WARN4000
          ERROR5000
          FATAL6000
  • jsnlog-nodejs
    • Client에서 전송한 로그를 파싱하여 서버에 전송하는 모듈


Posted by leechwin
,

 Node.js app 이 실행 중에 어떤 장애로 인해 app 이 뻗어버린 경우 app 을 다시 실행해야할 경우가 있다.

 app 이 멈출경우 자동으로 app 을 다시 실행시켜주는 forever npm 모듈을 소개한다.


 forever

설치는 npm 모듈로 npm install 로 가능하다.

 $ sudo npm install forever


자주 쓰이는 모듈이기 때문에 -g 옵션으로 글로벌 설치를 하면 편리하다.

 $ sudo npm install forever -g


실행, 조회, 종료는 다음과 같이 실행하면 된다.


실행다음과 같이 실행하면, app.js 가 실행 중 멈추면, 다시 재실행된다

 $ forever start app.js


실행중인 프로세스 조회

 $ forever list


프로세스 종료

 $ forever stop app.js


forever 는 실행시 자신이 포크한 프로세스로 node app 을 실행하고, 프로세스가 stop 되면 자신도 kill 한다.


Help Options






Posted by leechwin
,

 Node.js 로 프로젝트로 개발을 하다 보면은, javascript 파일을 하나 고치고 터미널에서 수행중인 node 를 ctrl+c 로 강제 종료한뒤에 다시 node 를 실행하는 번거로운 작업을 되풀이 하게 된다.

 이런 불편함을 줄이기 위해 supervisor 라는 npm 모듈을 사용하면 개발중 위와 같은 수고를 덜 수 가 있다.


설치는 npm 모듈이므로 npm install 로 설치한다

 $ sudo npm install -g supervisor


설치후 모듈의 실행은 다음과 같다.

 $ supervisor app.js


위와 같이 수행하면 app.js 파일 변경되면 자동으로 supervisor 모듈이 서버를 재시작 한다.



위와 같은 비슷한 기능의 nodemon 이라는 npm 모듈도 있다.

 $ sudo npm install -g nodemon

 $ nodemon app.js


Posted by leechwin
,

Node.js 로 만든 앱이나 서비스를 로컬 머신이 아닌 Web 상에서 호스팅하여 테스트 혹은 서비스를 하고 싶은 경우가 있다.


물론 자신의 서버와 도메인을 가지고 서비스를 하거나, AWS 에 저장공간을 가지고 서비스를 할 수 도 있으나 과금이 발생하므로, 무료인 서비스가 있다면 테스트로 쓰거나 작은 프로젝트를 돌리는데 무리는 없을 것 이다.


Node.js 프로젝트를 클라우드에 올려서 서비스를 해주는 heroku cloud application platform 사용법을 알아보자.


Heroku 는 플랫폼 서비스 기반(PAAS) 서비스로 AWS 와 비슷한 플랫폼으로 일정 환경으로는 무료로 사용할 수 있고 더 좋은 성능의 환경을 구축한다면 과금이 발생하게 된다.



1. Heroku 등록

  • https://www.heroku.com/ 에서 등록을 한다.
  • 등록한 이메일로 링크가 보내지는데 링크를 클릭하여 비밀번호를 입력한다.
  • 제대로 등록하였다면 Login 후 Dashboard 화면이 나온다.


2. Heroku Toolbelt 을 설치

  • Heroku Toolbelt 설치 항목은 다음과 같다.
    • Heroku Client: CLI 툴로 command 로 Heroku app 을 관리
    • Foreman: 로컬테스트 등의 기능 제공
    • Git: Heroku 에 push, revision control 등을 제공


3. SSH Key 등록

  • Heroku 는 git 을 이용하고, ssh key 가 필요하다.
  • shell 에서 다음 명령으로 heroku 에 로그인을 하면, ssh key 를 찾고, 없다면 생성 가능하다.
    • $ heroku login

  • 제대로 등록되었다면 이후에 heroku login 명령으로 접속이 가능하다.


4. Node.js App 작성


5. Procfile 작성

  • 자신의 app 의 root 디렉토리에 Procfile 이라는 파일을 생성하여 다음과 같이 기술한다.
    • Node.js 의 Entry Point 가 되는 실행명령어가 기술되는 파일이다.

web: node app.js

6. package.json 작성

  • 자신의 app 의 root 디렉토리에 package.json 파일을 작성해야 한다.
  • package.json
    • app 의 이름, 버전, node 의 버전, npm 버전, 사용한 라이브러리의 버전등의 정보를 기술해야한다.
    • npm 모듈중 express 는 반드시 사용해야하고, package.json 에 기술해줘야 한다.
    • 예제는 다음과 같다.
 {
  "name": "slide-control",
  "version": "0.0.1",
  "scripts": {
    "start": "node app"
  },
  "dependencies": {
    "express": "3.1.x",
    "jade": "0.28.x",
    "socket.io": "0.9.x"
  },
  "engines": {
    "node": "0.8.x",
    "npm": "1.1.x"
  }
}


7. NPM Install

  • shell 에서 다음 명령을 수행하면 package.json 을 참고하여 로컬에 해당 npm 모듈들이 인스톨 된다.
    • $ npm install
  • 설치가 된 후 npm ls 명령으로 현재 설치된 npm list 들을 살펴볼 수 있다.
    • $ npm ls


8. foreman Test

  • 로컬에서 Test 를 하고 싶다면, shell 에서 다음 명령을 수행하면 로컬에서 5000번 포트로 테스트가 가능


9. Git 저장소 생성

  • 개발한 소스를 로컬 Git 에 저장하기 위해 다음과 같이 수행한다.
    • $ git init
    • $ git add .
    • $ git commit -m "comment"


10. Heroku 에 리모트 Git 저장소 생성 및 push

  • 개발한 소스를 Heroku 리모트 Git 올리기 위해 다음과 같이 수행한다.
    • 로그인
      • $ heroku login
    • Heroku Remote Git 생성
      • 프로젝트 생성시 --stack cedar 이후에 자신의 앱이름을 적어준다.
      • 기술된 이름은 http://앱이름.herokuapp.com/ 과 같이 서비스되는 URL 의 이름으로 쓰인다.
        • $ heroku create --stack cedar myapp
    • 로컬 Git 의 내용을 Heroku 리모트 Git 으로 push
      • 아래와 같이 heroku git 으로 push 하는 즉시 App 이 Deploy되면서 서비스되는 URL 이 보여진다.
        • $ git push heroku master
      • 만약 첫 앱이름을 잘못 작성하여 새로 create 한경우에는 remote 설정을 지우고 다시 push 하면된다.
        • $ git remote rm heroku
        • $ heroku git:remote -a newname

11. Dashboard 에서 확인

  • https://www.heroku.com/  에서 로그인 후 Dashboard 에서 현재 서비스되는 자신의 App 리스트를 볼 수 있다
    • Resources
      • 과금을 통해 좀더 빠른 서비스를 제공받을 수 있다.
    • Activity
      • Heroku Git 에 기여한 이력등을 볼 수 있다.
    • Collaborators
      • 다른사람을 초대하나 하여 협업이 가능하다.
    • Settings
      • 현재 App 에 대한 설정등을 변경할 수 있다.

Posted by leechwin
,