코드 변경을 빠르고 안정적으로 서비스에 반영하는 것이 중요합니다.
최근에는 여러 툴들이 많아져서, 실제 처음배우시는 분들도, CI/CD(연속적 배포)를 자연스럽게 하시는 추세인데요
되려, 처음부터 해보지 않았던 경우에는 , 많이 무서워하는 부분이기도 합니다.
이번 글에서는 다양한 CI/CD 구축 방법들의 장단점, 난이도, 그리고 추천 시나리오를 백엔드까지 포함하여 자세히 다루어보겠습니다.
CI(Continuous Integration):
코드 변경 사항을 지속적으로 통합하는 프로세스. 자동 빌드와 테스트를 포함함.
CD(Continuous Deployment):
CI 이후 변경된 코드를 자동으로 운영 환경에 배포하는 프로세스.
https://github.com/features/actions
GitHub에서 공식 제공하는 CI/CD 플랫폼. 저장소에 .github/workflows/*.yml
파일로 파이프라인 구성.
장점:
- GitHub에 이미 있는 프로젝트라면 매우 쉽게 설정 가능
- 커뮤니티와 예제가 풍부
- Matrix 전략, 조건부 실행 등 유연한 구성 가능
- GitHub Marketplace를 통한 다양한 액션 재사용 가능
단점:
- 무료 요금제에서는 실행 시간에 제한 (2,000분/월)
- 복잡한 배포 구조에는 한계가 있음
추천 시나리오:
- 스타트업, 소규모 프로젝트, 개인 프로젝트
- GitHub에 코드가 호스팅되어 있는 경우
공식 문서:
https://aws.amazon.com/codepipeline/
AWS에서 제공하는 완전한 CI/CD 솔루션. CodeCommit, CodeBuild, CodeDeploy, ECS/Fargate 등과 연동 가능.
장점:
- 인프라와 CI/CD를 하나의 클라우드에서 통합 관리 가능
- IAM을 통한 보안 통제 용이
- ECS(Fargate)를 사용하면 서버리스로 백엔드 배포 가능
- CloudWatch, SNS 등과 연동하여 고급 알림, 모니터링 구성 가능
단점:
- 진입장벽이 다소 높고 초기 설정이 복잡함
- UI가 불친절하고 학습 곡선이 있음
- 비용이 발생할 수 있음
추천 시나리오:
- AWS 인프라 기반의 서비스
- 중대형 규모의 마이크로서비스 아키텍처
공식 문서:
GitLab에서 자체 제공하는 CI/CD 기능. .gitlab-ci.yml
파일을 통해 파이프라인 정의.
장점:
- GitLab에서 모든 기능 통합 제공 (CI/CD + 코드 리뷰 + 이슈 관리 등)
- 강력한 Docker 기반 환경 지원
- 셀프 호스팅 시 무제한 사용 가능
단점:
- GitHub에 비해 생태계가 작음
- UI/UX가 다소 복잡하게 느껴질 수 있음
- 퍼블릭 클라우드에서 실행 시 비용 발생 가능
추천 시나리오:
- GitLab 사용 중인 팀
- 보안상 자체 인프라에 모든 것을 구성해야 하는 환경
공식 문서: GitLab CI/CD Docs
정적 웹사이트 또는 프론트엔드 SPA 배포에 특화된 플랫폼. Git 연동만 하면 배포 자동화.
장점:
- 프론트엔드 프로젝트(Nuxt, React, Next 등)에 최적화
- Preview URL, Git 연동 배포가 매우 쉬움
- 무료 요금제로도 충분히 사용 가능
단점:
- 백엔드와 함께 운영하는 프로젝트에는 제한적
- 커스터마이징이 제한됨
추천 시나리오:
- JAMstack, 프론트엔드 중심 프로젝트
- 빠르게 MVP를 배포하고 싶은 경우
클라우드 기반 CI/CD 서비스. GitHub와 쉽게 연동 가능.
장점
- 설정이 간단
- 직관적인 UI
- 빠른 빌드 속도
단점
- 요금제에 따라 제약 있음
- 특정 플랫폼에 최적화되어 있는 건 아님 (AWS 등)
추천 시나리오:
- 빠르게 셋업하고 싶은 경우
- GitHub 연동이 중요한 경우
- 프론트/백 모두 간단한 배포 구조
Docker 이미지를 만들고, 이를 ECS(Fargate 포함)나 Kubernetes에 배포하는 구조. 거의 모든 CI/CD 툴에서 이 조합으로 배포 가능.
장점
- 환경 일관성 보장 (개발~운영 동일 이미지)
- 확장성 우수
- 모든 언어/프레임워크에 호환 가능
단점
- Docker와 컨테이너 오케스트레이션에 대한 이해 필요
- ECS나 K8s는 셋업이 복잡할 수 있음
추천 시나리오
- 서비스가 여러 개로 나뉘어 있는 경우 (Microservices)
- 트래픽이 많고, 자동 스케일링이 필요한 경우
- DevOps 경험이 있는 팀