BACK-END/Node


[Node] forever 모듈로 죽은 앱 살리기 (프로세스 관리)




Forever 는 node가 예기치 못한 상황에서 앱이 종료될 경우 자동으로 재시작 하도록 해주는 모듈입니다.


또한, 매번 콘솔창에서 node app.js 등의 node 명령어로 앱을 실행시키지 않아도, 백그라운드로 노드 앱을 계속 띄워놓을 수 있도록 해줍니다.


forever 를 사용하면, 간단한 명령들로 쉽게 프로세스들을 관리할 수 있습니다.

PM2 등의 모듈들과 마찬가지로 Forever가 프로세스를 관리해주는 부모 프로세스가 되는 것입니다.

PM2 사용법에 관해서는 기회가 되면 다음번에 포스팅 하도록 하겠습니다.


Forever(NPM) 바로가기 Forever(GitHub) 바로가기




Forever 모듈 설치(npm)



먼저 설치는 npm으로 간단하게 설치가 가능합니다. 앱단위가 아닌 전역으로 프로세스를 관리 할 수 있도록 글로벌 설치를 합시다. (-g)


Bash(Linux)

[root@ /]# npm install -g forever


설치가 완료됐으면, 간단한 forever 명령어를 사용해봅시다!

아래는 실행중인 프로세스 목록을 조회하는 forever 명령어입니다


Bash(Linux)

[root@ /]# forever list info: Forever processes running data: uid command script forever pid logfile uptime data: [0] UH9Q /usr/local/bin/node app.js 8931 10160 /root/.forever/UH9Q.log 223:1:48:38.155 data: [1] f2mq /usr/local/bin/node app2.js 9022 10172 /root/.forever/f2mq.log 223:1:48:35.995


설치가 제대로 되었다면, 명령어를 사용했을 때 위와 같이 Forever processes running 메세지가 나올 것입니다.

이미 띄워놓은 프로세스가 있을 경우 위와 같이 프로세스 목록이 나옵니다.





간단한 사용법



1. 프로세스 시작


Bash(Linux)

[root@ /]# forever start app.js info: Forever processing file: app.js


2. 실행중인 프로세스 종료


Bash(Linux)

[root@ /]# forever stop info: Forever stopped process: uid command script forever pid logfile uptime [0] cH9d /usr/local/bin/node app.js 16079 16085 /root/.forever/cH9d.log 0:0:0:41.402


3. 프로세스 목록조회


Bash(Linux)

[root@ /]# forever list info: Forever processes running data: uid command script forever pid logfile uptime data: [0] UH9Q /usr/local/bin/node app.js 8931 10160 /root/.forever/UH9Q.log 223:1:48:38.155 data: [1] f2mq /usr/local/bin/node app2.js 9022 10172 /root/.forever/f2mq.log 223:1:48:35.995


4. 프로세스 재시작


Bash(Linux)

[root@ /]# forever restart app.js info: Forever restarted process(es): data: uid command script forever pid logfile uptime data: [0] UH9Q /usr/local/bin/node app.js 8931 10160 /root/.forever/UH9Q.log 223:1:48:38.155



옵션(Options)



help 명령을 사용하면 forever 의 간단한 사용법들을 조회할 수 있습니다.


Bash(Linux)

[root@ /]# forever --help


다양한 옵션들 중 유용한 옵션 몇개만 알아보도록 하겠습니다.


1. 로그파일 지정 (-l, -e, -o, -a)


옵션중 -l 옵션을 사용하면 log 파일 위치를 따로 지정할 수 있습니다.

따로 지정하지 않을경우 위리스트 목록에서처럼 /root/.forever 하위에 로그파일이 쌓입니다. 따로 관리해주는 편이 좋을듯합니다!


Bash(Linux)

[root@ /]# forever start -l /var/log/app.log app.js


