2024-03-24-WIL-CI/CD의 개념
CI와 CD는 각각 각각 지속적인 통합과 지속적인 전달을 의미한다.
서로 무언가를 공유하는 개념이 아닌, 연속적으로 작용하는 파이프라인이기 때문에 CI에 대한 이해를 먼저 한 후에, CD로 넘어가도 좋다.
CI (Continuous Integration)
지속적인 통합을 의미하는 CI는 프로젝트 변경 사항을 공유 저장소에 통합하는 것을 포함한다.
CI의 진행 과정은 다음과 같다.
- 코드 pull and merge
- 자신의 코드를 dev 브랜치에서 pull 하여 로컬 환경으로 가져온다.
- 이후 변경 사향을 확인하고, 필요한 경우 코드를 로컬에서 merge 해준다.
- 자신의 branch로 push
- 로컬에서 수정한 코드를 자신의 개인 브랜치에 commit, push 해준다.
- dev 브랜치에서 자신의 브랜치를 push하여 merge
- 자신의 브랜치에서 변경사항이 완료되면, 해당 브랜치를 다시 dev 브랜치로 push 하고 merge 해준다.
처음에는 이것이 왜 자동화된 프로세스의 일부인지 의문이 들었다. 하지만 더 공부를 해 보니 프로젝트 merge 프로세스에는 자동화된 빌드 및 테스트를 수행하여 사용자가 병합에만 집중할 수 있도록 돕는 기능이 포함되어 있었기 때문이었다. 지금까지 git에 push, pool 등을 하며 merge 하는 모든 과정 사이에 CI기능을 활용하고 있었다는 뜻이다.
중요한 점은 코드에 변경사항이 생겼을 때 공용 브랜치에 코드를 충돌 없이 지속적으로 merge 시켜주는 것이다.
CD(Continuous Delivery)
CD, 지속적인 전달은 빌드, 테스트 및 배포 프로세스를 자동화하여 소프트웨어가 항상 배포 가능하게 도와주는 기능이다. 위의 세 가지 과정을 자동화해 주기에 빠른 의견 반영을 통한 업데이트가 가능해진다.
CD는 플랫폼(Github, Azure DevOps, AWS CodeCommit, SourceForge 등등)과 배포 서버(AWS, NCP 등등) 사이에 구축하는 파이프라인으로, 여러 tools( Jenkins, GitHub Actions, GitLab CI/CD 등등)을 사용하여 구축한다.
다음은 Github Actions를 사용하여 AWS EC2 서버와 RDS에 CD 파이프라인을 구축하는 과정이다.
- EC2 인스턴스 생성
- AWS Management Console에서 EC2 인스턴스를 생성한다.
- GitHub Actions Workflow 작성
- .github/workflows 디렉토리에 YAML 파일을 작성하여 CI/CD 작업을 정의한다.
- AWS CodeDeploy 설정
- CodeDeploy 애플리케이션을 생성하고 EC2 인스턴스를 대상으로 설정한다.
- GitHub Secrets 설정
- GitHub Secrets에 AWS 액세스 키와 비밀 키를 저장한다.
- GitHub Actions Workflow 실행
- 코드 변경 사항이 발생하면 GitHub Actions Workflow가 실행되어 CodeDeploy를 통해 배포를 수행한다.