Docker 빌드가 매번 npm install 부터 다시 도는 문제
COPY 순서만 바꿔서 의존성 레이어를 캐싱하면 빌드가 몇 배 빨라진다. 레이어 캐시의 원리와 흔한 실수.
블로그 빌드 스테이지를 만들다 보니, 코드 한 줄만 고쳐도 npm install 부터 전부 다시 도는 게 거슬렸다.
원인
Docker 는 COPY 한 줄 = 레이어 하나로 캐싱하는데, 그 레이어 이후가 캐시되려면 이전 레이어가 그대로여야 한다.
# ❌ 소스 전체를 먼저 복사하면, 글 하나만 바뀌어도
# 이 레이어가 깨지고 그 아래 npm install 도 다시 돈다
COPY . .
RUN npm install
해결: 의존성 파일만 먼저 복사
# ✅ package 파일만 먼저 → 의존성 안 바뀌면 install 레이어 캐시 적중
COPY package*.json ./
RUN npm install
# 그다음 소스 복사 → 소스만 바뀌면 여기부터 다시
COPY . .
RUN npm run build
package.json 이 그대로면 npm install 레이어가 캐시에서 그대로 재사용된다.
기억할 것
자주 바뀌는 건 Dockerfile 아래쪽에. 잘 안 바뀌는 의존성 설치를 위로 올리는 게 캐싱의 핵심.