본문 바로가기

Minding's Programming/AWS

[AWS] CI / CD (CodeCommit, CodeBuild, CodeDeploy, CodePipeline)

728x90
반응형

CI / CD

CI와 CD는 프로그램을 배포하는 과정에서 많이 쓰이는 용어다. 그 개념에 대해 알아보자.

 

CI (continuous Integration)

모든 개발자가 개발한 코드를 공유 리포지토리에 하루에도 여러 번 코드를 커밋하고 병합하는 것으로, 빌드 및 테스트 자동화 과정을 의미한다.

CD (continuous Delivery)

개발팀이 짧은 주기로 소프트웨어를 개발하고 언제든지 운영환경으로 안정적 배포하는 것으로, 배포 자동화 과정을 의미한다.

 

즉, CI와 CD는 하나의 통합된 과정이며, '개발 - 테스트 - 배포 - 운영 - 개발'의 흐름이 반복되는 과정이라고 생각할 수 있다.

출처: AWS 공식 문서

위는 AWS EC2에 웹 애플리케이션을 배포하는 파이프라인이다. Github 리포지토리에서 변경 사항을 커밋해 AWS 리소스에 엑세스하고, S3에 업로드한 뒤 CodeDeploy를 통해 EC2에 배포하는 방식이다. 이는 AWS를 이용한 CI/CD 방식 중 하나의 예시일 뿐이다. 아래에서 AWS에서 제공하는 CI/CD 관련 서비스는 어떤 것이 있는지 알아보자.

 

CodeCommit

CodeCommit은 클라우드에서 자산(문서, 소스 코드 등)을 비공개로 저장하여 관리하는 데 사용할 수 있도록 AWS에서 호스팅되는 버전 관리 서비스이다. Github(git)을 사용하는 방법과 거의 유사하다.

 

CodeBuild

CodeBuild는 클라우드 상 완전관리형 빌드 서비스로, 소스 코드를 컴파일하고 단위 테스트 실행하며 배포 준비가 완료된 아티팩트를 생성한다. (빌드 - 테스트 - 배포 도구에게 연결까지 실행가능)

 

CodeBuild에서는 자체 빌드 서버를 프로비저닝, 관리/확장할 필요가 없으며, Apache Maven, Gradle 등과 같이 널리 사용되는 프로그래밍 언어 및 빌드 도구에 맞게 사전 패키지된 빌드 환경을 제공한다.

 

또한 빌드 환경을 사용자 지정해 사용자 고유의 빌드 도구를 사용하는 것도 가능하며, 최대 빌드 요청 수에 맞게 자동으로 확장하는 기능도 가지고 있다.

출처: AWS 공식 홈페이지 - 빌드와 테스트 과정에서 codebuild를 이용하는 모습이다.

 

CodeBuild의 작동방식은 위 다이어 그램과 같다.

  1. CodeBuild 입력으로 빌드 프로젝트 제공(소스 코드, 사용할 빌드 환경, 실행할 빌드 명령 등)
  2. 위에서 전달한 프로젝트를 사용해 빌드 환경 생성
  3. 소스 코드 다운로드 및 빌드 사양(buildspec) 사용
  4. 빌드 출력이 있으면 해당 출력값을 S3에 업로드 (또는 Amazon SNS를 통해 알림 전송)
  5. 빌드가 실행되는 동안 CloudWatch Logs에 CodeBuild 정보 전송
  6. 빌드가 실행되는 동안 CodeBuild 콘솔 또는 log 확인 가능

 

CodeDeploy

CodeDeploy는 EC2 인스턴스, 온프레미스 인스턴스 등으로 애플리케이션 배포를 자동화하는 배포 서비스이며, 코드부터 패키지, 스크립트, 멀티미디어 파일 등 다양한 애플리케이션 콘텐츠를 거의 무제한으로 배포할 수 있다.

 

CodeDeploy는 서버에서 실행되며 S3 버킷, Github 레포지토리에 저장되는 애플리케이션 콘텐츠도 배포 가능하다. 또한 CodeDeploy를 사용하기 위해 기존 코드를 수정하지 않아도 된다는 장점이 있다.

 

CodePipeline

CodePipeline은 빠르고 안정적인 애플리케이션 및 인프라 업데이트를 위한 릴리스 파이프라인을 자동화하는 데 도움이 되는 서비스다. 위에서 소개한 CodeCommit, CodeBuild, CodeDeploy가 통합된 하나의 파이프라인 서비스라고 할 수 있다.

 

특징

  • SW 릴리스 프로세스를 모델링하고, 서버를 설정하거나 프로비저닝할 필요성 감소
  • AWS Console 또는 CLI를 사용해 SW 릴리스 프로세스 단계 정의 가능
  • 피드백 반복하고 각 코드 변경 테스트하여 버그를 포착하는 새로운 기능을 신속하게 릴리스할 수 있음
  • 릴리스 프로세스 모든 단계에서 자체 플러그 또는 사전 구축된 플러그인을 사용해 필요에 따라 조정 가능

 

 

728x90

'Minding's Programming > AWS' 카테고리의 다른 글

[AWS] ECS / ECR  (0) 2024.10.28
[AWS] AWS CLI (Command Line Interface)  (0) 2024.10.25
[AWS] S3  (0) 2024.10.25
[AWS] IAM  (0) 2024.10.25
[AWS] VPC  (1) 2024.10.24