Oh My Algorithm
Concept Guide빌드 스테이지 · 이미지 다이어트

멀티스테이지 빌드 (Multi-stage Build)

빌드에 필요한 것과 실행에 필요한 것은 다릅니다. 컴파일러·빌드 도구·개발 의존성은 이미지를 만들 때만 쓰이는데, 한 스테이지로 빌드하면 이것들이 최종 이미지에 그대로 남습니다. 멀티스테이지 빌드는 빌더 스테이지에서 만든 결과물만 최종 스테이지로 복사하고 나머지는 통째로 버려, 같은 앱의 이미지를 1 GB대에서 100 MB대로 줄입니다.

01 개념 한눈에 보기

Interactive Step-by-Step
단일 스테이지 · 빌드 잔여물까지 배포
최종 이미지 · 1.1 GB
앱 소스 · src/실행엔 불필요
devDependencies타입스크립트·번들러 · 420 MB
빌드 도구 · 컴파일러python·make·g++ · 190 MB
빌드 산출물 · dist/실제로 실행되는 것 · 12 MB
FROM node:20풀 이미지 · 380 MB
실행에 필요한 건 dist/ 와 런타임뿐인데 나머지가 전부 함께 배포된다

Dockerfile 을 하나의 스테이지로 쓰면, 빌드하며 만든 모든 것이 최종 이미지에 그대로 남습니다.

Logic Node1 / 5
멀티스테이지 · 산출물만 옮기기
① builder 스테이지 · 버려짐
앱 소스 · src/
devDependencies420 MB
빌드 도구 · 컴파일러190 MB
빌드 산출물 · dist/12 MB · 이것만 필요
COPY --from=builder /app/dist ./dist
distjscssmap
② 최종 이미지 · 155 MB
빌드 산출물 · dist/12 MB
운영 의존성만npm ci --omit=dev · 3 MB
FROM node:20-alpine슬림 런타임 · 140 MB

멀티스테이지는 Dockerfile 에 FROM 을 여러 번 씁니다. 첫 스테이지는 오직 빌드만 담당합니다.

Logic Node1 / 7

02 쉽게 이해하기

For Everyone
🔑비유

가구를 만든 뒤 톱·대패·나무 부스러기까지 함께 배송하는 대신, 완성된 가구만 포장해 보내는 것과 같습니다. 작업장(빌더 스테이지)은 배송 트럭에 싣지 않습니다.

💡쉽게 말하면

Dockerfile 에 FROM 을 여러 번 써서 스테이지를 나누고, 마지막 스테이지에서 `COPY --from=builder` 로 빌드 산출물만 가져옵니다.

앞 스테이지는 최종 이미지에 포함되지 않으므로 컴파일러·devDependencies·소스 코드가 전부 빠집니다.

이미지가 작아지면 배포가 빨라지고, 공격 표면(설치된 도구·소스 노출)도 함께 줄어듭니다.

📍어디에 쓰나
  • 컴파일 언어(Go·Rust·Java)와 번들링이 필요한 프런트엔드 이미지 최적화
  • 배포 속도 개선
  • 컨테이너 보안 표면 축소

03 자주 묻는 질문

FAQ
멀티스테이지 빌드 (Multi-stage Build)란 무엇인가요?+

빌드에 필요한 것과 실행에 필요한 것은 다릅니다. 컴파일러·빌드 도구·개발 의존성은 이미지를 만들 때만 쓰이는데, 한 스테이지로 빌드하면 이것들이 최종 이미지에 그대로 남습니다. 멀티스테이지 빌드는 빌더 스테이지에서 만든 결과물만 최종 스테이지로 복사하고 나머지는 통째로 버려, 같은 앱의 이미지를 1 GB대에서 100 MB대로 줄입니다.

멀티스테이지 빌드 (Multi-stage Build)은(는) 어디에 사용하나요?+

컴파일 언어(Go·Rust·Java)와 번들링이 필요한 프런트엔드 이미지 최적화, 배포 속도 개선, 컨테이너 보안 표면 축소

멀티스테이지 빌드 (Multi-stage Build)를 쉽게 비유하면?+

가구를 만든 뒤 톱·대패·나무 부스러기까지 함께 배송하는 대신, 완성된 가구만 포장해 보내는 것과 같습니다. 작업장(빌더 스테이지)은 배송 트럭에 싣지 않습니다.

Guide Progress0%