본문 바로가기

AWS

[AWS] CI/CD 파이프라인과 AWS CI/CD 서비스

'AWS로 구현하는 MAS와 컨테이너 오캐스트레이션' 강의를

블로그를 통해 구매하시는 분들에게만 10%할인 중입니다.

이미지를 클릭하고, 아래 쿠폰번호를 입력해 주세요!

16861-259843d6c2d7


 

 

 

CI/CD 도입 계기는 항상 필요로 생각하고 있는 부분이었지만 귀찮다는 생각에 시도를 하지 않았지만 시간이 지날 수록 프로젝트가 커지면서 배포 과정에 점점 더 많은 시간들이 낭비되고 있는게 느껴져(약 3~5분) 배포 자동화의 필요성을 뼈저리게 느꼈다.

원래는 jenkins 로 CICD 를 간단하게 구축하려 했지만 기존에 해봤던 작업이라 지루함이 작업시작도 전부터 눈에 훤했다.
그래서 다른 파이프라인 구축 방법을 찾아봤고 AWS 서비스를 통해서도 유사하게 그리고 기존 시스템들과 더 잘 통합될 수 있는 이점이 있다는걸 알게되었다.

자동화할 과정과 환경은 다음과 같다

  1. 스프링 프로젝트 빌드 - 스프링 프로젝트를 빌드하여 실행 가능한 JAR 파일 생성
  2. 도커 이미지 빌드 - 생성된 JAR 파일을 기반으로 도커 이미지를 빌드
  3. 도커 푸시 - 빌드된 도커 이미지를 Docker Registry에 푸시
  4. 도커 풀 - 배포 환경(EC2) 에서 해당 도커 이미지를 Docker Registry에서 풀
  5. 도커 실행 - 도커 이미지를 실행
  6. 게이트웨이에 등록 확인 - 새로운 버전의 애플리케이션이 게이트웨이에 등록되었는지 확인한다. 등록이 되면 이전 버전을 종료

이렇게 구성된 CI/CD 파이프라인을 통해 전체 배포 과정을 자동화하여 배포시마다 3~5분의 시간을 절약할 수 있게 되었으며 작업 중 지루함을 덜어낼 수 있게되었다.

 

 


 

 

CI/CD

Continuos Intergration (지속적 통합) / Countinous Deploymnet 또는 Countinous Delivery (지속적 배포) 의 약자로, 프로그램의 전반적인 개발 프로세스를  자동화하여 효율적이고 지속적으로 만들기위한 방법.

  • CI - 빌드를 자동화 하므로 개발자들이 코드를 더 자주 메인브랜치와 통합하게 되어 충돌이나 예상치 못한 문제 발생을 예방할 수 있다. 또한, 통합 과정에서 자동화된 빌드와 테스트를 수행하여 코드에 문제가 있을 경우 이를 즉시 알 수 있다.
  • CD - 프로그램을 언제든지 안정적으로 배포될 수 있는 상태로 유지하는것을 목표로 한다. 이를 통해 프로그램 배포를 자동화하고, 릴리즈를 더 빈번하고 신뢰성 있게 만든다.

 

CI/CD의 필요성

  • 빠른 피드백 - 코드의 문제를 빠르게 발견하고 해결하여, 소프트웨어 품질을 향상시키고 릴리즈를 더 빠르게 하는데 도움이 된다.
  • 위험 감소 - 자주 통합하게 되어 코드 변경 사항을 작고 관리 가능한 단위로 분할하여, 시스템에 대한 큰 변화의 위험을 감소
  • 효율성 향상 - 반복적인 작업을 자동화하여 개발자의 효율성을 향상시키고 실수를 줄여주며, 다른 작업에 집중할 수 있도록 도와준다.
  • 고객 만족도 향상 - 빠른 제품 업데이트와 기능 배포를 가능하게 하여, 고객 만족도를 향상시킬 수 있다.

 

CI/CD 파이프라인

- CI와 CD 를 일련의 과정으로 묶어서 소프트웨어의 개발, 테스트, 배포를 지속적으로 진행되는 프로세스

- 파이프라인은 개발자들이 코드를 작성하고, 변경사항을 통합하고, 테스트하며 안정적으로 배포하는데 도움을 준다

 

 


 

 

 

 


AWS가 제공하는 CI/CD 서비스

  • CodeCommit - Git 호스팅 서비스로 GitHub와 같이 코드를 저장하고 변경 내용을 추적하는데  사용된다. (Github 로 대체가능)
  • CodeBuild - 소스 코드를 컴파일하고 테스트를 진행하며, 도커 이미지를 빌드하고 AWS ECR 에 푸시하는데 사용된다.
  • CodeDeploy - 빌드가 완료되면 새로운 이미지를 EC2 인스턴스에 배포 및 검증
  • CodePipeline - 위의 서비스들을 통해 CI/CD 파이프라인을 구축하고 관리하는데 사용
  • ECR(Elastic Container Registry) - Docker 이미지를 저장하고 관리하는데 사용

 


 

