반응형
CI/CD는 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Delivery / Continuous Deployment)를 자동화하여 소프트웨어의 품질을 높이고 배포 속도를 향상시키기 위한 기법입니다. 이를 통해 코드 변경이 빈번하고 빠르게 이루어지는 환경에서 품질을 유지하며, 빠르게 새로운 기능이나 수정 사항을 배포할 수 있습니다.
CI/CD의 핵심 목표는 자동화, 빠른 피드백, 리스크 감소입니다.
1. Continuous Integration (CI)
Continuous Integration (CI)는 개발자가 작성한 코드를 주기적으로(일반적으로 하루에 여러 번) 통합(merge)하여, 빌드 및 테스트하는 과정입니다.
CI의 목적
- 빈번한 코드 통합을 통해 개발자들 간의 충돌을 최소화
- 자동화된 빌드 및 테스트를 통해 코드 품질을 유지하고 오류를 사전에 발견
- 빠른 피드백을 제공하여 문제를 빠르게 수정하도록 돕기
CI 프로세스
- 개발자가 로컬에서 작업한 코드를 버전 관리 시스템(예: Git)에 푸시(Push)합니다.
- CI 서버(예: Jenkins, GitHub Actions, GitLab CI 등)가 이를 감지하고, 자동으로 빌드 및 테스트를 수행합니다.
- 모든 테스트가 통과하면, 코드가 주요 브랜치에 병합됩니다.
- 빌드가 실패하거나 테스트가 실패하면, 개발자는 즉시 피드백을 받고 문제를 수정합니다.
CI 도구 예시
- Jenkins
- GitLab CI/CD
- Travis CI
- CircleCI
- GitHub Actions
2. Continuous Delivery (CD)
Continuous Delivery (CD)는 CI에서 빌드되고 테스트된 코드가 테스트 환경에서 안정적으로 동작하는 것을 확인한 후, 배포 준비 상태로 자동으로 전달되는 과정을 의미합니다.
Continuous Delivery 의 목적
- 배포 준비 상태 유지: 언제든지 프로덕션에 배포할 수 있도록 코드가 준비되도록 관리
- 자동화된 배포 준비: 수동 개입 없이도 코드가 배포될 준비가 된 상태로 지속적으로 유지
- 빠르고 안정적인 배포: 배포 프로세스를 자동화하여 더 적은 시간에 빠르고 빈번하게 배포 가능
CD 프로세스
- CI 프로세스에서 코드가 빌드되고 테스트되어 배포 준비 상태가 됩니다.
- 코드가 배포 준비 상태로 환경에 배포되기 전에 다시 한 번 테스트가 수행됩니다.
- 수동 승인이 이루어진 후, 코드가 프로덕션 환경에 배포됩니다.
Continuous Delivery 도구 예시
- Jenkins
- Spinnaker
- AWS CodePipeline
- GitLab CI/CD
3. Continuous Deployment (CD)
Continuous Deployment (CD)는 Continuous Delivery의 진화형으로 수동 승인 없이 자동으로 프로덕션 환경에 배포가 이루어지는 프로세스입니다.
Continuous Deployment의 목적
- 완전한 자동화: 배포 과정에서 수동 개입을 최소화합니다.
- 빠르고 빈번한 배포: 자동화된 파이프라인을 통해 매우 빠르고 빈번한 배포를 가능하게 합니다.
- 리스크 관리: 자동화된 테스트와 모니터링으로 배포 후 즉시 이상을 감지하여 빠르게 대응합니다
CD 프로세스
- 코드가 CI에서 빌드되고 테스트를 거친 후, 배포 준비 상태가 됩니다.
- 자동 배포가 이루어져, 별도의 수동 개입 없이 프로덕션 환경에 배포됩니다.
- 자동화된 테스트와 모니터링 시스템이 배포 후 정상 동작 여부를 실시간으로 감지하고, 문제가 발생하면 롤백합니다.
Continuous Deployment 도구 예시
- Jenkins
- CircleCI
- AWS CodeDeploy
- Google Cloud Build
4. CI/CD의 이점
- 빠른 피드백
- 코드 변경이 빠르게 테스트되고 통합되므로 개발자는 오류를 즉시 확인하고 수정할 수 있습니다.
- 배포의 신뢰성 향상
- 자동화된 테스트를 통해 배포 오류가 줄어들고, 불확실성을 감소시켜 안정적인 배포가 이루어집니다.
- 소프트웨어 품질 향상
- 코드 통합 및 자동화된 테스트를 통해 품질 관리가 강화되고, 리스크를 사전에 줄일 수 있습니다.
- 배포 주기 단축
- 배포가 자동화되어 더 자주, 더 빠르게 배포할 수 있습니다. 이에 따라 시장 변화에 더 민첩하게 대응할 수 있습니다.
- 팀의 생산성 향상
- 반복적인 작업을 자동화하여 개발자들이 핵심 비즈니스 로직에 집중할 수 있도록 도와줍니다.
5. CI/CD 파이프라인 예시
CI/CD 파이프라인은 일반적으로 여러 단계로 구성되며, 각 단계마다 자동화된 작업이 수행됩니다.
1. 코드 푸시
개발자가 로컬에서 작업한 코드를 GitHub 저장소에 푸시하면, GitHub Actions가 자동으로 트리거됩니다.
2. 빌드 및 테스트
- GitHub Actions가 자동으로 빌드 및 테스트를 실행합니다.
- 테스트가 실패하면, 빌드가 중단되고 피드백이 개발자에게 전달됩니다.
3. 배포
- 테스트가 성공하면, 배포 스크립트가 실행됩니다. 예를 들어, SSH나 API 호출을 통해 애플리케이션을 실제 프로덕션 서버에 배포할 수 있습니다.
- Continuous Delivery에서는 수동 승인이 필요할 수 있지만, Continuous Deployment에서는 자동으로 배포됩니다.
4. 모니터링 및 롤백
- 배포 후에는 자동화된 모니터링과 테스트를 통해 오류를 감지합니다.
- 문제가 발생하면 자동으로 롤백하거나 대응할 수 있습니다.
6. CI/CD를 위한 도구
- Jenkins
- 오픈소스 CI/CD 도구로, 플러그인 기반으로 확장 가능합니다. 다양한 빌드 및 배포 작업을 자동화할 수 있습니다.
- GitLab CI/CD
- GitLab에 내장된 CI/CD 도구로, 코드 푸시와 함께 자동으로 파이프라인을 트리거하고 관리할 수 있습니다.
- CircleCI
- 빠르고 효율적인 CI/CD를 제공하는 클라우드 기반 도구로, GitHub와 통합되어 사용할 수 있습니다.
- Travis CI
- GitHub와 통합되는 CI/CD 서비스로, 오픈소스 프로젝트에서 많이 사용됩니다.
- AWS CodePipeline
- AWS에서 제공하는 CI/CD 서비스로, AWS 환경에서 손쉽게 배포 파이프라인을 구축할 수 있습니다.
- GitHub Actions
- GitHub에서 제공하는 CI/CD 도구로, 워크플로우를 설정하여 빌드, 테스트, 배포를 자동화할 수 있습니다.
7. CI/CD 도입 시 고려사항
- 테스트 자동화
- 효과적인 CI/CD 파이프라인을 구성하기 위해서는 자동화된 테스트가 반드시 필요합니다. 단위 테스트, 통합 테스트, UI 테스트 등을 자동으로 실행하여 품질을 보장해야 합니다.
- 보안
- CI/CD 파이프라인에 보안 취약점이 있을 수 있기 때문에, 코드와 데이터의 보안을 철저히 관리하고, 배포 프로세스에서도 보안 검토가 필요합니다.
- 모니터링
- 배포 후 모니터링을 통해 시스템이 정상적으로 동작하는지 확인하고, 문제가 발생하면 즉시 대응할 수 있도록 합니다.
8. CI/CD의 핵심 요약
- Continuous Integration: 코드 변경 후 자동으로 빌드하고 테스트하는 과정
- Continuous Delivery: 테스트된 코드를 항상 배포 가능한 상태로 유지
- Continuous Deployment: 코드 변경 후 자동으로 프로덕션에 배포
CI/CD는 소프트웨어 개발의 속도와 품질을 동시에 개선할 수 있도록 해주는 핵심 기술입니다.
반응형
'CS 공부일지' 카테고리의 다른 글
라이브러리(Library)와 프레임워크(Framework) (0) | 2025.03.31 |
---|---|
컴파일러 언어와 인터프리터 언어의 개념, 차이점 (0) | 2025.03.30 |
클라우드 주요 개념 정리 (가상머신, 온프레미스&오프프레미스, IaaS, PaaS, SaaS, 도커) (1) | 2025.03.26 |
API 개념과 원리 (1) | 2025.03.25 |
데이터 교환 형식 : JSON과 XML (1) | 2025.03.25 |