인프라 & 클라우드 · 중급
Docker 이미지 빌드 시 멀티스테이지 빌드를 사용하는 주된 목적과 이점을 설명하고, 실제 프로젝트에서 어떻게 활용할 수 있는지 구체적인 예를 들어 설명해 주세요.
힌트 · 최종 이미지 크기 감소와 빌드 캐시 효율성 증대가 핵심입니다. 개발/빌드 환경과 런타임 환경 분리를 고려하세요.
이미지 크기빌드 캐시보안레이어 최적화의존성 관리
모범답안
멀티스테이지 빌드는 Docker 이미지 크기를 줄이고 빌드 속도를 높이는 데 핵심적인 기술입니다.
주된 목적은 개발/빌드 환경과 런타임 환경을 분리하여 최종 이미지에 불필요한 의존성이나 빌드 도구를 포함시키지 않는 것입니다. 예를 들어, Java 프로젝트를 빌드할 때 JDK가 필요하지만, 런타임에는 JRE만 있으면 됩니다. 멀티스테이지 빌드를 사용하면 JDK를 포함한 빌드 단계를 거친 후, JRE만 포함된 더 작은 이미지를 최종 결과물로 만들 수 있습니다.
이점으로는 이미지 크기 감소로 인한 배포 속도 향상, 보안 강화 (불필요한 도구 제거), 그리고 빌드 캐시 효율성 증대가 있습니다. 각 스테이지별로 캐싱이 가능하기 때문에, 코드 변경이 없는 의존성 설치 단계는 매번 반복하지 않아도 됩니다.
실제 프로젝트에서는, 프론트엔드 빌드 (npm install, build) 후 생성된 정적 파일만 Nginx 이미지에 복사하거나, Go 바이너리를 빌드한 후 scratch 이미지에 복사하는 방식으로 활용할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 Docker / Kubernetes 면접 질문
- Docker Compose는 어떤 상황에서 유용하며, 주요 기능은 무엇인가요?
- Kubernetes란 무엇이며, 컨테이너 오케스트레이션에서 어떤 문제를 해결해 주나요?
- Kubernetes에서 Pod의 역할은 무엇이며, 왜 Pod가 컨테이너의 최소 배포 단위가 되나요?
- Docker 컨테이너의 다양한 네트워크 모드(bridge, host, none, overlay 등)에 대해 설명하고, 각각의 모드가 어떤 상황에 적합하며 어떤 제약사항을 가지는지 비교하여 설명해 주세요.
- Docker에서 데이터를 영속적으로 저장하기 위해 사용되는 Volume과 Bind Mount의 차이점을 설명하고, 각각 어떤 시나리오에서 더 적합한지 구체적인 사용 사례를 들어 비교해 주세요.
- 단일 호스트에서 여러 Docker 컨테이너로 구성된 애플리케이션을 관리할 때 Docker Compose를 사용합니다. Docker Compose 파일(`docker-compose.yml`)에서 `depends_on`, `networks`, `volumes`와 같은 고급 옵션을 사용하여 서비스 간 의존성 관리 및 네트워크 구성을 어떻게 할 수 있는지 설명해 주세요.