요즘 Github Action과 CodeDeploy를 활용하여 CI/CD 자동화 환경을 구축하고 있는데, CodeDeploy를 활용하여 CD 환경을 구성하는게 쉽지 않은 것 같네요..
일단 기본적으로 어떻게 동작하는지도 잘 모르겠고, 다른 분들이 블로그에 올려주신 글들을 봐도 그냥 코드만 올려놨을 뿐, 정확히 어떠한 작업을 수행하는지는 명시되어 있지 않아 환경을 구성하는데에 어려움을 겪고 있습니다ㅠ
그래서 CodeDeploy가 무엇이고, 어떻게 동작하는지 공식 문서를 참고하면서 알아본 뒤, 어떠한 식으로 프로젝트를 설계해야할지 알아보도록 하겠습니다.

CodeDeploy가 무엇인지는 지난 게시글에서 간단하게 알아보았으나, 한 번 더 간단하게 정리해보면 AWS 인스턴스에 애플리케이션을 자동으로 배포해주는 서비스입니다.

CodeDeploy는 배포 자동화라는 장점 이외에도 다양한 장점들을 가지고 있는데, 배포 과정에서 오류가 발생하였을 경우 이를 롤백할 수 있으며, 배포 과정에서 발생할 수 있는 애플리케이션의 일시적인 다운 현상을 최소화할 수 있다고합니다.
이전에도 살펴보았듯이, S3나 github에 저장된 정보들을 바탕으로 인스턴스에 애플리케이션을 배포할 수 있는데, github를 사용하는 방식보다는 S3를 사용하는 방식이 더 간단하기에 저는 S3를 사용하기로 결정하였습니다.
이전까지는 codeDeploy에 대해서 잘 이해하지 못하고 있었기에, github Action을 통해서 jar 파일을 S3에 저장해두면 codeDeploy가 S3 내부에 위치한 jar 파일을 읽은 뒤, 이를 토대로 EC2 인스턴스에 서버를 배포한다고 생각하였습니다.

뭐 이것도 어떻게보면 틀린말이 아니긴 하지만, github Action이 수행할 동작들을 명시하기 위해서 yml파일에 스크립트를 작성했듯이 codeDeploy도 동일한 과정이 필요합니다.
codeDeploy가 수행할 작업들을 명시해놓은 파일을 AppSpec.yml이라고하는데, 프로젝트 내부에 위치시킨 뒤, github Action을 통하여 jar 파일과 함께 S3에 저장하게됩니다.
저장된 파일은 추후에 배포 요청이 발생하였을 경우, 이를 EC2 인스턴스에서 가져오게되고, AppSpec.yml에 명시된대로 codeDeploy가 작동하면서 jar 파일을 실행한다고 정리할 수 있을 것 같습니다.

이를 그림을 정리하면 다음처럼 정리할 수 있을 것 같습니다.
따라서, codeDeploy를 통하여 CD 환경을 구축하기 위해서는 codeDeploy 인스턴스 생성 및 EC2에 codeDeploy Agent 설치, AppSpec.yml 파일 생성이 필요하다고 생각됩니다.
특히, EC2 인스턴스에서는 S3와 codeDeploy 서비스에 접근할 수 있어야하기 때문에 IAM을 통한 권할 설정이 필요하다고 생각됩니다.
https://docs.aws.amazon.com/codedeploy/latest/userguide/welcome.html
https://mogulist.github.io/aws-code-deploy-1-understanding
https://saramin.github.io/2022-02-25-hello-aws/