Kubernetes 주니어 테스트·코드품질 기술면접
새 면접Q. Kubernetes ConfigMap과 Secret을 사용하는 애플리케이션의 단위 테스트를 작성할 때, 실제 Kubernetes 환경 없이 이러한 설정값들을 어떻게 테스트할 수 있나요? 테스트 전략과 구체적인 방법을 설명해주세요.
애플리케이션이 환경변수나 파일로 설정을 읽어오는 방식에 주목하고, 테스트 환경에서 이를 어떻게 모킹할 수 있는지 생각해보세요.
ConfigMap과 Secret은 최종적으로 환경변수나 볼륨 마운트를 통해 애플리케이션에 전달되므로, 단위 테스트에서는 이러한 인터페이스를 모킹하면 됩니다. 환경변수의 경우 테스트 코드에서 직접 설정하거나 .env 파일을 사용하고, 파일 마운트의 경우 임시 디렉토리에 테스트용 파일을 생성합니다. 설정 로딩 로직을 별도 모듈로 분리하여 의존성 주입 패턴을 적용하면 테스트가 더 용이합니다. 통합 테스트 단계에서는 kind나 minikube 같은 로컬 클러스터에 실제 ConfigMap/Secret을 생성하여 전체 흐름을 검증합니다. 이렇게 단위 테스트와 통합 테스트를 분리하면 빠른 피드백과 실제 환경 검증을 모두 확보할 수 있습니다.
- • 환경변수와 파일 마운트 인터페이스를 모킹하여 테스트
- • 설정 로딩 로직을 별도 모듈로 분리하고 의존성 주입 패턴 적용
- • 단위 테스트는 모킹, 통합 테스트는 실제 리소스로 검증
마이크로서비스 배포 시 환경별 설정을 ConfigMap으로 관리하며, 배포 전 설정값 로딩 로직의 정확성을 검증하기 위해 사용합니다.
ConfigMap이나 Secret의 값이 런타임 중에 변경되었을 때 애플리케이션이 이를 감지하고 재로딩하는 기능을 테스트하려면 어떻게 해야 할까요?
Q. 여러 개의 YAML 파일로 분산되어 있는 Kubernetes 리소스 정의에서 중복된 라벨, 어노테이션, 리소스 제한 등이 반복적으로 나타나고 있습니다. 이를 DRY(Don't Repeat Yourself) 원칙에 맞게 리팩토링하기 위한 방법들을 제시하고, 각 방법의 적용 시나리오를 설명해주세요.
Kubernetes 네이티브 기능과 외부 템플릿 도구들을 함께 고려해보세요.
첫 번째 방법은 Kustomize를 사용하여 base와 overlay 구조로 분리하는 것입니다. 공통 리소스 정의를 base에 두고, 환경별 차이만 overlay에서 패치하면 중복을 제거할 수 있습니다. 두 번째는 Helm Chart를 사용하여 values.yaml에 변수를 정의하고 템플릿화하는 방법으로, 복잡한 로직이 필요한 경우 적합합니다. 세 번째는 yq나 jsonnet 같은 YAML 전처리 도구를 사용하여 공통 값을 변수로 추출하고 병합하는 방법입니다. 단순한 중복 제거는 Kustomize가 적합하고, 다양한 환경과 복잡한 조건 분기가 필요하면 Helm이 유리합니다. 리팩토링 후에는 반드시 kubectl diff나 helm diff로 변경사항을 검증해야 합니다.
- • Kustomize의 base/overlay 패턴으로 환경별 차이 관리
- • Helm Chart로 복잡한 템플릿 로직 구현
- • 리팩토링 후 kubectl diff로 변경사항 검증 필수
개발, 스테이징, 프로덕션 환경의 리소스 정의를 관리할 때 공통 부분을 재사용하고 환경별 차이만 오버라이드하여 유지보수성을 높입니다.
Kustomize와 Helm 중 하나를 선택해야 한다면 어떤 기준으로 결정하시겠습니까?
Q. Deployment에 정의한 Readiness Probe와 Liveness Probe가 의도대로 동작하는지 배포 전에 검증하는 방법을 설명해주세요. 로컬 환경과 CI/CD 파이프라인에서 각각 어떻게 테스트할 수 있나요?
Probe는 결국 HTTP 엔드포인트나 명령어 실행이므로, 애플리케이션을 직접 실행하여 테스트할 수 있습니다.
로컬 환경에서는 먼저 애플리케이션을 Docker 컨테이너로 실행하고, Probe에 정의된 HTTP 엔드포인트에 curl이나 wget으로 직접 요청을 보내 응답 코드와 내용을 확인합니다. exec 타입 Probe의 경우 docker exec 명령으로 컨테이너 내부에서 동일한 명령을 실행해봅니다. CI/CD 파이프라인에서는 테스트 단계에서 컨테이너를 실행하고 자동화된 스크립트로 Probe 엔드포인트를 호출하여 예상 응답을 검증합니다. 또한 kind나 minikube에 실제로 배포하여 kubectl describe pod로 Probe 실패 이벤트를 확인하거나, kubectl get pod의 READY 상태 변화를 모니터링하는 통합 테스트를 수행할 수 있습니다. 의도적으로 Probe를 실패시켜 재시작이나 트래픽 제외가 정상 동작하는지도 확인해야 합니다.
- • 로컬에서 컨테이너 실행 후 curl로 Probe 엔드포인트 직접 테스트
- • CI/CD에서 자동화 스크립트로 Probe 응답 검증
- • 의도적 실패 시나리오를 통해 재시작 및 트래픽 제외 동작 확인
애플리케이션 배포 시 잘못된 Probe 설정으로 인한 무한 재시작이나 트래픽 유입 실패를 방지하기 위해 배포 전 검증합니다.
Readiness Probe와 Liveness Probe의 initialDelaySeconds, periodSeconds 같은 타이밍 값을 어떻게 결정하고 검증하시겠습니까?
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!