백엔드

AWS EC2 활용한 CI/CD 구축 (1)

CyberI 2024. 1. 25. 09:35

 

안녕하세요.

이번 글에서는 CI/CD에 대한 개념과 CI/CD 이해에 도움이되는 AWS, 클라우드 컴퓨팅에 대해 설명드리겠습니다.

 

1. AWS와 클라우드 컴퓨팅

1-1. AWS(Amazon Web Services)

 

Amazon Web Services는 아마존에서 제공하는 클라우드 서비스 플랫폼으로 네트워킹을 기반으로 가상 컴퓨터와 스토리지, 네트워크 인프라 등 다양한 서비스를 제공합니다.

 

[서비스 종류] 

Amazon EC2
가상 서버를 제공하여 애플리케이션 실행에 필요한 컴퓨팅 리소스를 제공합니다.
AWS CodePipeline
소프트웨어 전달 프로세스를 자동화하기 위한 서비스로 소스 코드 변경 사항을 가져와 빌드, 테스트, 배포 단계를 설정하고 연결하여 전달을 지원합니다.
AWS CodeBuild
소스 코드를 가져와 빌드하는 서비스로 테스트 및 패키징을 자동화하는데 사용됩니다.
AWS CodeDeploy
애플리케이션 배포를 자동화하는 서비스로 다양한 배포 전략을 지원합니다. 

*활용도가 높은 서비스를 설명드립니다.

 

1-2. 클라우드 컴퓨팅이란

 

클라우드 컴퓨팅은 기존의 물리적인 형태의 실물 컴퓨팅 리소스를 네트워크 기반 서비스 형태로 이용하는 것으로 인프라 구축이 쉽고 서비스 유연성을 확보해주며 개발 확장성 / 쉬운 데이터 백업 및 복구 / 유지보수 편리성의 장점을 가져 웹 애플리케이션 개발 등에 활용됩니다.

 

2. CI/CD

 

 

 

CI/CD는 다양한 환경에서 적용 가능한 빌드/테스트 자동화 소프트웨어입니다. 개발 속도와 효율은 프로젝트를 진행하며 가장 중요한 부분으로 논의되는데 이럴 경우 조직이 고객 요구에 신속하고 유연하게 대응할 수 있도록 개발안을 구축하는 것이 중요합니다. CI/CD는 조직에서 중추적인 문제를 개선하고 효과적으로 개발을 진행하기 위해 출현한 개념입니다.

 

2-1. CI/CD

 

(1) CI (Continuous Integration, 지속적인 통합)

지속적인 통합이란 프로덕션에 릴리스하기 위한 코드 변경이 자동으로 빌드, 테스트 준비되는 소프트웨어 개발 방식으로 빈번하게 발생되는 변경 사항을 통합하여 비즈니스 모델을 지속적으로 향상시키는 활동입니다.

 

(2) CD (Continuous Delivery-지속적인 서비스/Continuous Deployment-지속적인 배포)

자동화된 빌드 및 테스트(CI)가 수행된 후, 개발자가 코드 변경 사항을 중앙 리포지토리에 정기적으로 병합하는 소프트웨어 개발 방식으로 서비스를 지속적으로 제공하고 사용 가능한 상태로 만드는 활동입니다.

 

- 지속적인 서비스란 비즈니스 모델을 언제든지 출시할 수 있게 준비가 된 상태를 유지하는 것입니다.

- 지속적인 배포란 지속적인 서비스가 가능한 상태에서 좀 더 확장된 형태로 자동화된 프로세스를 통해 새로운 코드 변경 사항이 즉시 고객에게 배포되고, 실시간으로 업로드 되는 비즈니스 모델을 제공하는 것입니다.

 

2-2. 클라우드 환경에서의 CI/CD 역할                                 

 

 

(1) 자동화 배포

클라우드에서는 서버, 네트워크, 스토리지 등을 자동으로 프로비저닝(사용자가 요청한 IT 자원을 사용할 수 있는 상태로 준비하는 것)을 확장할 수 있습니다. CI/CD는 클라우드 인프라와 함께 사용되어 소프트웨어를 신속하게 배포할 수 있습니다.

 

(2) 확장성과 유연성 강화

클라우드는 리소스를 확장하고 축소할 수 있습니다. CI/CD를 통해 배포되고 빌드되는 소프트웨어는 클라우드의 이점을 활용하여 확장성과 유연성을 갖추게 됩니다.

 

(3) 빠른 반응 및 업데이트 지원

CI/CD는 빠른 개발 주기를 지원하고 새로운 기능을 출시한 뒤 사용자 피드백을 수용하여 소프트웨어를 지속적으로 개선할 수 있도록 합니다. 클라우드 환경에서 CI/CD는 배포 과정을 자동화하여 빠르고 안정적으로 소프트웨어를 전달할 수 있어 개발 및 운영에 효율적입니다.

 

2-3. CI/CD의 장점

 

(1) 개발 기간 단축

소프트웨어 개발 과정에서 빠른 통합과 지속적인 배포가 가능해져 개발 속도가 빨라지고 전체 개발 기간을 단축할 수 있습니다.

 

(2) 개발 생산성 향상

초기 버그를 발견하고 수정하는데 걸리는 시간이 단축되어 개발 생산성이 향상됩니다. 또 초기에 높은 품질의 소프트웨어를 구축하여 유지보수 비용을 줄이고 효율적으로 운영할 수 있습니다.

 

(3) 코드 통합 자동화로 투명성 증대

코드를 통합하는 과정에서 반복적인 수작업을 줄일 수 있고 자동화된 테스트로 코드 변경을 관리할 수 있어 소스 코드 품질을 유지하고 지속적인 코드 관리가 가능합니다.

 

2-4. CI/CD 도구 및 플랫폼

 

(1) Jenkins

장점
유연성과 확장성이 뛰어나고 다양한 플러그인을 제공하여 여러 환경에서 자동화가 가능합니다. 또 여러 빌드 에이전트를 사용하여 병렬 빌드 및 테스트 환경을 지원하여 확장성이 높아 대규모 프로젝트에서 가장 많이 사용되는 CI/CD 플랫폼입니다.

단점
초반 설정 작업과 사용자 인터페이스를 익히는 러닝 커브가 다소 높습니다.

이미지 출처 : https://www.jenkins.io/

 

(2) gitLab

장점
통합된 CI/CD 파이프라인을 제공하며 Git 저장소의 통합이 강력합니다.

단점
외부에서 사용하기에는 제한적일 수 있고, 일부 기능이 유료 버전으로 제공됩니다.

이미지 출처 : https://about.gitlab.com/

 

(3) Github Action

장점
GitHub의 코드 저장소와 함께 작동하며 코드 변경 사항을 트리거하여 다양한 작업(flows)을 자동으로 실행할 수 있습니다. 이 작업(flows)은 CI/CD 파이프라인을 포함하여 빌드, 테스트, 패키징, 배포 등 다양한 작업들을 수행할 수 있습니다.

단점
무료 티어에서는 일일, 월별 실행 시간, 동시 작업 수 등에 제한이 있을 수 있습니다.

이미지 출처 : https://docs.github.com/ko/actions

 

지금까지 AWS 및 클라우드 컴퓨팅의 정의와 CI/CD에 대한 개념을 알아보았습니다.

 

다음 편에서는 Jenkins 를 활용하여 CI/CD 구축하는 내용이 이어집니다.

AWS EC2 활용한 CI/CD 구축 (2)