피드로 돌아가기
Multi-Stage Builds for a Next.js App — Reduce Image Size by 70%
Dev.toDev.to
DevOps

Multi-stage Build 도입을 통한 Next.js 이미지 크기 77% 절감

Multi-Stage Builds for a Next.js App — Reduce Image Size by 70%

Sohana Akbar2026년 5월 21일2intermediate

Context

Single-stage Docker build 방식에 따른 1GB 이상의 거대 이미지 생성 문제 발생. Production 환경에 불필요한 devDependencies와 빌드 툴체인이 포함되어 배포 속도 저하 및 저장 공간 낭비 초래.

Technical Solution

  • Dependencies, Builder, Production의 3단계 Multi-stage 구조 설계로 관심사 분리
  • npm ci --only=production 적용을 통한 런타임 필수 패키지만의 선별적 설치
  • next.config.jsoutput: 'standalone' 설정을 통한 최소 의존성 기반 서버 파일 생성
  • COPY --from=builder 명령어로 컴파일된 결과물과 정적 자산만 최종 이미지에 이식
  • Alpine Linux 기반 베이스 이미지 채택을 통한 OS 레이어 최적화
  • Non-root 사용자 계정 설정을 통한 컨테이너 보안 강화

Impact

  • 이미지 크기: 1.2 GB에서 280 MB로 77% 감소
  • Node modules: 최종 이미지 내 포함 여부를 Full(300 MB)에서 0으로 제거
  • 배포 효율: 이미지 경량화에 따른 컨테이너 Pull 속도 및 배포 시간 단축

Key Takeaway

빌드 타임 의존성과 런타임 의존성을 엄격히 분리하는 레이어 설계가 인프라 비용 최적화의 핵심.


1. next.config.js에 output: 'standalone' 설정 활성화

2. node:alpine 계열의 경량 베이스 이미지 사용

3. .dockerignore 파일로 소스 제어 및 빌드 캐시 제외

4. Multi-stage Build를 통한 Production 전용 이미지 추출

원문 읽기