들어가며
최근 DR 시스템을 구축해야 하는 이슈가 있었는데 배포 환경에 DR을 추가하고 세팅하는 작업을 맡게 되었다.
작업 중 angular를 사용하는 client와 nest를 사용하는 middleware의 빌드 코드가 다른 것을 보고 의문을 가지게 되었다.
* DR(Disaster Recovey)란? 재난 또는 각종 요인으로 인해 서비스나 시스템이 중단됐을 경우, 이를 정상화시키는 행위
문제의 코드
// Angular package.json
"build:prod": "ng build --configuration=prod"
// NestJs package.json
"build": "nest build"
왜 nest는 빌드할 때 환경변수를 사용하지 않을까? 🤔
Angular의 경우
프로젝트를 빌드할 때 --configuration
옵션이 있으면, angular.json
에 정의되어 있는 환경 파일로 교체되어 빌드된다.
즉, 빌드 시점에 환경 변수가 정해진 값으로 교체된다.
// angular.json
"configurations": {
"prod": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
…
NestJs의 경우
우리 팀의 server(middleware)는 현재 PM2를 사용하고 있으며, PM2는 ecosystem.config.js
에 정의된 환경 변수를 보고 알맞은 .env
를 적용한다.
즉, PM2에서 애플리케이션이 실행되는 런타임에 환경 변수가 정해진 값으로 교체된다.
* PM2란? node.js용 프로세스 매니저
// pm2 start
pm2 start ecosystem.config.js --env prod
// ecosystem.config.js
// NODE_ENV에 정의된 값과 동일한 env 파일을 사용한다.
module.exports = {
apps: [{
name: 'app',
script: './dist/main.js',
env_prod: {
NODE_ENV: 'prod'
}
}]
};
마치며
로그 확인 외에는 서버 쪽을 다룰 일이 거의 없다 보니 기본적인 개념도 많이 부족하고, 자주 사용을 안 하니까 알던 것도 까먹는 것 같다.
지금 사용하거나 배운 개념을 정리해서 잊어버리지 않도록 노력해야겠다.
출처
https://angular.kr/guide/build
https://pm2.keymetrics.io/docs/usage/environment/
'TIL' 카테고리의 다른 글
HTTP란? (0) | 2024.01.26 |
---|---|
TIL 6: MVP(Minimum Viable Product) (0) | 2023.08.10 |
TIL 5: DI란 (0) | 2023.07.22 |
TIL 4: RDD (0) | 2023.07.12 |
TIL 3: Tech Spec (0) | 2023.07.07 |