클라우드/공부

[클라우드] CI/CD 구조

코딩하는 도람쥐 2024. 11. 25. 23:44
728x90
반응형

✔ 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 자동화 워크플로

  1. 소스 단계: 코드 저장소에 변경 사항이 푸시되면 자동으로 트리거.
  2. 빌드 단계: 코드를 컴파일하고 필요한 아티팩트를 생성.
  3. 테스트 단계: 유닛 테스트, 통합 테스트, UI 테스트를 실행.
  4. 배포 단계: 준비된 코드를 스테이징 또는 프로덕션 환경에 배포.
  5. 모니터링 단계: 배포된 애플리케이션 상태 및 성능을 모니터링.

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) 소스 단계

  1. 개발자가 AWS CodeCommit 또는 GitHub에 코드 푸시.
  2. CodePipeline이 변경을 감지하고 파이프라인 시작.

(2) 빌드 단계

  1. AWS CodeBuild가 소스 코드를 빌드하고 테스트.
    • 테스트 성공 시 빌드 아티팩트(S3에 저장) 생성
    • 실패 시 SNS로 알림 발송.

(3) 배포 단계

  1. CodeDeploy 또는 Elastic Beanstalk가 빌드 아티팩트를 가져와 프로덕션 또는 스테이징 환경에 배포.
  2. 무중단 배포(Rolling Update, Blue/Green Deployment)를 구성하여 가용성 보장.

(4) 모니터링

  1. CloudWatch로 애플리케이션 상태 및 성능 모니터링.
  2. 에러나 성능 저하 시 SNS를 통해 알림.

5-3. 확장 

  • 컨테이너 기반 애플리케이션: CodePipeline + CodeBuild + Amazon ECS/EKS.
  • 서버리스 애플리케이션: CodePipeline + AWS SAM CLI + AWS Lambda.

예시:


 

* 아티팩트:

소스코드 →  실행 가능한 형태로 변환

개발된 애플리케이션의 실행 가능한 파일, 패키지, 배포를 위한 준비된 파일

(.yml) 파일이 빌드 도구(Gradle, Maven)를 통해 컴파일되고 실행 가능한 파일(.jar)로 변환됨. 

ex: .jar .zip .exe .war 

728x90
반응형