시니어 DevOps 엔지니어 면접 질문: 프로덕션 시스템 중심

Milad Bonakdar
작성자
Kubernetes, Terraform 상태, GitOps, 보안, 관측성, 장애 대응, 프로덕션 운영 의사결정을 실무형 질문으로 준비하세요.
시니어 DevOps 면접의 핵심
시니어 DevOps 면접은 도구 이름을 아는지보다 프로덕션 시스템을 운영할 수 있는지를 봅니다. Kubernetes 장애, Terraform 상태 보호, GitOps 배포, 클라우드 복원력, 보안 통제, 관측성, 인시던트 대응을 시나리오로 묻는 경우가 많습니다.
이 가이드를 활용해 무엇을 먼저 확인할지, 어떤 위험을 줄일지, 수정이 효과적인지 어떻게 검증할지, 그리고 engineering, security, product 이해관계자에게 어떤 트레이드오프를 설명할지 연습하세요.
고급 Kubernetes
1. Kubernetes 아키텍처와 핵심 구성 요소의 역할을 설명하세요.
답변: Kubernetes는 컨트롤 플레인과 워커 노드로 구성된 아키텍처를 사용합니다. 좋은 시니어 답변은 구성 요소뿐 아니라 원하는 상태가 시스템에서 어떻게 조정되는지까지 설명합니다.
컨트롤 플레인 구성 요소:
- API 서버: Kubernetes 컨트롤 플레인의 프런트엔드이며, 모든 REST 요청을 처리합니다.
- etcd: 클러스터 상태를 위한 분산 키-값 저장소입니다.
- 스케줄러: 리소스 요구 사항에 따라 파드를 노드에 할당합니다.
- 컨트롤러 관리자: 컨트롤러 프로세스(복제, 엔드포인트 등)를 실행합니다.
- 클라우드 컨트롤러 관리자: 클라우드 공급자 API와 통합됩니다.
노드 구성 요소:
- kubelet: 파드에서 컨테이너가 실행되도록 보장하는 에이전트입니다.
- kube-proxy: 파드 통신을 위한 네트워크 규칙을 유지합니다.
- 컨테이너 런타임: 컨테이너를 실행합니다(Docker, containerd, CRI-O).
작동 방식:
- 사용자가 kubectl을 통해 배포를 제출합니다.
- API 서버가 유효성을 검사하고 etcd에 저장합니다.
- 스케줄러가 파드를 노드에 할당합니다.
- 노드의 kubelet이 컨테이너를 만듭니다.
- kube-proxy가 네트워킹을 구성합니다.
희소성: 매우 흔함 난이도: 어려움
2. CrashLoopBackOff 상태에서 멈춘 파드를 어떻게 해결하나요?
답변: 체계적인 디버깅 접근 방식:
일반적인 원인:
- 애플리케이션이 시작 시 충돌
- 누락된 환경 변수
- 잘못된 활성 프로브 구성
- 불충분한 리소스 (OOMKilled)
- 이미지 풀 오류
- 누락된 종속성
수정 예시:
희소성: 매우 흔함 난이도: 중간
3. Kubernetes 네트워킹: 서비스, Ingress 및 네트워크 정책을 설명하세요.
답변: Kubernetes 네트워킹 계층:
서비스: 서비스 노출 유형:
Ingress: HTTP/HTTPS 라우팅:
네트워크 정책: 파드 간 통신 제어:
희소성: 매우 흔함 난이도: 어려움
4. Kubernetes에서 자동 스케일링을 어떻게 구현하나요?
답변: 다양한 자동 스케일링 전략:
Horizontal Pod Autoscaler (HPA):
Vertical Pod Autoscaler (VPA):
Cluster Autoscaler: 보류 중인 파드를 기반으로 클러스터 크기를 자동으로 조정합니다.
희소성: 흔함 난이도: 중간
고급 Terraform
5. Terraform 상태 관리와 모범 사례를 설명하세요.
답변: Terraform 상태는 인프라를 추적하며 운영에 매우 중요합니다.
원격 상태 구성:
상태 잠금:
모범 사례:
1. 상태 파일을 Git에 커밋하지 마세요.
2. 환경에 따라 작업 공간을 사용하세요.
3. 기존 리소스를 가져오세요.
4. 상태 조작 (주의해서 사용하세요)
5. 주요 변경 전에 상태를 백업하세요.
희소성: 매우 흔함 난이도: 어려움
6. 대규모 프로젝트를 위해 Terraform 코드를 어떻게 구성하나요?
답변: 유지 관리를 위한 모듈식 구조:
디렉터리 구조:
모듈 예시:
모듈 사용:
희소성: 흔함 난이도: 어려움
클라우드 아키텍처
7. AWS에서 고가용성 다중 지역 아키텍처를 설계하세요.
답변: 고가용성을 위한 다중 지역 아키텍처:
주요 구성 요소:
1. DNS 및 트래픽 관리:
2. 데이터베이스 복제:
3. 데이터 복제:
설계 원칙:
- 활성-활성 또는 활성-수동 설정
- 상태 검사를 통한 자동 장애 조치
- 최소 지연 시간으로 데이터 복제
- 리전 간 일관된 배포
- 두 리전에 대한 모니터링 및 경고
희소성: 흔함 난이도: 어려움
GitOps 및 CI/CD
8. GitOps와 ArgoCD를 사용하여 이를 구현하는 방법을 설명하세요.
답변: GitOps는 Git을 선언적 인프라 및 애플리케이션을 위한 단일 소스 저장소로 사용합니다.
원칙:
- Git의 선언적 구성
- 자동 동기화
- 모든 변경 사항에 대한 버전 제어
- 지속적인 조정
ArgoCD 구현:
디렉터리 구조:
Kustomization:
장점:
- 감사 추적으로서의 Git
- 간편한 롤백 (git revert)
- 선언적 원하는 상태
- 자동 드리프트 감지
- 다중 클러스터 관리
희소성: 흔함 난이도: 중간
보안 및 규정 준수
9. Kubernetes에서 보안 모범 사례를 어떻게 구현하나요?
답변: 다계층 보안 접근 방식:
1. 파드 보안 표준:
2. RBAC (역할 기반 액세스 제어):
3. 네트워크 정책:
4. 비밀 관리:
5. 보안 컨텍스트:
6. 이미지 스캔:
희소성: 매우 흔함 난이도: 어려움
관찰 가능성 및 SRE
10. 포괄적인 관찰 가능성 스택을 설계하세요.
답변: 관찰 가능성의 세 가지 핵심 요소: 메트릭, 로그, 추적
아키텍처:
1. 메트릭 (Prometheus + Grafana):
2. 로깅 (Loki):
3. 추적 (Jaeger):
4. 경고 규칙:
5. SLO 모니터링:
희소성: 흔함 난이도: 어려움
재해 복구
11. Kubernetes 클러스터에 대한 재해 복구를 어떻게 구현하나요?
답변: 포괄적인 DR 전략:
1. 백업 전략:
2. etcd 백업:
3. 복원 절차:
4. 다중 지역 장애 조치:
5. RTO/RPO 목표:
- RTO (복구 시간 목표): < 1시간
- RPO (복구 시점 목표): < 15분
- 정기적인 DR 훈련 (매월)
- 문서화된 런북
- 가능한 경우 자동 장애 조치
희소성: 흔함 난이도: 어려움
서비스 메시
12. 서비스 메시 아키텍처와 사용 시기를 설명하세요.
답변: 서비스 메시지는 서비스 간 통신을 위한 인프라 계층을 제공합니다.
핵심 구성 요소:
Istio 구현:
사용할 때:
- 마이크로서비스 간 통신이 복잡한 경우
- mTLS, 권한 부여, 트래픽 규칙을 일관되게 적용해야 하는 경우
- 카나리 배포와 트래픽 분할이 필요한 경우
- 서비스 간 호출의 관측성을 통합해야 하는 경우
주의할 점: 서비스 메시에는 복잡성, 지연 시간, 운영 부담이 추가됩니다. 시니어 면접에서는 해당 시스템에서 이 비용을 감수할 만큼 가치가 있는 이유를 설명해야 합니다.
결론
도구 정의만 외우지 마세요. 각 답변에서 프로덕션 문제를 어떻게 분리하고, 어떤 위험을 우선순위에 두며, 수정 결과를 어떻게 검증하고, 장기 개선으로 어떻게 연결할지 보여주는 것이 중요합니다.