AWS CodeCommit

AWS 에서 제공되는 소스 코드 관리 서비스이다. Git 기반 레포지토리를 제공하여 코드를 안전하게 저장하고 다른 개발자와 공유하며 효과적으로 협업할 수 있게 도와준다. AWS의 서비스들과 통합이 잘 되는 이점이 있다.
하지만 많은 개발자들이 해당 기능은 GitHub에 익숙해져있어 협업에 유리하기에 이 부분의 역할은 GitHub 로 대체했다.

CI/CD에서 CodeCommit(GitHub)의 주요 역할

  • 버전 관리 - 여러 개발자가 동시에 같은 코드베잇에서 작업할 때 충돌 문제를 방지하며, 이전 버전으로 롤백하는 것을 쉽게 해준다.
  • 브랜치와 병합 - 개발자들이 독립적으로 작업하고, 후에 안전하게 병합할 수 있게 해준다. 이를 통해 기능 개발, 버그 수정, 테스트 등을 위한 별도의 작업 공간을 제공한다.
  • 협업 지원 - Pul lRequest 와 같은 기능들을 통해 코드 검토 및 피드백을 용이하게 하며, 이슈 트래킹은 버그 추적과 프로젝트 관리를 쉽게 해준다.
  • 보안 - 각각의 서비스는 다양한 보안 옵션을 제공하여 코드를 보호한다.

이러한 기능들을 통해 더 빠른 코드 통합, 오류 감소, 개발 주기 단축 등의 이점을 제공하여 프로젝트의 전반적인 효율성과 생산성을 향상시키는데 큰 도움이 된다.

해당 이점들은 Continous Intergration (CI) 프로세스에 해당된다.

 


 

AWS CodeBuild

AWS 제공되는 빌드 서비스이다. 소프트웨어 빌드 및 테스트 과정을 단순화 및 가속화해준다.

CI/CD에서 CodeBuld의 주요 기능 및 역할

  • 완전히 관리되는 서비스 - 서버, 빌드관련 소프트웨어, 패치 등을 관리하므로 개발자가 이런 세부사항을 신경쓰지 않아도 된다.
  • 자동 빌드 및 테스트 - GitHub 의 소스 코드 변경을 감지하여 자동으로 빌드와 테스트를 수행한다. 이는 개발자가 코드를 메인 브랜치에 통합하기 전에 버그를 빠르게 발견하고 해결할 수 있게 해준다.
  • 빌드 환경 커스터마이징 - 빌드 환경을 필요에 따라 커스터마이징할 수 있어 서로 다른 프로젝트를 다른 환경에서 빌드할 수 있다.
  • 스케일링과 성능 - 빌드 요구량에 따라 오토 스케일링된다. 이는 빌드 시간을 크게 단축시키고, 동시에 여러 빌드를 처리할 수 있다.
  • 비용 효율성 - 사용한 만큼만 비용을 청구하므로, 필요하지 않거나 사용하지 않을 땐 비용이 발생하지 않는다.
  • 보안 - AWS KMS 와 통합되어 빌드 시 사용되는 민감한 정보를 보호할 수 있다.

이러한 기능들을 통해 소스 코드 빌드와 테스트 단계를 쉽게 관리하고 자동화하는데 크게 도움을 준다.

해당 이점들도  Continous Intergration (CI) 프로세스에 해당된다.

 

AWS CodeBuild 빌드 구현

 

[AWS] CodeBuild를 이용한 Docker 이미지 빌드 및 ECR에 저장

AWS CodeBuild 및 CI/CD 에 대한 설명은 아래 글로 대신합니다. [AWS] CI/CD 파이프라인과 AWS CI/CD 서비스 CI/CD 도입 계기는 항상 필요로 생각하고 있는 부분이었지만 귀찮다는 생각에 시도를 하지 않았지

kanoos-stu.tistory.com

 


 

AWS CodeDeploy

소프트웨어의 신뢰성 있는 배포를 도와주는 서비스로 개발 작업을 프로덕션 환경에 안전하게 배포하는 역할을 한다.

