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