[TIL] CI·CD개념 정리-2025.09.15

2025. 9. 15. 17:15대외활동/인공지능사관학교

728x90
반응형
SMALL

1. CI·CD의 기본 철학

  • CI (Continuous Integration, 지속적 통합)
    → 개발자들이 코드를 자주(하루에도 여러 번) 메인 브랜치에 통합하고, 자동으로 빌드 및 테스트를 실행하여 문제를 빠르게 발견.
  • CD (Continuous Delivery/Deployment, 지속적 배포/전개)
    → 통합된 코드를 자동으로 패키징하여 운영 환경까지 배포(Delivery), 또는 실제 서비스에 무중단으로 반영(Deployment).

핵심

  1. 빠른 피드백 루프 (문제를 빨리 발견하고 고친다)
  2. 자동화와 표준화 (사람이 하면 실수하는 부분을 기계에게 맡긴다)
  3. 재현성과 안정성 (동일한 코드/환경에서 항상 같은 결과가 나온다)

 

2. CI·CD 파이프라인 단계별 과정

① 소스 관리 (Source Control)

  • 과정: 개발자가 Git 브랜치에 코드를 푸시
  • 필수 개념:
    • Git 브랜치 전략 (Git-flow, Trunk-based development)
    • Pull Request / Merge Request → 코드 리뷰 자동화

 

② 빌드 (Build)

  • 과정: 코드 → 실행 가능한 산출물 (예: Docker 이미지, JAR 파일)
  • 필수 개념:
    • Build automation (Maven, Gradle, npm, Docker build)
    • Infrastructure as Code (IaC) → 환경 일관성 보장

 

③ 테스트 (Test)

  • 과정: 자동화된 테스트 실행
  • 종류:
    • Unit Test (단위 기능 확인)
    • Integration Test (모듈 간 상호작용 확인)
    • End-to-End Test (실제 사용자 시나리오 검증)
  • 필수 개념:
    • 테스트 피라미드 (단위 > 통합 > E2E 순 비중)
    • Code Quality (Lint, SonarQube 같은 정적 분석 도구)

 

④ 배포 (Deploy)

  • 과정: 빌드된 산출물을 Staging → Production 환경으로 자동 배포
  • 배포 전략:
    • Blue-Green Deployment: 두 개의 동일한 환경 운영, 트래픽 스위칭
    • Canary Release: 일부 사용자에게만 배포, 문제 없으면 전체 적용
    • Rolling Update: 컨테이너를 하나씩 교체하며 배포
  • 필수 개념:
    • 무중단 배포 (Zero-downtime)
    • Rollback 전략 (배포 실패 시 이전 버전 복원)

 

⑤ 모니터링 (Monitoring & Feedback)

  • 과정: 배포 후 서비스 상태/성능/오류 추적
  • 필수 개념:
    • Observability (가시성) → Metrics, Logs, Traces
    • SLA/SLO/SLI 개념 (서비스 신뢰성 지표)
    • Alerting (문제 발생 시 알림)

 

3. CI·CD 파이프라인 아키텍처

[개발자 Commit]

[CI 서버 (GitHub Actions / Jenkins)]

Build & Test

Artifact 생성 (Docker Registry, Nexus 등)

[CD 서버 (ArgoCD / Spinnaker)]

Deploy (Kubernetes / VM / Cloud)

Monitoring & Alert

4. 주요 도구와 실무 적용

  • CI 서버: Jenkins, GitHub Actions, GitLab CI, CircleCI
  • Artifact 저장소: Docker Hub, AWS ECR, Naver Cloud CCR
  • 배포 도구: ArgoCD, Spinnaker, Helm, Terraform (IaC)
  • 관찰(Observability): Prometheus, Grafana, ELK(Elastic Stack)

 

5. 알아야 할 이론적 개념

  1. 파이프라인 설계 원칙
    • 작은 단위로 빠르게 실패(Fail Fast)
    • 병렬 실행 가능 여부 고려 (예: 유닛 테스트 병렬화)
    • 환경 일관성 (Dev = Staging = Prod)
  2. 인프라 개념
    • 컨테이너화(Docker)
    • 오케스트레이션(Kubernetes)
    • IaC(Terraform, Ansible)
  3. 릴리즈 관리
    • 버전 관리 (Semantic Versioning)
    • Feature flag (기능 토글로 점진적 배포)

 

6. 정리

  • CI는 코드의 품질을 보장하는 것,
  • CD는 코드가 안정적으로 사용자에게 전달되도록 하는 것.
  • 둘 다 자동화를 통해 개발 속도↑, 안정성↑, 리스크↓ 효과를 가져옴.
728x90
반응형
LIST