내 잡다한 노트

CI / CD 본문

DevOps

CI / CD

peanutwalnut 2024. 11. 19. 16:50

**CI/CD(Continuous Integration and Continuous Deployment/Delivery)**는 소프트웨어 개발 프로세스를 자동화하여 코드 통합, 빌드, 테스트, 배포 과정을 효율적이고 안정적으로 수행할 수 있게 하는 방법론입니다. 이를 통해 개발 주기를 단축하고 품질을 유지하면서 소프트웨어를 빠르게 릴리스할 수 있습니다.

 

CI/CD의 구성 요소

1. CI (Continuous Integration, 지속적 통합)

  • CI는 개발자들이 작업한 코드를 자주 통합하고, 자동화된 빌드 및 테스트를 실행하는 프로세스입니다.

주요 작업:

  1. 코드 변경 감지:
    • 소스 코드가 버전 관리 시스템(Git 등)에 커밋될 때마다 프로세스 시작.
  2. 빌드(Build):
    • 소스 코드를 컴파일하거나 패키지로 묶음.
    • 예: Maven, Gradle, npm, Webpack 등 사용.
  3. 단위 테스트(Unit Test):
    • 새로 추가된 코드와 기존 코드가 잘 동작하는지 확인.
    • 자동화된 단위 테스트 도구를 사용하여 실행.
  4. 코드 품질 분석:
    • 코드 스타일, 품질, 보안 문제 등을 분석.
    • 예: SonarQube, ESLint.
  5. 결과 알림:
    • 테스트 실패 시 개발자에게 즉시 알림.
    • Slack, 이메일, Jira 등과 통합.

2. CD (Continuous Deployment/Delivery, 지속적 배포/전달)

Continuous Delivery (지속적 전달):

  • 자동화된 빌드와 테스트 이후, 운영 환경 배포 직전까지 자동화.
  • 운영 환경에 배포하기 전에 수동 승인 단계가 있음.

Continuous Deployment (지속적 배포):

  • CI/CD의 최종 단계.
  • 코드 변경이 감지되면 모든 테스트와 빌드가 통과한 후 운영 환경까지 자동 배포.
  • 수동 승인 단계 없음.

 

 

CI/CD의 주요 작업 단계

1. 버전 관리

  • Git과 같은 버전 관리 시스템을 사용하여 코드 변경 사항을 관리.
  • 브랜치 전략(예: GitFlow, GitHub Flow)을 통해 협업과 릴리스를 관리.

2. CI 작업 흐름

  1. 코드 통합:
    • 개발자가 코드 변경 사항을 버전 관리 시스템에 푸시(push)하면, CI 도구(Jenkins, GitHub Actions 등)가 이를 감지.
  2. 자동 빌드:
    • 소스 코드를 컴파일 및 패키징.
    • 예: Java 프로젝트는 .jar 또는 .war 파일 생성.
  3. 자동 테스트:
    • 단위 테스트(Unit Test): 개별 기능을 테스트.
    • 통합 테스트(Integration Test): 여러 모듈 간 상호작용 확인.
    • 회귀 테스트(Regression Test): 기존 기능이 영향을 받지 않았는지 확인.
  4. 테스트 보고 및 알림:
    • 테스트 결과를 개발자에게 통보.
    • 테스트 실패 시, 해당 커밋을 되돌리거나 개선 요청.

3. CD 작업 흐름

Continuous Delivery:

  1. 스테이징 환경 배포:
    • 운영 환경과 유사한 환경에서 애플리케이션을 테스트.
    • End-to-End 테스트(E2E Test) 또는 UI 테스트 실행.
  2. 운영 환경 배포 준비:
    • 모든 테스트가 통과하면 운영 환경에 배포할 준비 완료.
    • 배포 승인을 요청(수동 확인).

Continuous Deployment:

  1. 운영 환경 배포:
    • 승인 과정 없이 테스트가 통과된 애플리케이션을 자동으로 운영 환경에 배포.
  2. 모니터링:
    • 애플리케이션의 상태와 성능을 모니터링.
    • 장애 발생 시 롤백(자동 또는 수동).

 

CI/CD 구현 시 고려사항

  1. 테스트 커버리지:
    • 테스트가 충분히 이루어져야 안정적인 배포 가능.
  2. 보안:
    • CI/CD 파이프라인에 비밀번호, API 키 등이 노출되지 않도록 관리.
    • 예: HashiCorp Vault, AWS Secrets Manager 사용.
  3. 모니터링 및 알림:
    • 배포 후 문제가 발생하면 즉시 알림 및 복구.
  4. 환경 분리:
    • 개발, 테스트, 스테이징, 운영 환경을 명확히 구분하여 작업.

'DevOps' 카테고리의 다른 글

Provisioning 이란?  (0) 2024.11.24
DORA 메트릭  (1) 2024.11.23
Stateless 애플리케이션  (0) 2024.11.17
Stateful 애플리케이션  (0) 2024.11.17
DevOps란  (0) 2024.07.24