컨테이너·워크플로우 자동화/DocKer 기본 및 활용

Docker 이미지 최적화(레이어 캐시와 도미노 무효화 구조 이해)

Data Jun 2026. 2. 18. 10:50

Docker 이미지는 여러 개의 레이어로 구성됩니다. Dockerfile의 각 명령어는 하나의 레이어를 만들고, 이전에 동일한 작업을 수행했다면 해당 레이어의 캐시를 재사용합니다. 이를 통해 빌드 시간을 크게 줄일 수 있습니다.

 

하지만 중요한 특징이 하나 있습니다. 중간 레이어 하나라도 변경되면, 그 아래에 있는 모든 레이어의 캐시가 무효화됩니다. 위에서 무너지면 아래가 전부 다시 쌓이는 구조입니다. 이 현상을 도미노 효과라고 이해하면 쉽습니다.

 

예를 들어, 소스코드가 변경되었을 뿐인데 의존성 설치(npm ci)까지 다시 실행된다면 이는 레이어 구조가 비효율적으로 배치된 것입니다. 의존성 설치는 시간이 오래 걸리지만 자주 변경되지 않는 작업입니다. 반면 소스코드는 자주 수정됩니다.

 

따라서 무겁고 변경이 적은 작업은 Dockerfile 상단에, 자주 변경되는 작업은 하단에 배치하는 것이 좋습니다.

WORKDIR /apps/mbti

# 1️⃣ 의존성 관련 파일만 먼저 복사
COPY package.json package-lock.json ./
RUN npm ci

# 2️⃣ 소스코드 복사
COPY . .
RUN npm run build

이렇게 작성하면 소스코드만 변경되었을 경우 의존성 설치 레이어는 캐시를 그대로 재사용하게 됩니다.

 

핵심 원칙

 

  • 캐시는 이전 레이어 결과를 재사용하는 기능이다
  • 중간 레이어가 변경되면 아래 레이어는 모두 다시 실행된다
  • 변경이 적고 무거운 작업은 위에 배치한다
  • 변경이 잦은 작업은 아래에 배치한다

Docker 빌드를 빠르게 하려면 자주 바뀌는 레이어를 아래에 배치해 도미노 캐시 무효화를 최소화해야 합니다.