내 잡다한 노트
CI / CD 본문
**CI/CD(Continuous Integration and Continuous Deployment/Delivery)**는 소프트웨어 개발 프로세스를 자동화하여 코드 통합, 빌드, 테스트, 배포 과정을 효율적이고 안정적으로 수행할 수 있게 하는 방법론입니다. 이를 통해 개발 주기를 단축하고 품질을 유지하면서 소프트웨어를 빠르게 릴리스할 수 있습니다.
CI/CD의 구성 요소
1. CI (Continuous Integration, 지속적 통합)
- CI는 개발자들이 작업한 코드를 자주 통합하고, 자동화된 빌드 및 테스트를 실행하는 프로세스입니다.
주요 작업:
- 코드 변경 감지:
- 소스 코드가 버전 관리 시스템(Git 등)에 커밋될 때마다 프로세스 시작.
- 빌드(Build):
- 소스 코드를 컴파일하거나 패키지로 묶음.
- 예: Maven, Gradle, npm, Webpack 등 사용.
- 단위 테스트(Unit Test):
- 새로 추가된 코드와 기존 코드가 잘 동작하는지 확인.
- 자동화된 단위 테스트 도구를 사용하여 실행.
- 코드 품질 분석:
- 코드 스타일, 품질, 보안 문제 등을 분석.
- 예: SonarQube, ESLint.
- 결과 알림:
- 테스트 실패 시 개발자에게 즉시 알림.
- Slack, 이메일, Jira 등과 통합.
2. CD (Continuous Deployment/Delivery, 지속적 배포/전달)
Continuous Delivery (지속적 전달):
- 자동화된 빌드와 테스트 이후, 운영 환경 배포 직전까지 자동화.
- 운영 환경에 배포하기 전에 수동 승인 단계가 있음.
Continuous Deployment (지속적 배포):
- CI/CD의 최종 단계.
- 코드 변경이 감지되면 모든 테스트와 빌드가 통과한 후 운영 환경까지 자동 배포.
- 수동 승인 단계 없음.
CI/CD의 주요 작업 단계
1. 버전 관리
- Git과 같은 버전 관리 시스템을 사용하여 코드 변경 사항을 관리.
- 브랜치 전략(예: GitFlow, GitHub Flow)을 통해 협업과 릴리스를 관리.
2. CI 작업 흐름
- 코드 통합:
- 개발자가 코드 변경 사항을 버전 관리 시스템에 푸시(push)하면, CI 도구(Jenkins, GitHub Actions 등)가 이를 감지.
- 자동 빌드:
- 소스 코드를 컴파일 및 패키징.
- 예: Java 프로젝트는 .jar 또는 .war 파일 생성.
- 자동 테스트:
- 단위 테스트(Unit Test): 개별 기능을 테스트.
- 통합 테스트(Integration Test): 여러 모듈 간 상호작용 확인.
- 회귀 테스트(Regression Test): 기존 기능이 영향을 받지 않았는지 확인.
- 테스트 보고 및 알림:
- 테스트 결과를 개발자에게 통보.
- 테스트 실패 시, 해당 커밋을 되돌리거나 개선 요청.
3. CD 작업 흐름
Continuous Delivery:
- 스테이징 환경 배포:
- 운영 환경과 유사한 환경에서 애플리케이션을 테스트.
- End-to-End 테스트(E2E Test) 또는 UI 테스트 실행.
- 운영 환경 배포 준비:
- 모든 테스트가 통과하면 운영 환경에 배포할 준비 완료.
- 배포 승인을 요청(수동 확인).
Continuous Deployment:
- 운영 환경 배포:
- 승인 과정 없이 테스트가 통과된 애플리케이션을 자동으로 운영 환경에 배포.
- 모니터링:
- 애플리케이션의 상태와 성능을 모니터링.
- 장애 발생 시 롤백(자동 또는 수동).
CI/CD 구현 시 고려사항
- 테스트 커버리지:
- 테스트가 충분히 이루어져야 안정적인 배포 가능.
- 보안:
- CI/CD 파이프라인에 비밀번호, API 키 등이 노출되지 않도록 관리.
- 예: HashiCorp Vault, AWS Secrets Manager 사용.
- 모니터링 및 알림:
- 배포 후 문제가 발생하면 즉시 알림 및 복구.
- 환경 분리:
- 개발, 테스트, 스테이징, 운영 환경을 명확히 구분하여 작업.
'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 |