'AWS로 구현하는 MAS와 컨테이너 오캐스트레이션' 강의를
블로그를 통해 구매하시는 분들에게만 10%할인 중입니다.
이미지를 클릭하고, 아래 쿠폰번호를 입력해 주세요!
16861-259843d6c2d7
CI/CD 도입 계기는 항상 필요로 생각하고 있는 부분이었지만 귀찮다는 생각에 시도를 하지 않았지만 시간이 지날 수록 프로젝트가 커지면서 배포 과정에 점점 더 많은 시간들이 낭비되고 있는게 느껴져(약 3~5분) 배포 자동화의 필요성을 뼈저리게 느꼈다.
원래는 jenkins 로 CICD 를 간단하게 구축하려 했지만 기존에 해봤던 작업이라 지루함이 작업시작도 전부터 눈에 훤했다.
그래서 다른 파이프라인 구축 방법을 찾아봤고 AWS 서비스를 통해서도 유사하게 그리고 기존 시스템들과 더 잘 통합될 수 있는 이점이 있다는걸 알게되었다.
자동화할 과정과 환경은 다음과 같다
- 스프링 프로젝트 빌드 - 스프링 프로젝트를 빌드하여 실행 가능한 JAR 파일 생성
- 도커 이미지 빌드 - 생성된 JAR 파일을 기반으로 도커 이미지를 빌드
- 도커 푸시 - 빌드된 도커 이미지를 Docker Registry에 푸시
- 도커 풀 - 배포 환경(EC2) 에서 해당 도커 이미지를 Docker Registry에서 풀
- 도커 실행 - 도커 이미지를 실행
- 게이트웨이에 등록 확인 - 새로운 버전의 애플리케이션이 게이트웨이에 등록되었는지 확인한다. 등록이 되면 이전 버전을 종료
이렇게 구성된 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 CodeDeploy
소프트웨어의 신뢰성 있는 배포를 도와주는 서비스로 개발 작업을 프로덕션 환경에 안전하게 배포하는 역할을 한다.
CI/CD에서 CodeDeploy의 주요 기능 및 역할
- 자동화된 배포 - 배포하는 과정을 자동화하고, 신속하고 안정적이게 애플리케이션을 배포할 수 있다. 이는 프로덕션에 변경사항을 빠르게 업데이트할 수 있으며, 실수를 줄이고 생산성을 향상시키는데 도움이 된다.
- 중앙 집중식 배포 관리 - 여러 서버, 리전, 환경에 대한 배포를 한 곳에서 관리할 수 있게 해준다. 이를 통해 배포 과정을 단순화하고 전체 시스템의 가시성을 향상시켜준다.
- 자동 롤백 - 배포가 실패한 경우 이전 버전으로 자동 롤백하는 기능을 제공한다. 이는 잠재적인 오류와 서비스 중단 기간을 최소화하는 데 도움이 된다.
- 확장성 - 배포를 확장하거나 축소하는데 유용하다. 단일 인스턴스에서 대규모 클러스터까지 다양한 배포 규모를 지원.
이러한 기능들을 통해 빌드와 테스트가 성공적으로 완료된 코드를 자동으로 프로덕션 환경에 배포할 수 있다.
해당 이점들은 Continous Deployment (CD) 프로세스에 해당된다.
AWS CodeDeploy 배포 구현
AWS CodePipeline
CI/CD를 구현하기 위한 중앙 집중화된 툴. 코드의 변경을 감지하고 빌드, 테스트, 배포 과정을 자동화하는데 사용된다.
CI/CD에서 CodePipeline의 주요 기능 및 역할
- 중앙 집중식 파이프라인 관리 - 코드 변경사항 감지부터 프로덕션 배포까지의 전체 CI/CD 프로세스를 중앙 집중화하여 관리한다.
이를 통해 개발, 테스트, 배포 프로세스를 쉽게 관리할 수 있다. - 완전한 자동화 - 전체 배포 과정의 자동화를 통해 개발자의 생산성을 향상시키고 프로덕션 변화를 빠르게 업데이트.
- 다양한 통합 옵션 - CodeBuild, CodeDeploy 등과 함께 통합되어 각 단계의 작업을 자동화하고 관리할 수 있다.
- 배포 자동화 롤백 - 필요에 따라 이전 상태로 롤백하는 기능을 제공한다.
- 보안 - AWS의 보안 기체계를 이용해 CI/CD 프로세스를 안전하게 관리할 수 있다.
이러한 기능들을 통해 CI/CD 프로세스를 효율적으로 관리하고, 반복적인 작업을 줄이는데 크게 도움이 된다.
CodePipeline은 CI/CD 전체 파이프라인 프로세스에 해당된다.
AWS CodePiple 파이프라인 구축하기
AWS Elastic Container Registry (ECR)
Docker 이미지를 저장, 관리, 배포할 수 있는 완전 관리형 Docker 컨테이너 레지스트리.
기존에는 DockerHub를 통해 저장 및 배포를 수행하였지만 위의 AWS 서비스들과 통합에 유리한 이점이 있어 ECR을 통해 진행하였다.
CI/CD에서 ECR의 주요 기능 및 역할
- 저장 및 관리 - 빌드 결과인 Docker 이미지를 안전하게 저장하고 관리할 수 있다.
- 높은 통합성 - AWS 다른 서비스들과 높은 통합성을 가지고 있다. 예를 들어 CodeBuild를 통해 이미지를 빌드한 후 해당 이미지를 ECR에 저장하고, 이를 CodeDeploy를 통해 배포할 수 있다.
- 보안 - Docker 이미지에 대해 자동으로 암호화를 진행한다. 이를 통해 Docker 이미지의 안전성을 보장한다.
- 스케일링 - 많은 수의 이미지를 저장하고 큰 규모의 서비스를 배포하는 데 필요한 리소스를 쉽게 확장할 수 있다.
- 레플리케이션 - 다른 리전으로 이미지 레플리케이션을 지원한다. 이를 통해 전 세계 어디든 빠르게 이미지 풀이 가능하고 다중 리전 배포를 용이하게 해준다.
ECR은 CI프로세스와 CD프로세스 사이 쯤 있지만 CD프로세스에 해당된다고 볼 수 있다.
'AWS' 카테고리의 다른 글
[AWS] CodeDeploy를 이용한 Docker 이미지 EC2 배포 (0) | 2023.05.26 |
---|---|
[AWS] CodeBuild를 이용한 Docker 이미지 빌드 및 ECR에 저장 (1) | 2023.05.26 |
[AWS] AWS SNS와 SQS를 사용한 이벤트 처리 구현하기 (w.Spring Boot) (0) | 2023.05.03 |
[AWS] 마이크로 서비스 환경 구축을 위한 EC2 + Route53 + Load Balancer + ACM(SSL) 사용 (0) | 2022.05.09 |
[AWS - Route53] Route53 이란? 쉽게 도메인 등록 및 EC2연결 (0) | 2021.12.08 |