[클라우드] CI/CD 구조
✔ CI/CD(Continuous Integration/Continuous Deployment)
- 애플리케이션 코드를 지속적으로 빌드, 테스트, 배포하는 프로세스를 자동화하는 개발 방법론
- 클라우드 환경에서 자동화를 통해 개발 및 운영을 단순화하는 데 필수적
- CI: Continuous Integration(지속적 통합)
- CD: Continuous Deployment/Delivery(지속적 배포/전달)
1. CI( 지속적 통합)
- 개발자들이 작성한 코드를 정기적으로 하나의 중앙저장소(Git)에 병합하는 과정
- 병합 시 자동으로 빌드 및 테스트 수행
ex: 개발자가 코드를 저장소에 푸시 → CI 시스템(Jenkins)이 코드를 빌드 및 테스트 → 테스트 결과를 즉시 확인
2. CD(지속적 배포/전달)
- CI로부터 생성된 결과물을 실제 배포 환경으로 이동
- 배포 준비 상태, 배포까지 완전한 자동화
- 실제 배포는 관리자의 승인을 통해 수행
- 배포 준비가 되면 즉시 프로덕션 환경에 릴리스
ex: Blue/Green 또는 Canary 배포 방식
3. CI/CD 파이프라인의 흐름
CI/CD 자동화 워크플로
- 소스 단계: 코드 저장소에 변경 사항이 푸시되면 자동으로 트리거.
- 빌드 단계: 코드를 컴파일하고 필요한 아티팩트를 생성.
- 테스트 단계: 유닛 테스트, 통합 테스트, UI 테스트를 실행.
- 배포 단계: 준비된 코드를 스테이징 또는 프로덕션 환경에 배포.
- 모니터링 단계: 배포된 애플리케이션 상태 및 성능을 모니터링.
4. CI/CD의 장점
- 빠른 피드백: 오류를 빠르게 발견하여 해결.
- 높은 품질: 지속적 테스트를 통해 품질 유지.
- 배포 속도 향상: 자동화를 통해 코드 변경 사항을 빠르게 배포.
- 효율성 증가: 반복 작업 제거 및 생산성 향상.
5. AWS에서의 CI/CD
5-1. 구성 요소
- CodeCommit: Git 기반의 코드 저장소.
소스 코드 변경 사항이 푸시될 때 CodePipeline이 자동으로 트리거
- CodeBuild: 소스 코드 빌드 및 테스트.
.yml 파일에 빌드 명령어 정의
컨테이너화된 환경에서 실행. 다양한 언어와 프레임워크 지원
- CodePipeline: 워크플로 자동화.
배포
- CodeDeploy: 애플리케이션 배포.
- Elastic Beanstalk: 애플리케이션을 자동으로 프로비저닝 및 배포.
- ECS/EKS: 컨테이너 기반 애플리케이션 배포.
모니터링
- Amazon CloudWatch: 배포 상태 모니터링, 성능 지표 수집.
- Amazon SNS: 빌드 또는 배포 성공/실패 알림 전송.
5-2. CI/CD 파이프라인 흐름
[CodeCommit] → [CodePipeline] → [CodeBuild] → [CodeDeploy] → [ECS/EC2] → [CloudWatch]
(1) 소스 단계
- 개발자가 AWS CodeCommit 또는 GitHub에 코드 푸시.
- CodePipeline이 변경을 감지하고 파이프라인 시작.
(2) 빌드 단계
- AWS CodeBuild가 소스 코드를 빌드하고 테스트.
- 테스트 성공 시 빌드 아티팩트(S3에 저장) 생성
- 실패 시 SNS로 알림 발송.
(3) 배포 단계
- CodeDeploy 또는 Elastic Beanstalk가 빌드 아티팩트를 가져와 프로덕션 또는 스테이징 환경에 배포.
- 무중단 배포(Rolling Update, Blue/Green Deployment)를 구성하여 가용성 보장.
(4) 모니터링
- CloudWatch로 애플리케이션 상태 및 성능 모니터링.
- 에러나 성능 저하 시 SNS를 통해 알림.
5-3. 확장
- 컨테이너 기반 애플리케이션: CodePipeline + CodeBuild + Amazon ECS/EKS.
- 서버리스 애플리케이션: CodePipeline + AWS SAM CLI + AWS Lambda.
예시:
* 아티팩트:
소스코드 → 실행 가능한 형태로 변환
개발된 애플리케이션의 실행 가능한 파일, 패키지, 배포를 위한 준비된 파일
(.yml) 파일이 빌드 도구(Gradle, Maven)를 통해 컴파일되고 실행 가능한 파일(.jar)로 변환됨.
ex: .jar .zip .exe .war