Nginx 적용

Nginx를 적용한 이유

무중단 배포를 위한 PM2 Reload

시행착오

무중단 배포를 위해 PM2를 사용하기로 했습니다. 처음에는 pm2 start 명령어를 사용했지만 배포를 할 때 잠깐동안 서버가 꺼진다는 것을 알았습니다. 무중단의 의미가 무색해지기 때문에 더 찾아본 결과 reload를 알 수 있었습니다.


"scripts": {
		"dev": "cross-env NODE_ENV=development nodemon --ignore test.json -r tsconfig-paths/register ./src/app.ts",
		"prod": "tsc && tscpaths -p tsconfig.json -s ./src -o ./dist && cross-env NODE_ENV=production pm2 start ./dist/app.js",
    "test": "cross-env NODE_ENV=production pm2 reload ecosystem.config.js --update-env"
  },

reload는 적어도 하나의 프로세스를 남겨두고 다른 프로세스들을 하나씩 restart하는 방식이었습니다. 그래서 만약 하나의 프로세스만 사용하고 있는 경우 reload는 restart와 같아집니다.

"scripts": {
    "dev": "cross-env NODE_ENV=development nodemon --ignore test.json -r tsconfig-paths/register ./src/app.ts",
    "build": "tsc && tscpaths -p tsconfig.json -s ./src -o ./dist",
    "prod": "pm2 reload ecosystem.config.js --env production",
    "test": "cross-env NODE_ENV=production pm2 reload ecosystem.config.js --update-env"
  },

아쉽게도 사용하고 있는 NCloud Instance의 Ubuntu 서버가 코어를 하나만 제공하기 때문에 reload를 사용해도 start/restart와 같아지게 되었습니다.이에 대한 해결책으로 Docker를 사용한 블루/그린 무중단 배포를 생각하게 되었고 추후 도입할 예정입니다.