위와 같이 로그 위치를 지정해 주었는데, 해당 로그파일이 이미 존재하며, 새로운 로그파일이 아닌 기존에 있던 파일에 로그를 추가로 등록하고자 하는 경우 -a (append) 옵션을 사용합니다.


Bash(Linux)

[root@ /]# forever start -l /var/log/app.log -a app.js



또한 -o, -e 옵션 등을 사용하여 out Log 와 error Log 를 따로 관리할 수도 있습니다.


2. 소스변경감지 (-w)


-w(watch) 옵션을 사용하면, 앱의 소스코드 변경이 감지될때 자동으로 프로세스를 재시작 시켜줍니다.


Bash(Linux)

[root@ /]# forever start -l /var/log/app.log -a -w app.js





* 이 포스트는 "생활코딩 egoing님의 node강좌" 를 보고 정리하는 개인적인 포스트입니다.


[참고/출처]

https://opentutorials.org/course/2136/11854


NPM 모듈 Express 기본 사용법


익스프레스를 사용해면 http 모듈 없이도 간단한 웹서버를 구성할 수 있습니다.

익스프레스의 자세한 사용법은 express 공식 홈페이지에서 한국어 번역판을 볼 수 있습니다. http://expressjs.com/ko/ 

(번역해 주신분들 감사합니당ㅎ.ㅎ!!!)


1. 설치와 기본사용법


익스프레스를 사용하기 전에 먼저 설치를 합니다.

package.json파일이 없으신분들은 npm의존성모듈 관리하기 참고!


  

[user@server home/mingcho/node] # npm install express --save



express의 기본 사용법.!


 

const express =  require("express");  // express 모듈을 require 한후 

const app =  express() // app변수에 express함수를 담습니다!

  

app.get('/', function(req, res){

  res.send('Hello home page');

});  // '/' 경로로 들어오는 사용자에게 Hello home page라는 문자열을 리턴해줍니다.


app.get('/login'function(req, res){

  res.send('Login please');

});  // '/login' 경로로 들어오는 사용자에게 Login please라는 문자열을 리턴해줍니다.


app.listen(3886function(){

  console.log('Connected 3886 port');

});  // 우리의 서버는 3886번 port의 요청을 들을 준비가 되었습니당.! 준비가되면 콘솔창에 Connected 3886 port를 띄워줍시당.




2. 정적파일 엑세스하기 


우리가 주로 프로그램을 처리하고 동적으로 데이터가 처리되는 부분이 아닌 한번 작성을 하면 

수정하기 전까지 변하지 않는 html 파일이나 css 파일등을 정적파일이라고 부릅니다.


express로 이런 정적파일들을 엑세스 하려면 아래와 같은 소스를 추가해주면됩니다.


app.use(expressstatic('폴더경로'));

// '폴더경로'에는 엑세스 하고자 하는 파일이 들어있는 폴더의 상대경로나 절대경로를 입력해주면 됩니다.


ex)

app.js

 

const express  require("express");  

const app =  express() 


app.use(expressstatic('public'));

// app.js 가 있는 프로젝트 안에 public이란 폴더를 만들고 그 안에있는 


app.get('/'function(req, res){

  res.send('Hello home page');

}); 


app.get('/route'function(req, res){

  res.send('<img src ="/flag.jpg"');

});  

// flag.jpg 이미지 파일을 /route 로 들어오는 사용자들에게 보여주도록 했습니다.


app.listen(3886function(){

  console.log('Connected 3886 port');

});  



호스트주소:포트번호/route 로 접속시 이미지가 잘 나온다면 성공! 


public안에 간단한 html 파일을 만든후 호스트주소:포트번호/파일명 으로도 접근해봅시당.


static.html

 

<!DOCTYPE html>

<html>

  <head>

    <meta charset="utf-8">

    <title></title>

  </head>

  <body>

      <ul>

         <li>mingcho</li>

         <li>mingcho</li>

         <li>mingcho</li>

      </ul>

  </body>

