인프라 & 클라우드 · 심화
동일한 Dockerfile로 빌드했는데도 CI 환경마다 빌드 캐시가 거의 적중하지 않아 빌드 시간이 길어지는 상황입니다. 레이어 캐시가 무효화되는 원인과, 캐시 적중률을 높이기 위한 Dockerfile 작성 전략을 설명해주세요.
힌트 · 레이어 캐시 무효화 규칙(명령 변경·이전 레이어 변경)과 명령 순서·의존성 설치 분리, 빌드 컨텍스트 관점에서 접근하세요.
Dockerfile레이어 캐시빌드 컨텍스트명령어 순서멀티스테이지 빌드
모범답안
CI 환경마다 빌드 캐시가 잘 적중하지 않는 문제는 주로 Dockerfile의 명령어 순서나 빌드 컨텍스트 변경 때문입니다. Docker는 각 명령어를 독립적인 레이어로 관리하는데, 이전 레이어가 변경되면 이후 레이어의 캐시가 무효화됩니다.
이를 해결하기 위해 몇 가지 전략을 사용할 수 있습니다. 첫째, 자주 변경되지 않는 의존성 설치 명령어를 먼저 배치하여 해당 레이어의 캐시를 최대한 활용합니다. 둘째, 애플리케이션 소스 코드 복사 명령어를 의존성 설치 이후에 배치하여 코드 변경 시에도 의존성 레이어 캐시는 유지되도록 합니다.
또한, 멀티스테이지 빌드를 활용하면 최종 이미지 크기를 줄이고 불필요한 빌드 의존성을 제거하여 캐시 효율성을 높일 수 있습니다. 빌드 컨텍스트를 최소화하는 것도 중요합니다. .dockerignore 파일을 잘 설정하여 불필요한 파일이 빌드 컨텍스트에 포함되지 않도록 하면 빌드 속도 향상과 캐시 무효화 방지에 도움이 됩니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 DevOps / CI·CD 면접 질문
- GitOps란 무엇이며, 전통적인 배포 방식과의 차이점은?
- 서비스 메시(Service Mesh)란 무엇이며, 어떤 문제를 해결하나요?
- Kubernetes의 네트워크 정책(Network Policy)에 대해 설명해주세요.
- 멀티 스테이지 빌드(multi-stage build)는 어떤 문제를 해결하며, 빌더 스테이지와 런타임 스테이지를 분리할 때 이미지 크기와 보안 측면에서 어떤 이점이 있는지 설명해주세요.
- 컨테이너는 호스트 커널을 공유하는데, namespace와 cgroup이 각각 어떤 격리와 자원 제어를 담당하는지, 그리고 이것이 VM 대비 격리 수준이 약하다고 평가되는 이유를 설명해주세요.
- 쿠버네티스에서 Deployment의 롤링 업데이트가 진행되는 도중 일부 트래픽이 5xx를 반환하는 현상이 보고됐습니다. readinessProbe, terminationGracePeriod, preStop 훅이 이 문제와 어떻게 연관되는지 설명해주세요.