CI/CD 파이프라인 구축 - AWS CodePipeline으로 EC2에 자동 배포하기 (1)

2025. 3. 16. 20:51AWS

반응형

파이프라인

 

프로그래밍을 하다 보면, 어떤 방식으로든 노력과 시간이 필요합니다. 마법처럼 모든 일이 자동으로 해결되는 않죠. 하지만, 어차피 공을 들여야 한다면, 최대한 효율적으로 하는 것이 더 낫지 않을까요? 그런 의미에서 배포 자동화는 초기 세팅에 한 번의 공수를 들여, 이후에는 최대한 효율적으로 배포할 수 있도록 만드는 과정입니다.

이번 글에서에서는 AWS CodePipeline을 사용하여 Git에 있는 코드를 EC2에 자동으로 배포하는 CI/CD 파이프라인을 구축하는 방법을 설명하려고 합니다. 배포 자동화가 왜 중요한지부터, 실제로 어떻게 설정하는지까지 단계별로 살펴보겠습니다.

 

1. 수동 배포의 한계와 문제점

서비스를 개발하고 운영하려면 코드를 배포해야 합니다. 배포 방식에는 여러 가지가 있지만, 가장 기본적인 방법은 직접 서버를 만들어 코드를 전송하고 실행하는 것입니다. 예를 들어, scp 명령어로 서버에 코드를 업로드한 후, ssh로 접속해 직접 빌드하고 실행하는 방식이 일반적입니다. 서비스에 변경 사항이 발생하면 같은 과정을 반복하여 배포하게 됩니다.

 

언뜻 보면, 이렇게 운영하는 것이 크게 복잡해 보이지 않을 수도 있습니다. 하지만 실제 서비스를 운영해보면 수동 배포에는 여러 가지 문제점이 있습니다.

 

첫째, 반복적인 작업이 비효율적입니다. 매번 [SCP로 코드 업로드 → SSH로 접속 → 의존성 설치 및 빌드 → 실행] 과정을 거쳐야 합니다. 여기에 환경 변수를 설정하거나 외부 서비스를 연동하는 과정까지 추가된다면 생각만 해도 어지럽네요.

 

둘째, 실수할 가능성이 높아집니다. 배포 과정이 단순해 보여도, 작은 실수 하나가 서비스 장애로 이루어질 수 있습니다. 예를 들어, 필요한 환경 변수를 설정하지 않거나, 의존성 설치를 누락하는 등의 실수가 발생할 수 있습니다. 그리고 이러한 실수는 배포 순간에는 눈치채지 못할 수도 있습니다.

 

셋째, 배포 과정이 일관되지 않을 수 있습니다. 앞서 예로 든 배포 과정은 EC2를 기준으로 한 것이지만, 만약 다른 서비스를 사용하거나 클라우드 플랫폼이 달라진다면 배포 방식도 달라집니다. 예를 들어, Elastic Beanstalk에 배포하려면 콘솔에서 환경 변수를 설정하고, 코드를 빌드한 뒤 압축하여 업로드 해야 합니다. 반면, GCP의 Cloud Run에 배포하려면 Docker 이미지를 생성하여 업로드한 후 컨테이너를 실행해야 합니다. 이처럼 배포 방식은 사용 서비스에 따라 다르며,매번 수동으로 이를 기억하고 수행하는 것은 여간 피곤한 일이 아닙니다.

 

2. CI/CD란 무엇인가?

앞서 살펴본 것처럼, 수동 배포 방식은 반복적인 작업이 많고 실수할 가능성이 높으며, 배포 환경에 따라 일관성이 유지되지 않는 문제가 있습니다. 이를 해결하기 위해 많은 개발팀이 CI/CD 파이프라인을 도입하고 있습니다.

 

CI/CD는 지속적 통합, 지속적 배포를 말합니다.

  • CI(Continuous Integration, 지속적 통합) : 코드가 변경될 때마다 자동으로 빌드하고 테스트하여 새로운 코드가 기존 코드와 잘 동작하는지 검증하는 과정입니다.
  • CD(Continuous Deployment, 지속적 배포) : CI를 거친 코드가 자동으로 배포 환경에 반영되는 과정입니다.