</html>



위와 같은 정적파일들은 수정한 후 node를 껐다가 다시키지 않아도 바로 적용이 됩니다.










* 이 포스트는 "생활코딩 egoing님의 node강좌" 를 보고 정리하는 개인적인 포스트입니다.



[참고/출처]

https://opentutorials.org/course/2136/11854


강의를 보던 중 잠깐 패키지를 다운받기 전 npm으로 의존성을 관리할 수 있는 package.json 파일을 생성하는 부분이 나왔다.

내용이 조금 부족하여 구글링을 추가하여 ㅎㅎ 정리해 보도록 한다.


요즘같은 경우는 npm없이 node를 사용하기란 상상할 수 없는 일이기도하고 , 

npm에 있는 수많은 모듈들을 가져다 사용하고 있기때문에 npm모듈들의 의존성관리를 해줄 필요가 있다.


npm은 프로젝트에 대한 설정을 package.json이라는 파일에 의존하고 있기 때문에 이 파일에 JSON형식으로 작성해서 

프로젝트에 대한 관리를 할 수도 있지만 , npm 에는 손수 json파일을 작성하지 않아도 package.json 파일을 생성해 주는 

명령어가 있다.


그럼 npm 명령어로 package.json 파일을 만들어보자. 명령어는 아래와같다.


  

[user@server home/mingcho/node_test] # npm init



위와 같이 명령어를 입력하면..



[user@server home/mingcho/node_test] # npm init


This utility will walk you through creating a package.json file.

It only covers the most common items, and tries to guess sensible defaults.


See `npm help json` for definitive documentation on these fields

and exactly what they do.


Use `npm install <pkg> --save` afterwards to install a package and

save it as a dependency in the package.json file.  


Press ^C at any time to quit.

name: (node)      //패키지명. 엔터를 치면 괄호안의 이름으로 등록된다.

version: (1.0.0)            //엔터

description: node test     

//해당 프로젝트에 대한 설명. 안써도 상관은 없지만 안쓰면 우리를 귀찮게 하는일이 발생한다고..!

entry point: (hellow.js)  //우리의 패키지를 구동시키는 자바스크립트이다.

생략가능하지만 없지만 추후에 프로젝트가 복잡해진다면 이 항목을 정의하도록하자!

test command:              //추가로 실행할 스크립트 명령어를 정의하는거라는데 아직잘모르겟으니 Pass

git repository:              //git 저장소 URL. 이것도 Pass

keywords:                     //npm search 명령으로 패키지를 찾을 수 있도록 도와주는 키워드. Pass

author:                         //프로젝트 작성자이름.Pass

license: (ISC)               //프로젝트 라이센스.Pass

Is this ok? (yes)          //엔터!



이렇게 만들면 현재 경로 아래 package.json 이라는 파일이 하나 생겼다.

이제 폴더에 package.json 파일만 넣고 npm install 명령어를 치면 package.json 파일에 있는 dependencies와 

devDependencies에 있는 모듈을 자동으로 탐색하여 설치해 줄 것이다.


다른 임의의 프로젝트를 하나 더 생성한 후 package.json 파일을 옮겨보자.


  

[user@server home/mingcho] # cp ./node_test/package.json ./node_test2/package.json



새로생성한 프로젝트에 package.json 파일이 생성되었다면 package.json 파일이 생성된 폴더에서 

npm install 명령어를 치면 내가 dependencies에 등록했던 모듈들이 자동으로 설치되는 것을 볼 수 있다.


이렇게 package.json 파일을 만들었으면 이제 내가 사용할 모듈들의 의존성 관리를 할 수 있다.

그런데 모듈들을 설치할 때마다 package.json 에 따로 등록해주는 일은 귀찮은 일이다.

이때 모듈을 설치할 때 마다 package.json에 자동으로 등록해 주는 옵션이 있다.


