-
[용어 정리] CI / CD란카테고리 없음 2024. 6. 8. 23:00
CI(Continuous Integration)와 cd(Continuous Delivery/Deployment)는 애플리케이션 개발 단계를 자동화하여 더 짧은 주기로 클라이언트에게 제공하는 방법으로, 두 가지 개념은 팀의 개발 및 배포 프로세스를 자동화하고 품질을 유지하며 효율성을 향상시키는 데 도움을 줍니다.
CI란
개발자들이 코드 변경 사항을 정기적으로 공유 리포지토리에 병합하고, 이를 자동으로 빌드 및 테스트하여 코드 품질을 지속적으로 유지하는 프로세스입니다. 여러 개발자들이 동시에 작업을 하고 각자의 변경사항을 공유 리포지토리에 통합할 때, CI는 자동화된 빌드 및 테스트 과정을 통해 통합 문제를 최소화합니다. 일반적으로 CI는 다음과 같은 단계를 포함합니다.
- 코드 푸시: 개발자가 변경사항을 소스 코드 관리 시스템(Git 등)에 푸시합니다.
- 자동 빌드: 푸시된 코드를 CI 서버에서 자동으로 빌드합니다.
- 자동 테스트: 빌드된 소프트웨어에 대해 자동화된 테스트 스위트를 실행하여 버그를 식별합니다.
- 결과 피드백: 테스트 결과와 빌드 상태에 대한 피드백을 제공합니다.
- 통합 문제 해결: 다른 개발자들이 동시에 작업할 때 발생하는 통합 문제를 해결합니다.
CI를 통해 개발자들은 변경사항이 주기적으로 통합되어 공유 리포지토리에서 동작 가능한 상태를 유지할 수 있고 이를 통해 버그를 조기에 발견하고 수정하며 팀 전반의 생산성과 협업을 향상시킬 수 있습니다.
CD란
CI의 확장으로서, 개발자들이 작성한 코드 변경 사항이 자동으로 버그 테스트를 거쳐 공유 리포지토리에 업로드되며 이를 운영팀이 실시간으로 프로덕션 환경으로 배포할 수 있도록 지원하는 프로세스입니다. CD를 통해 개발자들은 소프트웨어를 자동으로 빌드, 테스트, 배포하는 과정을 구축하고, 지속적인 피드백과 변경사항을 클라이언트에게 제공할 수 있습니다. 주요 단계는 다음과 같습니다.
- CI 단계: 앞서 언급한 CI 단계를 거쳐 통합된 코드를 생성합니다.
- 자동화된 배포: 빌드된 소프트웨어를 자동으로 스테이징 환경 또는 프로덕션 환경에 배포합니다.
- 자동화된 테스트: 배포된 소프트웨어에 대해 자동화된 테스트를 실행하여 기능, 성능, 안정성 등을 검증합니다.
- 수동 테스트 및 검증: 자동화된 테스트 이외에도 수동으로 테스트를 수행하고, 사용자 경험을 평가합니다.
- 출시: 테스트를 통과한 변경사항을 클라이언트에게 출시합니다.
CD를 통해 개발자와 운영팀은 변경사항을 신속하게 클라이언트에게 전달할 수 있고 지속적인 배포는 소프트웨어의 품질을 유지하면서 클라이언트의 요구사항에 빠르게 대응할 수 있는 장점을 제공합니다.
CI와 CD는 애플리케이션의 전체 라이프사이클에 걸쳐 지속적인 자동화와 모니터링을 제공하는 파이프라인으로 구현됩니다. 이러한 파이프라인은 DevOps 또는 SRE (사이트 신뢰성 엔지니어링) 방식을 통해 개발 및 운영팀의 협력을 촉진합니다.
CI/CD 주요 장점
개발 속도 향상: CI와 CD는 코드 변경 사항을 빠르고 자주 배포할 수 있는 환경을 제공합니다. 이를 통해 개발자들은 클라이언트의 요구사항에 신속하게 대응하고 변경사항을 빠르게 클라이언트에게 전달할 수 있습니다.
코드 품질 개선: CI는 코드 변경 사항을 자동으로 빌드하고 테스트하여 버그와 오류를 최소화하고 코드 품질을 유지합니다. 자동화된 테스트는 기능, 성능, 안정성 등을 평가하여 코드의 품질을 검증합니다. 또한, 코드 표준과 규칙을 준수하도록 유도하여 일관성을 유지할 수 있습니다.
배포 신뢰성 증가: CD는 배포 프로세스를 자동화하여 인적 실수를 방지하고 안정적인 배포를 실현합니다. 롤백 및 복구 기능을 활용하여 문제 발생 시 신속하게 이전 상태로 복원할 수 있습니다. 이를 통해 소프트웨어 배포의 신뢰성과 안정성을 높일 수 있습니다.
협업 및 커뮤니케이션 강화: CI와 CD는 개발 및 운영팀 간의 협업과 커뮤니케이션을 강화합니다. 공유된 파이프라인을 통해 개발자와 운영팀은 서로의 작업에 대한 가시성과 조정을 개선하며, 문제 해결과 혁신을 촉진합니다. 이를 통해 팀 간의 협력을 강화하고 개발과 운영의 경계를 허물어 신속한 개발과 안정적인 운영을 이끌어냅니다.
CI/CD가 중요한 이유
CI/CD는 조직이 버그 및 코드 오류를 예방하는 동시에 지속적인 소프트웨어 개발 및 업데이트 주기를 유지하는 데 도움이 됩니다.
애플리케이션이 커짐에 따라 CI/CD의 기능을 활용하면 복잡성을 줄이고 효율성을 높이며 워크플로우를 간소화할 수 있습니다.
기존에 새 코드를 커밋에서 프로덕션으로 가져오는 데 필요했던 수동 개입을 CI/CD가 자동화하므로 다운타임이 최소화되고 코드 릴리스 주기가 단축됩니다. 또한 코드의 업데이트와 변경 사항을 더 빠르게 통합할 수 있으므로 사용자 피드백을 더 자주 효과적으로 통합할 수 있고, 그 결과 사용자에게 긍정적인 결과를 제공할 수 있으며 전체적인 고객 만족도가 향상됩니다.
일반적인 CI/CD 툴
CI/CD 툴은 팀이 개발, 배포, 테스트를 자동화하도록 지원합니다. 특히 통합(CI) 측면을 다루는 툴도 있고, 개발 및 배포(CD)를 관리하는 툴도 있으며, 지속적인 테스트 또는 관련 기능에 특화된 툴도 있습니다.
- Jenkins: Jenkins는 가장 대표적인 오픈 소스 CI/CD 도구로, 유연한 구성 옵션을 제공하여 다양한 프로젝트에 적용할 수 있습니다. Jenkins는 소스 코드 변경 사항을 모니터링하고, 변경사항이 감지되면 자동으로 빌드, 테스트, 배포 등의 작업을 수행합니다.
- Travis CI : Travis CI는 GitHub와 강력한 통합을 제공하는 CI/CD 도구입니다. GitHub 저장소와 연동하여 사용할 수 있으며, 코드 변경 사항을 자동으로 감지하고 테스트 및 배포할 수 있습니다. Travis CI는 간단한 구성과 빠른 세팅을 제공하여 개발자들이 쉽고 빠르게 CI/CD 파이프라인을 구축할 수 있는 장점을 가지고 있으며 이를 통해 개발자들은 GitHub 프로젝트에 Travis CI를 적용함으로써 손쉽게 자동화된 테스트와 배포를 수행할 수 있습니다.
- CircleCI : CircleCI는 클라우드 기반의 CI/CD 도구로, 가독성 좋은 구성 파일과 통합된 워크플로우를 제공하여 개발자들이 빠르게 CI/CD 파이프라인을 구축할 수 있습니다. 자동화된 테스트 및 배포 과정을 통해 효율적인 개발과 배포를 실현할 수 있습니다.
- GitLab CI/CD : GitLab CI/CD는 GitLab의 통합된 솔루션으로, 코드 저장소와 함께 CI/CD 파이프라인을 관리할 수 있습니다. 개발 및 운영 팀 간의 협업을 강화하며, 코드 변경 사항을 자동으로 빌드, 테스트하고 배포할 수 있습니다.
- GitHub Actions : GitHub Actions는 GitHub 플랫폼에서 제공되는 자동화 도구로, 코드 저장소와 함께 CI/CD 워크플로우를 구성할 수 있습니다. GitHub Actions를 통해 코드 변경 사항이 발생하면 자동으로 빌드, 테스트, 배포되며, 다양한 작업을 자동화할 수 있습니다.
- Red Hat OpenShift : Red Hat OpenShift와 같은 컨테이너 플랫폼을 사용하면 클라우드 네이티브 애플리케이션의 CI/CD를 간편하게 구현하고 일관된 방식으로 표준화할 수 있습니다.
- OpenShift : OpenShift는 컨테이너 기반 애플리케이션의 배포, 관리 및 확장을 위한 플랫폼으로 내장된 CI/CD 기능을 제공합니다. 이를 통해 애플리케이션의 자동화된 배포와 롤백을 지원하여 개발자와 운영팀이 클라우드 환경에서 신속하고 안정적인 CI/CD를 구현할 수 있습니다.
- Spinnaker: 멀티클라우드 환경을 위해 구축된 CD 플랫폼
- GoCD: 모델링 및 시각화에 중점을 둔 CI/CD 서버
- Concourse: 지속적인 오픈소스 작업 툴
- Concourse: CD용으로 설계된 빌드 플랫폼
정리
CI와 CD는 현대적인 소프트웨어 개발 방법론에서 필수적인 요소로 인정받고 있습니다. CI는 개발자들이 코드 변경 사항을 공유 리포지토리에 정기적으로 병합하고, 자동으로 빌드와 테스트를 수행하여 코드 품질을 유지하는 과정으로 이를 통해 개발자들은 신속한 피드백을 받고, 코드 변경 사항을 지속적으로 통합함으로써 품질 문제를 조기에 발견하고 수정할 수 있습니다.
CD는 개발자들이 적용한 코드 변경 사항이 버그 테스트를 거쳐 자동으로 리포지토리에 업로드되고 운영팀이 이를 실시간 프로덕션 환경으로 배포할 수 있도록 지원하는 프로세스로, 개발자와 운영팀은 서로 협력하여 변경된 코드를 신속하게 클라이언트에게 제공할 수 있습니다. CD는 개발과 운영의 경계를 허물어 더욱 효율적인 협업과 안정적인 배포를 실현하는데 도움을 줍니다.
CI와 CD는 개발자들이 더 빠르고 안정적으로 소프트웨어를 제공하고 품질을 유지할 수 있도록 도움을 주며, 다양한 도구와 플랫폼을 활용할 수 있고 빠른 출시 주기, 코드 품질 개선, 배포 신뢰성 향상, 협업 및 커뮤니케이션 강화 등의 여러 장점들을 얻을 수 있습니다. CI와 CD는 현대적인 개발과 운영 방식을 모두에게 적용함으로써 더 나은 소프트웨어 제공을 가능하게 하는 핵심적인 원칙과 접근법입니다.