npm 패키지 버전 고정 누락

Dockerfile에서 npm install 시 패키지 버전을 고정하지 않으면 빌드 결과가 달라질 수 있습니다.

설명

npm install sax처럼 버전 없이 패키지를 설치하면, 레지스트리 상태에 따라 매번 다른 버전이 설치될 수 있습니다. 같은 Dockerfile을 다시 빌드해도 결과가 달라질 수 있다는 의미입니다.

Node.js 의존성은 작은 버전 차이에도 동작이 달라질 수 있습니다. 배포용 이미지는 설치 버전을 명확히 고정해 예기치 않은 업데이트가 들어오지 않도록 관리하는 편이 좋습니다.

잠재적 영향

  • 빌드 시점에 따라 서로 다른 npm 패키지가 설치될 수 있습니다.
  • 예기치 않은 업데이트로 애플리케이션 오류가 발생할 수 있습니다.
  • 테스트 환경과 운영 환경의 의존성 구성이 달라질 수 있습니다.

해결 방법

  • npm install sax@0.1.1처럼 패키지 버전을 명시하세요.
  • 글로벌 설치가 필요한 경우에도 설치 버전을 함께 고정하세요.
  • 프로젝트 의존성은 검토한 잠금 파일과 npm ci로 설치하고, 직접 설치하는 패키지뿐 아니라 하위 의존성의 변경도 관리하세요.

예시

ANGULAR_CLI_VERSION에 Node.js 환경과 호환되는 검토한 정확한 버전을 제공하세요. 태그나 버전 범위를 넣으면 정확한 고정이 아닙니다. sax@0.1.1은 과거의 문법 예시이며 운영 권장 버전이 아닙니다. Git 의존성도 #semver:^5.0 같은 범위 대신 확인한 커밋으로 고정하세요.

변경 전

dockerfile
FROM node:22
RUN npm install sax
RUN npm i -g @angular/cli

변경 후

dockerfile
FROM node:22
ARG ANGULAR_CLI_VERSION
RUN npm install sax@0.1.1
RUN test -n "$ANGULAR_CLI_VERSION" && npm i -g "@angular/cli@${ANGULAR_CLI_VERSION}"

설명:

  • 변경 전: 설치 대상 버전이 고정되지 않아 빌드 결과가 바뀔 수 있습니다.
  • 변경 후: 필요한 버전을 명시해 의존성 변경 범위를 통제합니다.

참조