먼저, 옵션을 쓰지 않고 모듈을 설치 해보자.


  

[user@server home/mingcho/node_test] #  npm install uglifyjs

├── uglifyjs@2.4.10  extraneous



그럼 아래와같이 extraneous 라고 뜬다. (extraneous: 이물질, 외부의, 부가적인)

이 경우에는 모듈이 설치는 되지만, package.json 에는 등록이 되지 않는다. 

일시적으로 현재 프로젝트에서만 단발성으로 사용할 모듈은 이렇게 설치해 주면 될 것 같다.


그럼 --save 옵션을 사용하여 설치해보자.


  

[user@server home/mingcho/node_test] #  npm install uglifyjs --save



이 경우 extraneous 가 뜨지않는다. 이후 package.json 파일을 확인해보면

아래와 같이 등록이 된 것을 확인 할 수 있다.



  "dependencies": {

    "uglifyjs": "^2.4.10",

    "underscore": "^1.8.3"

  }




[참고] npm update 로 모듈의 버전들을 업데이트 할 때 package.json 에 내가 업데이트 하고싶은 버전의 범위를 지정해 놓을 수도있다. 



* 이 포스트는 "생활코딩 egoing님의 node강좌" 를 보고 정리하는 개인적인 포스트입니다.



[참고/출처]

https://opentutorials.org/course/2136/11854


underscore 모듈은 100가지 이상의 유용한 함수들을 제공하는 편리한 모듈입니다.

www.npmjs.com 에서 underscore를 검색해서 들어가면 underscore의 홈페이지가 나옵니다. underscore 라이브문서

위 홈페이지에서 underscore의 유용한 함수들의 사용법을 볼 수 있습니다.


홈페이지에서 installation 항목을 보면 플랫폼별 설치법이 나와있다. 

나는 node를 공부중이니 npm으로 설치를 한다.


  

[user@server home/mingcho/node_test] # npm install underscore



(이렇게 underscore 모듈을 로컬설치를 했는데 window에서는 현재경로 안에 잘 설치가됐는데 

linux 환경에서 설치하니 프로젝트 하위경로가 아닌 최상위 /home 폴더 아래 모듈이 자꾸 설치가 된다.ㅠㅠ

찾아보니 가끔 이런경우가 있다고 한다. 이럴경우에는 현재 경로 안에 node_modules 라는 폴더를 하나 만들어 주면된다고 한다. 만들어주니 현재경로 안에 로컬설치로 잘들어간다.ㅎㅎ 해결!!)


설치가 다 됐으니 사용해보도록 하장!

underscore.js 파일을 하나 만들어서 간단한 기능들을 사용해 보기로한당.



이와 같이 테스트 해보았다.

직접 스크립트 함수를 이용해 배열의 마지막값을 구한 것 보다 훨씬 가독성이 있다.

underscore 의 다른 다양한 함수들은 다음기회에 다시한번 사용해보고 쓸만한 기능이 많다면 다시한번 포스팅하는걸로!!





* 이 포스트는 "생활코딩 egoing님의 node강좌" 를 보고 정리하는 개인적인 포스트입니다.


[참고/출처]

https://opentutorials.org/course/2136/11854



uglifyjs 모듈은 들여쓰기 등을 사용하여 가독성 있게 만든 파일에서

불필요한 들여쓰기나 띄어쓰기 등을 지워줘서 같은 내용의 파일을 훨씬 가볍게 만들어 주는 모듈입니다.



NPM 모듈 uglify 사용하기


먼저, 터미널에서 npm 을 이용해 uglifyjs 모듈을 설치해 줍니다.


 [user@server home] # npm install uglifyjs -g


그 후, 본인이 작성한 js 파일을 이용하거나 들여쓰기를 사용해 간단한 소스로 파일을 하나 만들어줍니다.


//pretty.js


이 후 파일이 있는 위치에서 파일을 uglifyjs로 실행시켜 줍니다.


 

