Open api key
API keys는 사용자 인증, 요청 API 호출을 위해 필요하다.
보통 RESTFull API 호출시 API keys 와 인증 스킴을 사용한다. 주요 차이는:
- API keys : 앱 혹은 사이트 호출을 식별해서 API 호출을 만다.
- Auth tokens : 앱 혹은 사이트 사용자를 식별한다.
API keys는 사용자 인증, 요청 API 호출을 위해 필요하다.
보통 RESTFull API 호출시 API keys 와 인증 스킴을 사용한다. 주요 차이는:
nodejs app을 단일 node
명령으로 실행후 백그라운드 혹은 시스템 데몬으로 다룰 수 있도록 해주는 프로세스 관리 유틸리티를 알아보자:
1 | nodemon ./server.js localhost 8080 |
nodemon으로 express 의 기본 템플릿을 시작시 bin/www 를 실행애 주어야 한다. app.js 만 실행시 www 에 명시한 포트가 인식 안된다.
1 | $ nodemon bin/www |
혹은 PORT 변수를 입력하고 실행한다.
1 | $ PORT=3000 DB_USERNAME='mongo' DB_PASSWORD='' DB_SERVER='localhost' DATABASE='student' nodemon server.js |
pm2는 nodejs app을 실행하고 관리할 수 있는 전문적인 도구이다.
node.js 앱을 시스템 서비스로 등록하기 위해서 pm2 를 설치한다.
1 | npm i -g pm2 |
예를 들어 express 앱이 있으면 다음 같이 pm2로 시작한다.
1 | cd www-app |
pm2 이전 버전은 시작시 timestamp를 로그에 저장하고 싶으면 시작시 --log-date-format
옵션을 이용
1 | pm2 start app.js --log-date-format 'DD-MM HH:mm:ss.SSS' |
시작 설정 파일에 log_date_format
옵션을 줄 수 있다.
1 | "log_date_format" : "DD-MM HH:mm:ss.SSS", |
pm2 2.x 이후 부터는 log 의 형식을 --format
옵션을 지정할 수 있다.
1 | pm2 logs --format |
startup 시 pm2 start 로 생성되는 .pm2 디렉토리의 pid 와 app.js 파일을 실행해 준다.
pm2 startup systemd 로 스타트를 하면 2개의 프로세스가 만들어 진다.
방법은,,,
1 | pm2 start -n "www-app" bin/www |
pm2로 현재 실행중인 프로세스 정보를 save
로 덤프하게 저장한다. systemd
서비스 스크립을 작성하는데 유용하다.
1 | pm2 save |
pm2 startup
명령은 pm2로 실행중인 프로세스를 systemd 서비스 유니트 파일로 제어 할 수 있다. 명령을 실행하면 sudo
명령으로 실행할 수 있는 스크립을 출력해 준다.
1 | $ pm2 startup systemd |
이 스크립을 실행해 주면 pm2-foo.service 서비스 유니 파일이 생성된다.
1 | Target path |
이 서비스 파일을 활성화하고 시작해준다.
1 | systemctl enable pm2-foo |
이제 시스템을 재시작해도 pm2 로 실행중인 프로세스는 자동으로 시작된다.
https://github.com/foreverjs/forever
nodejs app을 백그라운드로 실행하기 위해서 로그 정보를 생성할 수 있다.
The forever process will continue to run outputting log messages to the console.
1 | forever -o out.log -e err.log my-script.js |
forever 프로세스는 대상 프로세스를 백그라운드로 실행할 수 있는 데몬으로 동작이 가능하다. 이것은 nohup
같은 시스템 도구 없이도 가능다. 데몬 실행을 위해 -o -l, & -e 를 사용하도록 권장한다.
1 | $ forever start -l forever.log -o out.log -e err.log my-daemon.js |
그리고 -m
옵션으로 재시작 횟수를 지정할 수 있다.
here are several examples designed to test the fault tolerance of forever. Here’s a simple usage example:
1 | $ forever -m 5 examples/error-on-timer.js |
forever에 스크립트 경로와 함께 JSON 설정 파일을 전달해 스크립트의 구성요소를 제공할 수 있다. 예를 들어 아래 같은 앱 디렉토리에 developement.json
설정 파일이 있다고 하자,
1 | . |
developement.json
설정 파일은 아래 같은 내용으로 구성할 수 있다:
1 | // forever/development.json |
이 글은 mongoose middleware를 한글로 요약 정리한 것이다. 실제 본문을 요약하여 번역해 정리했으므로 이해가 안되는 부분은 위 링크의 내용을 참조하기 바란다.
Yarn은 Facebook, Google, Exponent, Tilde가 만든 npm을 대체 할 수 있는 새로운 패키지 관리자 이다. npm의 두 가지 큰 문제를 해결하고자 한다,^Yarn vs npm: Everything You Need to Know
yarn의 버전 표기가 다르기 때문에 같은 패키지를 서로 다른 버전으로 설치하는 잘못이 발생할 수도 있다.
npm 5 이후 많은 개선이 이루어 졌다. ^npm 5 vs yarn
npm i
는 자동으로 package.json에 의존성을 저장한다.npm-shrinkwrap
가 사라지고 yarn 같이 package-lock.json
파일이 추가되었다.이 파일은 npm과 yarn에서 의존성을 유지하기 위해 사용한다. 그러나 버전 번호가 다를 수 있다. 버전을 major와 minor 로 선택할 수 있고, 표기가 다음 같이 다르다 ^npm-vs-yarn
node version: v8.0.0
npm verison: 5.0.0
yarn verison: 0.24.6
npm, yarn 양쪽 버전이 package.json에 명시되어 설치되는 문제가 생길 수 있다. 이것을 피하기 위해 정확히 yarn으로 설치되는 버전은 yarn.lock
에 관리된다.
npm에서도 npm shrinkwrap
명령이 lock 파일을 생성해서 npm install 이 package.json을 읽기 전에 읽어 설치하는 것은 yarn.lock 을 먼저 읽는 것과 같다. 다만 yarn은 기본적으로 yarn.lock을 생성하고 업데이트 한다는 것이다.
npm 이 패키지를 설치하는 작업은 각 패키지를 설치하고 순차적으로 진행한다. yarn은 설치 작업을 별령로 진행한다.
express 패키지 42개를 설치할 때
1 | npm: 9 seconds |
gulp package 는 의존하는 195개 패키지를 설치한다.
1 | npm: 11 seconds |
npm 설치 과정은 장황스럽게 표시된다. yarn은 기본적으로 조금 단순하고 자세한 출력 옵션은 별도로 있다.
글러벌 설치시 npm은 -g
, --global
을 사용하는데, yarn은 global
첨자를 사용한다이다. 그리고 npm과 같이 글로벌 설치시에는 프로젝트 지정 의존성이 글로벌로 설치되지 않는다.
global
앞첨자는 yarn add
, yarn bin
, yarn ls
yarn remove
에서만 동작한다.
npm install 은 package.json 에 명시된 패키지들의 의존성을 설치한다. yarn은 순서데로 yarn.locak 혹은 package.json에 명시된 의존성을 설치한다.
npm은 package.json에 의존성을 추가하려면 npm install --save
별도의 플래그를 사용한다. yarn은 yarn add <package>
는 패키지를 설치하고 package.json에 의존성으로 추가한다. 그리고 --dev
플래그를 주면 developer dependency에 추가해 준다.
yarn license ls
는 패키지의 라이센스를 목록을 출력한다. yarn license generate-disclaimer
는 모든 패키지의 라이센스 내역에 대한 면책조항을 생성한다.
의존성 그래프와 그림을 출력해 준다.
npm update
와 비슷하게, yarn upgrade
는 package.json에 명시된 패키지를 업그레이드하고 yarn.lock을 재 생성한다.
주목할 점은 패키지를 명시해서 업그레이드 하면 최신 릴리즈로 갱신하고 package.json에 태그를 선언해 둔다. 메이저 릴리즈로 패키지를 업데이트 해준다는 의미이다.
yarn generate-lock-entry 명령은 package.json을 기초로 yarn.lock 을 생성한다. 이것은 npm shirinkwrap 과 비슷하다. 다만 주의해서 사용해야 하는데 yarn.lock 파일은 yarn add, yarn upgrade 시 생성되거나 업데이트 된다.
https://yarnpkg.com/en/docs/install#linux-tab 에 설명되어 있다.
1 | brew install yarn |
nvm 같은 가상환경을 사용하면 node.js 설치를 제외한다.
1 | brew install yarn --without-node |
1 | $ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - |
1 | sudo apt update && sudo apt install yarn |
On openSUSE, you can install Yarn via our RPM package repository.
1 | sudo zypper ar -f https://dl.yarnpkg.com/rpm/ Yarn |
1 | curl -o- -L https://yarnpkg.com/install.sh | bash |
설치후 경로에 추가한다.
export PATH=”$PATH:/opt/yarn-[version]/bin”
The following command uses Yarn to install the express package:
yarn add express
angular.js 프로젝트를 webpack 기반으로 시도해 보자.
프로젝트 구조를 준비한다.
1 | $ mkdir myproject && cd myproject |
프로젝트 초기 구조를 시작했음을 커밋으로 기록하자.
1 | $ git add package.json |
아래는 여기 소스느 https://github.com/zamarrowski/pokemon-poc 를 참조.
angularjs 실행에 필요한 패키지를 설치하기 위해서 다음 명령을 실행한다.
1 | npm i angular angular-ui-router |
1 | npm i -D webpack webpack-dev-server |