배포 자동화 (CodePipeline - CodeCommit, CodeBuild, CodeDeploy)

AWS 배포에 이어 배포 자동화를 할 때 사용한 기능인 CodePipeline에 대해 알아보겠습니다.

일부분 제가 이해한 대로 작성하였습니다. 정확하지 않을 수 있습니다.

배포 자동화

배포 자동화한 번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것을 뜻합니다.

  • 수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약됩니다.
  • 휴먼 에러를 방지할 수 있습니다.

제 프로젝트의 경우를 예시로 들어 보겠습니다.
배포 자동화를 하지 않는다면 새로운 변경 사항으로 인해 배포를 다시 진행하고 싶을 때마다 프론트엔드 배포 시에는 매번 npm run build 명령어를 통해 빌드 파일을 생성하고, 그것을 S3 버킷에 업로드해야 할 것입니다.
백엔드 배포 시에는 매번 터미널에서 ssh로 EC2 인스턴스에 접속하고, 실행하고 있던 서버를 중단하고, 변경된 파일을 github에서 다시 내려받은 다음 다시 실행시켜야 할 것입니다.

이 과정을 배포 테스트 과정 중 또는 작은 변경 사항으로 인해 배포를 다시 해야 할 때 수행하기에는 너무나 귀찮습니다. 그리고 그 과정 중 실수가 발생할 수도 있습니다. 그렇기 때문에 배포 자동화가 필요합니다.

CodePipeline

배포에서 파이프라인이란 용어는 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻합니다. 파이프라인은 전체 배포 과정을 여러 단계로 분리합니다. 각 단계는 파이프라인 안에서 순차적으로 실행되며, 단계마다 주어진 작업을 수행합니다.

파이프라인을 여러 단계로 분리할 때, 대표적으로 세 가지 단계가 존재합니다.

  1. Source 단계 : 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행합니다.
  2. Build 단계 : Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공합니다. 또한 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행합니다.
  3. Deploy 단계 : Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행합니다.

파이프라인의 단계는 상황과 필요에 따라 더 세분화되거나 간소화될 수 있습니다. 그 예로 제 프로젝트의 백엔드 배포 시에는 Build 단계를 포함하지 않습니다.

Source 단계(CodeCommit)

Source 단계를 구성할 때 CodeCommit 서비스를 이용할 수 있습니다.

CodeCommit은 Github과 유사한 서비스를 제공하는 버전 관리 도구입니다. Github에 비해 보안과 관련된 기능에 강점을 가집니다.

제 프로젝트의 프론트엔드, 백엔드 배포 시 Github을 이용하였습니다.

Build 단계(CodeBuild)

Build 단계에서는 Codebuild 서비스를 이용합니다.

CodeBuild 서비스를 통해 유닛 테스트, 컴파일, 빌드와 같은 빌드 단계에서 필수적으로 실행되어야 할 작업을 명령어를 통해 실행할 수 있습니다.

제 프로젝트의 프론트엔드 배포 시 CodeBuild를 이용하였습니다.

Deploy 단계(CodeDeploy)

Deploy 단계를 구성할 때는 기본적으로 다양한 서비스를 이용할 수 있습니다.

CodeDeploy 서비스를 이용하면 실행되고 있는 서버 애플리케이션에 실시간으로 변경 사항을 전달할 수 있습니다. 또한 S3 서비스를 통해 S3 버킷을 통해 업로드된 정적 웹 사이트에 변경 사항을 실시간으로 전달하고 반영할 수 있습니다.

제 프로젝트의 백엔드 배포 시 CodeDeploy를, 프론트엔드 배포 시 S3를 이용하였습니다.

참고

  • 코드스테이츠 [배포] 배포 자동화 컨텐츠

Written by정선아
🌱 공부한 것을 기록하여 성장하기 위한 블로그입니다.

GitHubGmail