[user@server home/www/node] # uglifyjs pretty.js

function hello(name){console.log("Hi,"+name)}hello("mingcho"); //이렇게 minify 되었습니다



이와 같은 명령을 -m 옵션을 사용하면


 

[user@server home/www/node] # uglifyjs pretty.js -m

function hello(o){console.log("Hi,"+o)}hello("mingcho");            //함수의 파라미터이름도 단순하게 변경되었습니다.


     

이제 이와같은 파일을 원본파일의 mininum 파일로 만들어봐요.(-o 옵션사용)


 

[user@server home/www/node] # uglifyjs pretty.js -o pretty.min.js -m


     

minify 된 파일이 만들어 졌으면 성공~!!




* 이 포스트는 Linux 환경에서 작성되었습니다.

[참고] https://blog.outsider.ne.kr/638


NPM : Node Package Manager


npm 설치 및 업그레이드



docs.npmjs.com에서 다양한 npm 사용법을 확인할 수있다.


오늘은 npm으로 모듈을 설치해보기전, 간단한 사용법 정리!




npm으로 모듈 설치하기


 npm으로 모듈을 설치하는 방법에는 아래의 두가지 방법이 있습니다.


 

 [user@server home] # npm install -g 패키지명             //글로벌설치

 

 [user@server home] # npm install 패키지명                 //로컬설치



Global 설치의 경우 터미널에서 모듈의 명령어를 사용해야 할 일이 있는 경우에 Global로 설치합니다.

예를 들어 , npm / forever / expresso 등은 global설치를 해야만 터미널에서 모듈 명령어들을 사용할 수 있습니다.




글로벌 설치의 경우 기본적으로 usr/local 하위에 설치됩니다.

usr/local/lib/node_modules에 설치가 되며 

실행파일은 usr/local/bin

man page는 usr/local/share/man 하위에 생성됩니다.

글로벌 경로의 설치경로는 아래 명령어로 확인할 수 있습니다.


 

 [user@server home] # npm config ls




Local 설치의 경우 터미널에서 모듈의 명령어를 사용할 일이 없고, 

소스내에서만 require() 로 불러들이는 모듈들을 설치할 때 사용합니다.


로컬설치의 경우 현재위치 하위에 설치됩니다.


npm의 패키지를  경우 또한 두가지가 있습니다


 

 [user@server home] # npm search 패키지명             //중앙저장소보기

 

 [user@server home] # npm ls                                   //본인PC 보기



아래의 npm ls 를 실행할 경우 현 위치에 로컬설치된 패키지들을 트리뷰로 확인할 수 있습니다.

-p 옵션을 추가하면 트리뷰가 아닌 폴더리스트로 확인이 가능합니다.


* 이 포스트는 Linux 환경에서 작성되었습니다.



1. yum 으로 npm을 설치합니다.


 

[user@server home] # yum install npm



2. 강제로 npm 캐시를 삭제합니다.


 

[user@server home] # npm cache clean -f



3. npm n모듈을 설치합니다.

     (-g는 global을 나타냅니다. 사용하지 않을경우 local설치되며, 터미널에서 모듈의 명령어를 사용해야 할 경우 -g 옵션을 

   사용하여 global로 설치합니다. 글로벌설치와 로컬설치)


 

[user@server home] # npm install n -g



4. n모듈을 사용하여 원하는 버전의 NodeJs를 설치합니다

     (저의 경우 6.3.1 버전을 설치했습니다.)


 

[user@server home] # n 6.3.1



5. 설치된 노드의 버전을 확인합니다.


 

[user@server home] # node -v



6. npm 을 업그레이드합니다.

   (마찬가지로 -g)


 

[user@server home] # npm update npm -g



7. 새로운 npm 버전을 확인합니다


 

[user@server home] # npm -v




끝!! 냥냥

+ Recent posts

티스토리 툴바