CI/CD에서 CodeDeploy의 주요 기능 및 역할

  • 자동화된 배포 - 배포하는 과정을 자동화하고, 신속하고 안정적이게 애플리케이션을 배포할 수 있다. 이는 프로덕션에 변경사항을 빠르게 업데이트할 수 있으며, 실수를 줄이고 생산성을 향상시키는데 도움이 된다.
  • 중앙 집중식 배포 관리 - 여러 서버, 리전, 환경에 대한 배포를 한 곳에서 관리할 수 있게 해준다. 이를 통해 배포 과정을 단순화하고 전체 시스템의 가시성을 향상시켜준다.
  • 자동 롤백 - 배포가 실패한 경우 이전 버전으로 자동 롤백하는 기능을 제공한다. 이는 잠재적인 오류와 서비스 중단 기간을 최소화하는 데 도움이 된다.
  • 확장성 - 배포를 확장하거나 축소하는데 유용하다. 단일 인스턴스에서 대규모 클러스터까지 다양한 배포 규모를 지원.

이러한 기능들을 통해 빌드와 테스트가 성공적으로 완료된 코드를 자동으로 프로덕션 환경에 배포할 수 있다.

해당 이점들은 Continous Deployment (CD) 프로세스에 해당된다.

 

AWS CodeDeploy 배포 구현

 

[AWS] CodeDeploy를 이용한 Docker 이미지 EC2 배포

AWS CodeDeploy 및 CI/CD 에 대한 설명은 아래 글로 대신합니다. [AWS] CI/CD 파이프라인과 AWS CI/CD 서비스 CI/CD 도입 계기는 항상 필요로 생각하고 있는 부분이었지만 귀찮다는 생각에 시도를 하지 않았지

kanoos-stu.tistory.com

 


 

AWS CodePipeline

CI/CD를 구현하기 위한 중앙 집중화된 툴. 코드의 변경을 감지하고 빌드, 테스트, 배포 과정을 자동화하는데 사용된다.

CI/CD에서 CodePipeline의 주요 기능 및 역할

  • 중앙 집중식 파이프라인 관리 - 코드 변경사항 감지부터 프로덕션 배포까지의 전체 CI/CD 프로세스를 중앙 집중화하여 관리한다.
    이를 통해 개발, 테스트, 배포 프로세스를 쉽게 관리할 수 있다.
  • 완전한 자동화 - 전체 배포 과정의 자동화를 통해 개발자의 생산성을 향상시키고 프로덕션 변화를 빠르게 업데이트.
  • 다양한 통합 옵션 - CodeBuild, CodeDeploy 등과 함께 통합되어 각 단계의 작업을 자동화하고 관리할 수 있다.
  • 배포 자동화 롤백 - 필요에 따라 이전 상태로 롤백하는 기능을 제공한다.
  • 보안 - AWS의 보안 기체계를 이용해 CI/CD 프로세스를 안전하게 관리할 수 있다.

이러한 기능들을 통해 CI/CD 프로세스를 효율적으로 관리하고, 반복적인 작업을 줄이는데 크게 도움이 된다.

CodePipeline은 CI/CD 전체 파이프라인 프로세스에 해당된다.

 

AWS CodePiple 파이프라인 구축하기

 

[AWS] CodePipeline으로 CI/CD 구현하기

AWS CodeDeploy 및 CI/CD 에 대한 설명은 아래 글로 대신합니다. [AWS] CI/CD 파이프라인과 AWS CI/CD 서비스 CI/CD 도입 계기는 항상 필요로 생각하고 있는 부분이었지만 귀찮다는 생각에 시도를 하지 않았지

kanoos-stu.tistory.com


 

AWS Elastic Container Registry (ECR)

Docker 이미지를 저장, 관리, 배포할 수 있는 완전 관리형 Docker 컨테이너 레지스트리.

기존에는 DockerHub를 통해 저장 및 배포를 수행하였지만 위의 AWS 서비스들과 통합에 유리한 이점이 있어 ECR을 통해 진행하였다.

CI/CD에서 ECR의 주요 기능 및 역할

  • 저장 및 관리 - 빌드 결과인 Docker 이미지를 안전하게 저장하고 관리할 수 있다. 
  • 높은 통합성 - AWS 다른 서비스들과 높은 통합성을 가지고 있다. 예를 들어 CodeBuild를 통해 이미지를 빌드한 후 해당 이미지를 ECR에 저장하고, 이를 CodeDeploy를 통해 배포할 수 있다.
  • 보안 - Docker 이미지에 대해 자동으로 암호화를 진행한다. 이를 통해 Docker 이미지의 안전성을 보장한다.
  • 스케일링 - 많은 수의 이미지를 저장하고 큰 규모의 서비스를 배포하는 데 필요한 리소스를 쉽게 확장할 수 있다.
  • 레플리케이션 - 다른 리전으로 이미지 레플리케이션을 지원한다. 이를 통해 전 세계 어디든 빠르게 이미지 풀이 가능하고 다중 리전 배포를 용이하게 해준다.

ECR은 CI프로세스와 CD프로세스 사이 쯤 있지만 CD프로세스에 해당된다고 볼 수 있다.