최근에는 대부분의 기업에서 CI/CD를 개발 프로세스로 사용하고 CI/CD 개발 환경에서 일을 하고 있다.
이번 글에서는 이러한 CI/CD가 무엇인지 정리하려고 한다.
본 글의 목차는 다음과 같다.
1. What is CI/CD?
2. CI/CD를 사용하는 이유?
3. CI (Continuous Integration)
4. CD (Continuous Deployment/Continuous Delivery)
5. CI/CD 파이프라인
6. 다양한 CI/CD tools
1. What is CI/CD?
CI/CD를 간단하게 설명하면 다음과 같다.
개발 단계부터 배포 때까지 단계들을 자동화를 통해서 빠르게 사용자들에게 배포할 수 있도록 만드는 것
따라서 이를 통해 개발 팀이 지속적으로 코드를 통합하고 자동화된 테스트를 수행하며 안정적인 배포를 할 수 있도록 도와준다.
CI는 Continuous Integration의 약자로 지속적인 통합이라는 뜻을 가지고 있다.
CD는 Countinuous Delivery 또는 Continuous Deployment의 약자로 지속적인 제공 또는 배포라는 뜻을 가지고 있다.
각각에 대해 알아보기 전에 왜 이러한 CI/CD라는 개념이 생겼는지 알아보자
2. CI/CD를 사용하는 이유?
CI/CD 개념이 등장하기 전에는 모든 빌드와 테스트를 수동으로 진행해야 했다.
작은 애플리케이션을 개발할 때는 “그냥 하면 되는 거 아니야?”라고 생각할 수 있지만, 기업이나 대규모 프로젝트에서는 이러한 작업이 몇 시간 또는 며칠이 걸릴 수도 있다.
또한, 작은 오타 하나로 인해 애플리케이션이 망가지는 것은 흔한 일이며, 이전에는 잘 작동하던 기능이 갑자기 오작동할 수도 있다. 자동화된 테스트 없이 이를 수동으로 검토하면, 오류가 발생한 위치를 찾는 데도 오랜 시간이 걸릴 수 있다.
어찌저찌 출시한 제품에서도 개발자가 아닌 사용자가 오류를 발견하게 되면 이를 해결하는 데 상당한 시간이 소요될 수 있다.
CI/CD는 이를 위한 해결책으로 떠올랐다.
3. CI (Continuous Integration)
CI(Continuous Integration, 지속적 통합)는 자동화된 빌드 및 테스트를 거쳐 개발자의 코드 변경 사항을 중앙 저장소에 정기적으로 병합하는 DevOps 소프트웨어 개발 방식이다.
즉, 위 그림과 같이 개발자가 코드 변경 사항을 저장소에 푸시하면 자동으로 빌드 및 테스트가 수행되어 코드에 문제가 있는지 즉시 확인할 수 있다. 만약 오류가 발생하면 빠르게 수정할 수 있어, 코드 품질을 유지하고 개발 속도를 높일 수 있다.
CI에서 중요한 두 가지 중요 포인트는 다음과 같다.
1. 작은 단위로 개발하고 주기적으로 병합하기
과거에는 팀원들이 장기간 독립적으로 작업한 후 한꺼번에 코드를 병합하는 방식이 일반적이었다.
그러나 이런 방식은 코드 충돌을 해결하는 데 오랜 시간이 걸리고, 누적된 버그가 한꺼번에 나타나기 쉬웠다.
즉, 오히려 코드 작성보다 병합 과정에서 더 많은 시간이 소요되기도 했다.
CI에서는 이러한 문제를 방지하기 위해 작은 단위로 개발하고 자주 병합하는 방식을 권장한다.
이렇게 하면 코드 변경 사항을 보다 빠르게 검토하고, 충돌을 최소화할 수 있다.
2. 통합 과정 자동화
수동으로 빌드하고 테스트하는 과정 역시 반복 작업이 많고 시간이 오래 걸린다.
하지만 빌드와 테스트는 사람이 직접 수행할 필요 없이 자동화할 수 있는 작업이므로, 이를 자동화하면 개발 시간을 크게 절약할 수 있다.
CI를 도입하면 다음과 같은 이점을 얻을 수 있다.
- 개발 생산성 향상
- 버그 조기 발견 및 해결
- 버그 수정 용이
- 코드 품질 향상
따라서, CI를 효과적으로 활용하면 개발 속도를 높이고, 유지보수성을 개선하며, 팀 협업을 원활하게 할 수 있다.
4. CD (Continuous Deployment/Continuous Delivery)
CD는 CI 이후의 배포 단계를 자동화하는 과정이며, Continuous Delivery와 Continuous Deployment 두 가지 개념으로 나뉜다.
두 개념 모두 비슷하지만, 차이점은 수동 배포와 자동 배포라고 생각하면 된다.
CD(Continuous Delivery, 지속적 제공)는 코드가 빌드 및 테스트를 통과하면 staging 단계까지 자동으로 진행되지만, 실제 배포는 관리자의 수동 승인 후 진행된다.
CD(Continuous Deployment, 지속적 배포)는 빌드 및 테스트를 통과하면 staging 단계와 실제 배포까지 자동으로 진행된다.
staging 단계는 실제 운영 환경(Production)과 유사한 환경에서 최종 테스트를 수행하는 단계이다. 운영 배포 전에 마지막으로 점검하는 과정이라고 볼 수 있다.
이러한 Continuous Delivery와 Continuous Deployment를 간단히 표현하면 아래 그림과 같다.
다시한번, 정리하면 CD의 두 개념의 차이는 최종 단계가 자동화 되었는지 여부라고 생각하면 된다.
5. CI/CD 파이프라인
CI/CD 파이프라인을 간단하게 표현하면 위 그림과 같다.
먼저 개발자가 코드를 주기적으로 push/merge를 진행하여, 자동으로 build와 test를 진행하고 (CI), Staging까지 자동으로 수행한다. 그 후, 수동 배포(Countinuous Delivery)를 하거나 자동 배포(Continuous Deployment)를 진행한다.
6. 다양한 CI/CD tools
CI/CD를 이용할 수 있는 tool로는 Jenkins, Github Action, BitBucket Pipelines 등 다양한 tool들이 존재하고 있다..!
'CI|CD' 카테고리의 다른 글
[CI/CD] Github Actions 사용해보기 (1) | 2025.02.13 |
---|---|
[CI/CD] Github Actions란? (0) | 2025.02.12 |