CS/웹개발

CI/CD

hyunji1109 2025. 1. 16. 01:51

출처: https://www.civo.com/blog/the-role-of-the-ci-cd-pipeline-in-cloud-computing

 

CI/CD

지속적 통합(Continuous Integration)과 지속적 배포/지속적 전달(Continuous Delivery/Continuous Deployment)을 의미하는 소프트웨어 개발 및 운영 방식

 

1. CI(지속적 통합)

  • 개발자가 작성한 코드가 중앙 저장소에 자주 통합되도록 하는 개발 관행
  • 코드 변경 사항을 자주 통합하여 버그를 빨리 발견하고 해결

 

 

주요 요소

  • 자동화된 빌드
    • 코드 변경이 발생할 때마다 자동으로 빌드를 수행하여 코드가 올바르게 실행될 수 있는지 확인
  • 자동화된 테스트
    • 새로운 코드가 기존 코드와 충돌하지 않도록 자동으로 테스트를 실행
  • 빈번한 통합
    • 개발자는 코드 변경을 저장소에 자주 통합하여 다른 팀원들이 작성한 코드와 빠르게 병합

 

장점

  • 빠른 오류 발견
    • 코드 변경이 발생할 때마다 자동으로 빌드 및 테스트를 실행하여 문제를 빨리 발견
  • 개발 효율성 향상
    • 수동으로 빌드하고 테스트하는 시간을 줄여 더 빠른 배포가 가능

 

 

2. CD(지속적 배포)

  • 소프트웨어가 자동으로 테스트되고 배포될 수 있도록 만드는 과정

 

  ❗ 지속적 전달과 지속적 배포는 비슷하지만 다른 개념 ❗  

  • 지속적 전달 (Continuous Delivery)
    • 지속적 전달은 코드가 배포 가능한 상태로 항상 준비되어 있는 것을 의미
    • 자동화된 테스트를 거친 후 자동화된 배포 파이프라인을 통해 새로운 기능이나 변경 사항이 실제 운영 환경에 배포될 준비
    • 실제로 배포가 이루어지는 것은 수동 
      • 자동으로 테스트가 끝난 후 변경된 코드가 테스트 환경이나 스테이징 서버에 자동 배포
      • 운영 환경으로 배포되기 전에 승인을 기다림

 

  • 지속적 배포 (Continuous Deployment)
    • 지속적 전달의 한 단계 더 나아간 개념
    • 코드 변경이 자동으로 운영 환경에 배포되는 것을 의미
    • 테스트가 끝나고 승인된 코드는 별도의 수동 작업 없이 자동으로 사용자에게 제공
      • 새로운 기능이 코드 저장소에 커밋되면 자동으로 빌드, 테스트, 배포가 진행
      • 사용자는 바로 새로운 기능을 사용

 

장점

  • 빠른 피드백 제공
    • 코드가 자동으로 배포되어 사용자는 빠르게 새로운 기능을 경험
    • 고객 만족도를 높이고 개발자에게도 빠른 피드백을 제공
  • 운영 환경과 가까운 테스트 환경
    • 지속적 배포를 통해 코드가 실제 운영 환경에 배포되기 전에 테스트 환경에서 실제 환경과 유사한 조건을 만들어 검증
  • 배포 자동화
    • 수동 배포의 필요성을 없애 배포가 일관되게 이루어지므로 배포 오류를 최소화

 

 

CI/CD 도구

  • Jenkins
    • 오픈소스 CI/CD 도구
    • 파이프라인을 구성하고 자동화하는 데 많이 사용
  • GitLab CI/CD
    • GitLab의 내장된 CI/CD 기능을 사용
    • 코드의 빌드, 테스트, 배포를 자동화
  • CircleCI
    • 클라우드 기반의 CI/CD 도구
    • 빠른 속도와 유연성을 제공