CI/CD 개발용어로 가끔씩 들어본 적이 있고, 자동화 배포? 정도로 알고있다
최근 aws ec2로 배포하면서 CI/CD를 배우면서 같이 사용해보고자 알아봄
CI/CD (Continuous Integration/Continuous Delivery)는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 더욱 짧은 주기로 고객에게 제공하는 방법입니다. CI/CD의 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포입니다. CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제(일명 "통합 지옥(integration hell)")를 해결하기 위한 솔루션입니다.
지속적 통합, 지속적 서비스 제공, 지속적 배포 이 3가지의 의미를 가지고 있다고 한다.
CI/CD는 Continuous Integration/Continuous Delivery(지속적 통합/지속적 배포)를 뜻합니다.
CI/CD의 "CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미합니다. 지속적인 통합이 제대로 구현되면 애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유 리포지토리에 병합됩니다. 따라서 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌하는 문제를 이 방법으로 해결할 수 있습니다.
Github repository의 특정 브랜치에 push가 되었거나, PR을 요청하였을 때를 확인하여 코드 테스트 및 통합을 할 수 있도록 하는것이 CI이다
CI/CD의 "CD"는 지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환하여 사용됩니다. 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 합니다.
-지속적인 서비스 제공, 지속적인 배포 두 가지의 뜻이 통용되어있다
지속적 제공 (Continuous Delivery)
개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리(예: GitHub 또는 컨테이너 레지스트리)에 자동으로 업로드되는 것을 뜻한다
- 운영팀은 이 리포지토리에서 애플리케이션을 실시간 프로덕션 환경으로 배포할 수 있습니다. 이는 개발팀과 비즈니스팀 간의 가시성 및 커뮤니케이션 부족 문제를 해결해 줍니다.
- 지속적인 서비스 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 합니다.
지속적 배포 (Continuous Deployment)
개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미합니다.
- 지속적인 배포는 파이프라인의 다음 단계를 자동화함으로써 지속적인 서비스 제공의 장점을 활용합니다.
CI는 Git과 같은 형상관리 시스템 레포지토리 메인 브랜치에 버그수정, 새로운 기능에 대한 코드를 최대한 작은단위로 나누어 빠르고 자주 커밋, 머지하고 이에 대한 변경사항에 대해서 자동으로 빌드하고, 테스트하는 방법이다.
CI과정에서 빌드와 테스팅이 완료된 코드를 사용자에게 지속적으로 배포하는 과정을 의미한다. 배포 준비, 실제 배포를 수동으로 한다면 Continuous Delivery, 이 과정을 자동화하면 Continuous Deployment라고 부른다.
CI/CD를 사용하면 코드수정이 일어나거나 새로운 변경사항이 발생했을 때, 자동화된 CI를 이용해 빠르게 테스트 후 병합하고, CD를 활용함으로써 사용자에게 빠른 서비스를 제공해 줄수있다
CI/CD를 하는 여러가지 툴이 있다고 한다
Jenkins, Github Action, CircleCI,TeamCity 등 툴을 이용하여 파이프라인을 구축하여 본인의 프로젝트에 알맞게 사용하면된다고 한다.
나는 최근 aws ec2를 이용해 배포하였기 때문에 여기에 맞는 툴을 찾아봐야겠다