CI/CD (Continuous Integration / Continuous Deployment) 개념과 실무 활용 능력은 단순한 개념 암기 수준을 넘어서, 아키텍처 구성, 트러블슈팅, 보안/품질 통제, DevOps 문화 이해까지 포함합니다. 아래에 직무역량 평가 대비용으로 구성한 정리와 문제 예시를 함께 제공하겠습니다.
📌 CI/CD 핵심 개념 정리 (TA 직무역량 기준)
1. CI (지속적 통합: Continuous Integration)
- 개발자들이 변경한 코드를 자주 통합하고 자동 빌드/테스트하는 프로세스
- 주요 툴: Git, Jenkins, GitHub Actions, GitLab CI, CircleCI
- 핵심 활동:
- PR(풀리퀘스트) 발생 시 자동 빌드 및 유닛 테스트 수행
- 코드 퀄리티 검사 (SonarQube, ESLint 등)
- 아티팩트 생성 (jar, docker image 등)
2. CD (지속적 배포 or 지속적 전달)
- 지속적 전달(Delivery): 운영 배포 직전까지 자동화 (staging까지 자동)
- 지속적 배포(Deployment): 운영 환경까지 자동화 (무중단 배포 포함)
- 주요 기법:
- Blue-Green 배포
- Canary 배포
- Rolling Update
- Helm, Kustomize, ArgoCD 등 활용
3. CI/CD 파이프라인 구성 요소
- Source: Git, SVN
- Build: Maven, Gradle, npm
- Test: JUnit, Selenium, JMeter
- Package: Docker
- Deploy: Kubernetes, Ansible, Terraform, ArgoCD
📂 실무 중심 체크포인트 (TA 평가 대비)
| 보안 강화 | Secrets 관리 (예: GitHub Actions의 Secrets, HashiCorp Vault, Sealed Secrets) |
| 품질 보장 | Static Code Analysis, 테스트 커버리지, 보안 스캔(SonarQube, Trivy) |
| 속도 최적화 | 병렬 빌드, 캐시 사용 (actions/cache), selective job 실행 |
| 장애 대응 | 배포 실패 시 롤백 전략, 상태 확인 프로브 사용, 알림 설정 |
| IaC 연계 | Terraform, Ansible과 CI/CD 연계로 환경 자동 구성 |
| GitOps 모델 | Git → Source of Truth로 하여 ArgoCD로 배포 동기화 |
🧠 직무역량 평가 예상문제 (객관식 + 시나리오형 혼합)
✅ 객관식 문제 예시
문항 1) 다음 중 CI/CD 파이프라인에서 Test 단계에 해당하는 작업은?
① Docker 이미지 빌드
② JMeter로 부하 테스트 수행
③ GitHub 커밋
④ Helm으로 배포 수행
→ 정답: ②
문항 2) 다음 중 GitOps 모델에 해당하는 툴은?
① Jenkins
② ArgoCD
③ Terraform
④ Nexus
→ 정답: ②
문항 3) 다음 중 무중단 배포 기법으로 적절한 것은?
① A/B 테스팅
② Blue-Green 배포
③ 패치 릴리즈
④ Build 시 lint 적용
→ 정답: ②
✅ 시나리오 기반 문제 예시
문항 7)
현재 운영 중인 서비스는 Kubernetes 상에서 ArgoCD를 통해 배포되고 있으며, Canary 배포 전략을 사용 중이다. 신규 기능 배포 이후 일부 사용자에게 오류가 발생했다.
가장 적절한 조치 방안은?
→ 정답: Canary 배포 중인 신규 리비전을 롤백하고, 오류 로그를 분석하여 수정한 후 재배포한다.
문항 8)
CI 단계에서 SonarQube 코드 스캔 결과, 심각한 보안 취약점이 발견되어도 배포가 진행되고 있다. 개선을 위한 조치로 적절한 것은?
① 스캔을 제거하고 배포 속도를 높인다.
② 스캔 결과를 단순 보고서로만 활용한다.
③ 빌드 실패 조건에 심각도 기준을 추가한다.
④ 스캔 결과를 저장소에 커밋한다.
→ 정답: ③
🧾 암기카드 요약 (Ctrl+F용 키워드)
- CI: 지속적 통합, 자동 빌드, 유닛 테스트
- CD: 지속적 배포, Blue-Green, Canary
- GitOps: ArgoCD, Declarative 배포
- 빌드 도구: Maven, Gradle
- 배포 툴: Helm, Kustomize, ArgoCD
- 보안 도구: Vault, Sealed Secrets, Trivy
- 품질 관리: SonarQube, 테스트 커버리지
- 배포 전략: Rolling, Blue-Green, Canary
- 장애 대응: 롤백, 알림, 상태 체크(Probe)
- 속도 최적화: 캐시, 병렬 빌드
- 연계 자동화: Terraform, Ansible, Docker
- GitHub Actions 구성요소: Workflow, Job, Step, Runner
📌 보완 학습 추천
| GitHub Actions 고급 구성 | Matrix 빌드, Environment Protection Rules, Manual Trigger |
| 보안 위협 대응 | Supply Chain 공격 대응 방안 (예: SLSA, Sigstore) |
| 멀티 클러스터 배포 | K8s 멀티 클러스터 + ArgoCD Sync |
| GitOps 정책 관리 | ArgoCD Sync Policy, Drift 감지, RBAC 설정 |
| 실전 장애 조치 | 배포 실패 시 Previous Revision Rollback, 상태 Probe 설정 |
📘 CI/CD 실무 시나리오 기반 문제집 (총 25문항)
🔹 문항 01 (중)
Q. 개발자가 GitHub에 코드를 Push했는데 Jenkins 빌드가 자동으로 실행되지 않았다.
Webhooks 설정은 되어 있다. 가장 먼저 확인해야 할 사항은?
✅ 정답: GitHub Webhook URL과 Jenkins Job Trigger 설정 일치 여부
💡 해설: Webhook URL 오탈자나, Jenkins Job이 Push 이벤트를 수신하도록 설정되지 않으면 트리거되지 않음.
🔹 문항 02 (하)
Q. Jenkins Pipeline 중 Docker 빌드 단계에서 다음 오류 발생: permission denied while trying to connect to the Docker daemon socket
어떤 설정이 잘못되었는가?
✅ 정답: Jenkins 실행 계정이 docker 그룹에 포함되지 않음
💡 해설: Docker 명령어는 /var/run/docker.sock 접근 권한이 필요함.
🔹 문항 03 (중)
Q. GitHub Actions에서 actions/cache를 사용 중인데도 매번 npm install 시간이 오래 걸린다. 원인으로 가장 적절한 것은?
✅ 정답: cache key 설정이 변경되어 매번 캐시 미스 발생
💡 해설: key 값이 변경되면 기존 캐시를 사용하지 못함. restore-keys도 설정 필요.
🔹 문항 04 (중)
Q. ArgoCD에서 앱이 계속 ‘OutOfSync’ 상태로 표시된다. 가장 가능성 높은 원인은?
✅ 정답: Git 저장소와 K8s 클러스터 상태 불일치
💡 해설: GitOps 방식에서는 Git이 Source of Truth이며, 수동 변경 시 Drift 발생.
🔹 문항 05 (중)
Q. Jenkins 빌드 완료 후 Docker Hub로 푸시가 실패한다. 에러는 unauthorized: authentication required이다. 해결 방안은?
✅ 정답: Docker Hub 로그인 credential 설정 확인
💡 해설: Jenkins에서 Docker push를 위해 credential binding 필요
🔹 문항 06 (중)
Q. Canary 배포 중 신규 버전에 오류가 발견되었다. 즉시 조치로 적절한 것은?
✅ 정답: Canary 트래픽을 0%로 줄이고 이전 버전으로 롤백
💡 해설: Canary는 점진 배포 방식이므로 트래픽 분산 제어 가능
🔹 문항 07 (상)
Q. Jenkins에서 SonarQube 분석 후 코드 품질 게이트에 실패했는데도 파이프라인이 성공으로 종료된다. 원인은?
✅ 정답: sonar.qualitygate.wait=true 설정이 빠졌음
💡 해설: 품질 게이트를 빌드 실패 조건으로 인식하려면 설정 필요
🔹 문항 08 (상)
Q. CI/CD 파이프라인 중, staging 환경 배포는 성공했으나 운영 배포는 무시되었다. GitHub Actions를 사용 중이다. 어떤 설정이 필요할까?
✅ 정답: environment protection rule 설정에서 승인자가 없거나 조건 미충족
💡 해설: 운영 환경은 Manual Approval이나 조건 설정 필요
🔹 문항 09 (중)
Q. Helm 배포 시 다음 오류 발생: Error: UPGRADE FAILED: "my-app" has no deployed releases. 원인은?
✅ 정답: 처음부터 upgrade 명령 사용 (install이 아님)
💡 해설: 처음 설치 시에는 helm install, 이후부터 upgrade 사용
🔹 문항 10 (하)
Q. Kubernetes에서 CI/CD로 배포된 앱이 지속적으로 재시작된다. CrashLoopBackOff 상태가 반복된다. 원인은?
✅ 정답: readinessProbe 설정 실패로 재기동 발생
💡 해설: 준비되지 않은 상태로 트래픽을 받으면 재시작될 수 있음
🔹 문항 11 (중)
Q. GitOps 배포 시 Git에는 배포 YAML이 정상 등록되어 있으나 실제 클러스터에는 적용되지 않는다. 가장 가능성 높은 원인은?
✅ 정답: ArgoCD sync policy가 manual로 설정되어 있음
💡 해설: auto sync를 설정하지 않으면 자동 반영되지 않음
🔹 문항 12 (상)
Q. 빌드 파이프라인에서 SCA(Software Composition Analysis) 결과 보안 이슈가 감지되었으나, 개발자가 무시하고 운영 반영했다. 개선 방안은?
✅ 정답: 보안 등급 기준으로 배포 차단 조건 설정
💡 해설: Trivy, Anchore 등의 취약점 스캔을 Quality Gate로 연동
🔹 문항 13 (중)
Q. Jenkinsfile 내 parallel 블록이 병렬로 수행되지 않고 순차 실행된다. 원인은?
✅ 정답: 해당 agent 설정이 공유 executor 제한
💡 해설: 각 Job 실행 환경이 격리되어야 병렬 처리 가능
🔹 문항 14 (중)
Q. Terraform을 통해 클라우드 리소스를 생성 중인데, 기존 자원 삭제 경고가 나타난다. 주의사항은?
✅ 정답: terraform plan에서 Drift 여부를 검토
💡 해설: 수동 변경 → Terraform이 상태 불일치로 판단하고 삭제 시도
🔹 문항 15 (상)
Q. 동일 서비스에 대해 staging과 production 환경의 인프라 구성이 달라 배포 실패가 자주 발생한다. 개선 방안은?
✅ 정답: 환경별 IaC 코드 및 Manifest를 모듈화하여 통일성 유지
💡 해설: Kustomize, Helm values 파일 등으로 환경별 구성 추상화
🔹 문항 16 (상)
Q. Jenkins 서버의 master 노드 디스크가 가득 차 빌드가 실패했다. 예방 방안은?
✅ 정답: 워크스페이스 정리 및 외부 스토리지로 artifact 분리
💡 해설: 빌드 캐시, 로컬 저장물 등을 주기적으로 정리
🔹 문항 17 (중)
Q. CI 파이프라인에서 테스트 커버리지가 계속 낮게 나와 배포가 차단된다. 해결 방안은?
✅ 정답: 테스트 코드 보강 후 커버리지 리포트 연동 검증
💡 해설: Jacoco, Coverage.py 등을 통해 커버리지 기준 적용 가능
🔹 문항 18 (상)
Q. Helm을 이용한 배포에서 일부 노드에서만 배포 실패가 발생한다. 무엇을 점검해야 할까?
✅ 정답: nodeSelector 또는 taint 설정 불일치
💡 해설: 노드 선택 조건이 일치하지 않으면 배포 불가
🔹 문항 19 (하)
Q. GitHub Actions 실행 중 다음 메시지가 출력됨: job was skipped due to condition. 원인은?
✅ 정답: if 조건이 false로 평가됨
💡 해설: 브랜치 조건이나 변수 조건을 확인
🔹 문항 20 (중)
Q. ArgoCD 배포 후 5분 내 모든 pod가 다시 생성되었다. 가장 가능성 높은 원인은?
✅ 정답: ConfigMap 변경에 따른 rollout 트리거
💡 해설: Deployment에는 ConfigMap 변경을 감지하는 메커니즘이 포함되어야 함
🔹 문항 21 (상)
Q. GitHub Actions 워크플로우가 트리거되지 않는다. 다음 중 가능성 높은 원인은?
✅ 정답: on: 이벤트 설정이 push가 아닌 다른 이벤트로 지정됨
💡 해설: 워크플로우 트리거 조건을 반드시 확인해야 함
🔹 문항 22 (중)
Q. Jenkins 빌드 히스토리를 장기 보관하고 싶다. 적절한 설정은?
✅ 정답: buildDiscarder 설정에서 보관 일수 및 횟수 증가
💡 해설: 기본 설정은 자동 삭제되므로 보관 조건 명시 필요
🔹 문항 23 (상)
Q. GitOps 방식에서 Rollback이 필요한 경우, 가장 바람직한 절차는?
✅ 정답: Git에서 이전 커밋으로 revert 후 ArgoCD가 자동 반영하도록 유도
💡 해설: Git이 Source of Truth이므로 직접 클러스터 변경은 권장하지 않음
🔹 문항 24 (중)
Q. Jenkins slave 노드가 자주 연결 끊김 상태가 된다. 가장 먼저 확인할 것은?
✅ 정답: SSH 연결 설정 및 KeepAlive 옵션
💡 해설: Jenkins와 slave 간 연결은 주로 SSH로 유지됨
🔹 문항 25 (상)
Q. 운영 배포 후 즉시 사용자 장애 신고가 접수됐다. CI/CD 측면에서 가장 먼저 점검할 항목은?
✅ 정답: 최근 배포 내역과 변경된 코드/환경 변수 비교
💡 해설: 코드나 설정이 운영 반영되었는지 확인하는 것이 가장 빠름
🧠 CI/CD 실무 시나리오 암기카드 요약
| Webhook 미작동 | GitHub Webhook URL과 Jenkins Job Trigger 설정 확인 |
| Docker socket 에러 | Jenkins 계정이 docker 그룹에 포함되어야 함 |
| npm 캐시 미사용 | cache key가 변경되면 캐시 미스 발생 |
| ArgoCD OutOfSync | Git과 클러스터 간 상태 불일치 발생 |
| Docker push 실패 | Jenkins의 Docker Hub 로그인 자격 증명 필요 |
| Canary 오류 조치 | 트래픽 0%로 줄이고 롤백 수행 |
| 품질게이트 무시 | sonar.qualitygate.wait=true 설정 누락 |
| 운영 자동배포 안됨 | GitHub Actions 환경 승인 조건 확인 |
| Helm upgrade 실패 | 최초 배포는 install 명령 필요 |
| CrashLoopBackOff | readinessProbe 실패 시 재시작 발생 |
| GitOps 반영 안됨 | ArgoCD auto sync 설정 확인 |
| 보안 취약 무시 배포 | SCA 결과를 Quality Gate로 연결 |
| Jenkins 병렬 미작동 | agent의 executor 제한 확인 |
| Terraform Drift | terraform plan으로 삭제 경고 원인 확인 |
| 환경 불일치 배포 실패 | Helm/Kustomize로 환경 모듈화 필요 |
| 디스크 가득참 | 워크스페이스 정리 및 외부 저장소 분리 필요 |
| 커버리지 미달 | 테스트 코드 보강, 커버리지 기준 적용 |
| 노드별 배포 실패 | nodeSelector 또는 taint 조건 확인 |
| GitHub Actions skip | if 조건 false로 평가됨 |
| ConfigMap 변경 시 재배포 | rollout 트리거 연동 필요 |
| 워크플로우 미작동 | on: 트리거 이벤트 확인 |
| Jenkins 빌드 보관 | buildDiscarder 설정 변경 |
| GitOps 롤백 | Git revert → ArgoCD auto sync 유도 |
| Jenkins Slave 끊김 | SSH keepalive 설정 확인 |
| 운영 장애 발생 시 | 최근 배포 내역 및 환경변수 변경사항 우선 확인 |