팀 프로젝트를 하면서 자동 배포 환경 설정은 거의 필수라고 생각해서 CI/CD를 무조건 해야한다고 생각했습니다. 

아무것도 모르는 상태에서 진행했기에 시간도 오래 걸리고, 미숙한 부분도 많았어서 이번에는 단계별로 이해하면서 공부를 해보려고 합니다. 기본적인 CI/CD 지식, AWS S3/CodeDeploy 설정, 스크립트 파일 작성 및 배포 순서로 진행할 예정입니다.

 

CI/CD 용어

우선, CI/CD의 용어 설명은 다음과 같습니다. 

CI(Continuous Integration)

지속적 통합으로 여러 개발자가 하나의 프로젝트를 같이 개발할 때 발생하는 불일치를 최소화 해주는 개념.

애플리케이션 변경 사항 반영 시 자동으로 빌드 및 테스트를 진행해 줘 잘못된 코드가 공유되는 걸 예방해줌

빌드 및 테스트를 자동으로 진행하여 여러 개발자들이 공유하는 코드의 신뢰성을 높이는 개념

CD(Continuous Deployment)

지속적 배포로 프로젝트의 변경 사항을 클라우드에 자동으로 배포하는 것을 의미 

배포 플로우를 자동화 누구나 동일한 플로우로 배포할 있게 해주는 개념 

 

어떤 점이 좋은지

그러면 CI/CD를 하면 어떤 점이 좋을지 알아보겠습니다. 

애플리케이션을 배포한 뒤에, 애플리케이션에 변경사항이 발생한다면 변경된 애플리케이션을 다시 빌드하고, 배포해야하는 과정을 거쳐야 한다. 만약 배포 과정을 매번 수동으로 진행한다면 어떻게 될까? 개발자는 변경사항이 있을 때마다 배포를 수동으로 해야하는 번거로움이 발생될 것이고, 클라이언트 측에서는 변경사항이 반영된 확인하기 위해 배포하는 시간을 기다려야하는 불편함이 발생할 있다. 그래서 코드를 main 브랜치에 merge 하면 알아서 통합 배포를 진행해준다면 더이상 개발자가 배포 과정에 일일히 신경쓸 필요가 없을 것이다. 

즉, 계속되는 코드 변경을 띄워진 서버에 빠르고 편리하게 반영하기 위해서 필요한 것이라고 이해했습니다. 

 

툴 선택 : Github Actions

그렇다면 어떤 툴을 이용해서 하는 것이 좋을지 고민 끝에 GitHub Actions를 이용하기로 했습니다. 

관련 툴로는 Travis CI, Jenkins도 있는데 GitHub Actions를 사용하기로 한 이유는 다음과 같습니다.

Github Actions가 Github와의 연계성이 좋고, public repository를 사용한 경우 무료였기에 비용적인 부담도 덜해서 선택했습니다. 

Jenkins 별도로 설정이 필요하다고 들었고, Travis CI 일정 리소스 이상 사용하면 과금이 되는 것으로 알고 있습니다. 

그래서 비교적 설정이 간단하고 부분적으로 무료인 Github Actions가 저의 상황과 잘 맞는다고 생각해 선택해서 설정을 진행했습니다. 

 

이제 Github Actions, AWS S3, AWS CodeDeploy를 이용해 테스트 및 배포를 할 텐데, 큰 흐름은 다음과 같습니다.

흐름을 간단하게 설명하면 다음과 같습니다.

소스 코드를 압축해 AWS 스토리지에 저장 후 서버에 전달해서 실행한다

 

AWS에서 공식적으로 가이드하는 방법으로 두가지가 있습니다.

  1. AWS S3에 있는 빌드 파일을 압축 -> CodeDeploy 활용 -> AWS EC2에 배포 
  2. AWS ECR에 도커 이미지 업로드 -> Task Definition 활용 -> AWS ECS 배포

GitHub 코드를 S3 업로드 , AWS EC2에서 끌어다 쓰는 것이 핵심이고, 이를 도와주는 것이 AWS CodeDeploy입니다.

EC2의 서버에 배포해야하므로 1번의 방식으로 진행합니다.

 

 

 

참고 블로그 : https://bcp0109.tistory.com/363

+ Recent posts