해결

"start:dev": "cross-env NODE_ENV=local nest start --watch",

"start:prod": "cross-env NODE_ENV=prod node dist/src/main.js",
# 예시 코드
FROM node:14

# 삭제
# ENV NODE_ENV production

WORKDIR /app

COPY package.json .
RUN yarn install

COPY . .

CMD [ "yarn", "start:prod"]

 

개요

# 예시 코드
FROM node:14

ENV NODE_ENV production

WORKDIR /app

COPY package.json .
RUN npm install --production

COPY . .

CMD [ "node", "dist/src/main.js"]

Docker를 활용하면서 NODE_ENV 환경변수가 읽히지 않아 여러 문서를 읽어보았다. 찾아보아도 명확하게 알 순 없었고 운영체제에 따라서 달라질 수 있다는 것과 오타의 가능성뿐이었다. 

 

Mac을 쓰고 있었고 그 외 오타도 하나하나 찾아보았을 때 딱히 이상한 점은 찾지 못했고 그 과정속에서 본거 또 보고 또 보고 또 보는 삽질기가 발생하게 되었다.

 

해결

계속 같은 부분에서 찾다보니 내가 잘못알고 있는 부분이 있다는 것을 깨달았고 다시 찾아보기 시작했다.

 

그 과정속에서 env 설정하는 다양한 방법이 있다는 것을 확인했고 같은 곳에서 잘못된 것을 뒤적거리는 것보다는 다른 곳으로 접근해보는 것을 시도했고 그 과정을 회고해보고자 기록했다.

 

package json script

env 변수를 js 파일을 실행할 때 결정할 수 있는데 그 명령어를 스크립트로 설정해둘 수 있다.

"start:dev": "NODE_ENV=local nest start --watch",

"start:prod": "NODE_ENV=prod node dist/src/main.js",
 

자바스크립트 프로젝트에서 스크립트 활용하기 (npm run)

Engineering Blog by Dale Seo

www.daleseo.com

 

단순히 환경 변수를 설정하는 것 외에도 빌드,테스트 과정에서 필요한 옵션들을 CLI로 직접 타이핑하지 않아도 등록만 해두면 간단하게 실행시켜주는데 위 포스트를 참조하였다.

 

라이브러리 추가

운영체제에 따라서 달라질 수 있다고 하여 cross-env 라이브러리를 추가했다.

 

Window 환경에서도 호환성을 일치시켜준다고 하니 혹시 모를 문제에 대비해 설정했다

"start:dev": "cross-env NODE_ENV=local nest start --watch",

"start:prod": "cross-env NODE_ENV=prod node dist/src/main.js",

 

결론

# 예시 코드
FROM node:14

# 삭제
# ENV NODE_ENV production

WORKDIR /app

COPY package.json .
RUN yarn install

COPY . .

# 수정
CMD [ "yarn", "start:prod"]

이후 실행 커맨드도 바꿔놓았던 스크립트로 실행시킬 수 있도록 설정했고 문제없이 잘 실행되는 것을 확인할 수 있었다.

 

회고

docker를 개발하면서 문제가 워낙 많이 발생했었다. 하나로 적기엔 양이 조금 많아서 삽질했던 대로 분류를 해보려고 작성하였다.

워낙 오래 붙잡고 있어서 어디서 오류가 발생했었는지 확인해볼 부분도 너무 많다..

복사했습니다!