CI/CD를 도입하면 코드 변경 사항이 자동으로 빌드, 테스트, 배포되므로 개발자는 배포 과정에 신경 쓰지 않고 개발에 집중할 수 있습니다. 앞서 살펴본 번거로운 배포 과정을 자동화함으로써, 개발자는 반복적인 작업에서 벗어나 더 중요한 업무에 시간을 투자할 수 있습니다.

 

3. AWS CodePipeline이란?

AWS CodePipeline은 코드 변경 사항을 자동으로 빌드, 테스트, 배포할 수 있도록 도와주는 CI/CD 서비스입니다. 이를 활용하면 코드가 변경될 때마다 미리 정의된 단계를 따라 자동으로 배포 프로세스를 실행할 수 있습니다.

 

AWS에서는 CodeCommit, CodeBuild, CodeDeploy라는 세 가지 핵심 서비스를 제공합니다. CodePipeline은 이 서비스들을 연결하여 파이프라인을 구성합니다.

CodeCommit - 코드 저장소 (Source 단계)

CodeCommit은 AWS에서 제공하는 Git 기반 코드 저장소 서비스 입니다. GitHub, GitLab과 비슷한 역할을 하며, AWS 환경에서 보안이 강화된 상태로 코드를 관리할 수 있습니다. CI/CD에서 CodeCommit 저장소에 변경 사항이 발생하면, CodePipeline이 이를 감지하고 자동으로 배포 프로세스를 실행합니다.

*CodePipeline은 CodeCommit뿐만 아니라 GitHub, GitLab 등과 연결할 수 있기 때문에 저는 GitHub을 사용할 예정입니다.

CodeBuild - 코드 빌드 및 테스트 (Build 단계)

CodeBuild는 소스 코드를 가져와 자동으로 빌드 및 테스트를 수행하는 서비스입니다. 기존에는 빌드 서버를 직접 운영해야 했지만, CodeBuild를 사용하면 AWS에서 관리하는 환경에서 자동으로 빌드를 수행할 수 있습니다. CI/CD에서 CodeBuild는 소스 코드를 빌드하고, 필요하다면 테스트까지 수행한 후 다음 배포 단계로 전달하는 역할을 합니다.

CodeDeploy - 배포 자동화 (Deploy 단계)

CodeDeploy는 EC2, Lambda, ECS 등의 환경에 코드를 자동으로 배포하는 서비스입니다. 수동으로 서버에 접속해서 배포하는 번거로움을 해결하고, 배포 중 발생할 수 있는 장애를 최소화할 수 있습니다. 또한, 블루-그린 배포, 카나리 배포를 지원하여 무중단으로 배포가 가능하며, 배포 실패 시 자동 롤백 기능을 제공합니다. CI/CD에서 CodeDeploy는 CodeBuild에서 생성된 빌드 결과물을 배포 환경(EC2, Lambda, ECS 등)에 자동으로 배포하는 역할을 합니다.

 

이 글에서는 GitHub 저장소에 변경 사항이 발생하면 CodePipeline이 실행되고, CodeBuild가 코드를 빌드하고, CodeDeploy가 EC2에 자동으로 배포하도록 구성할 것입니다.

 

다음 글에서는

이번 글에서는 수동 배포의 한계와 배포 자동화를 구축하기 위한 AWS CodePipeline에 대해서 간단히 설명했습니다. 다음 글에서는 간단한 프로젝트를 생성하고, 배포를 위한 인프라를 준비하는 과정에 대해서 설명하겠습니다.

 

2025.03.16 - [AWS] - CI/CD 파이프라인 구축 - AWS CodePipeline으로 EC2에 자동 배포하기 (1)

2025.03.16 - [AWS] - CI/CD 파이프라인 구축 - AWS CodePipeline으로 EC2에 자동 배포하기 (2)

2025.03.17 - [AWS] - AWS CodePipeline 주요 옵션 정리

2025.03.19 - [AWS] - CI/CD 파이프라인 구축 - AWS CodePipeline으로 EC2에 자동 배포하기 (3)

반응형