피드로 돌아가기
Dev.toDevOps
원문 읽기
Multi-stage Build 도입을 통한 Next.js 이미지 크기 77% 절감
Multi-Stage Builds for a Next.js App — Reduce Image Size by 70%
AI 요약
Context
Single-stage Docker build 방식에 따른 1GB 이상의 거대 이미지 생성 문제 발생. Production 환경에 불필요한 devDependencies와 빌드 툴체인이 포함되어 배포 속도 저하 및 저장 공간 낭비 초래.
Technical Solution
- Dependencies, Builder, Production의 3단계 Multi-stage 구조 설계로 관심사 분리
npm ci --only=production적용을 통한 런타임 필수 패키지만의 선별적 설치next.config.js내output: '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 전용 이미지 추출