본문 바로가기
BackEnd

CI/CD에 대해서

by SoriKim 2023. 12. 3.
반응형

1. CI/CD 란? 

CI/CD는 "Continuous Integration" 및 "Continuous Deployment/Delivery"의 약어로, 소프트웨어 개발 및 배포 프로세스를 자동화하고 지속적으로 진행하는 방법론입니다. 이러한 방법론은 소프트웨어의 품질을 향상시키고 릴리스 주기를 단축하여 빠르게 변화하는 비즈니스 요구사항에 대응하는 데 도움이 됩니다. 

 

▶︎ CI(Continuous Integration - 지속적 통합)

목표

  • 개발자들이 작성한 코드를 지속적으로 통합하고 빌드하여 품질을 유지하는 것

동작원리

  • 개발자는 코드를 중앙 저장소(예: Git)에 푸시(Push)합니다. 
  • CI 서버는 푸시된 코드와 코드 변경을 감지하고 자동으로 소스코드를 가져와 빌드합니다.
  • 필요한 의존성 패키지를 설치하고 빌드 스크립트를 실행해 애플리케이션을 빌드합니다. 
  • 빌드된 애플리케이션에 대해 자동으로 단위 테스트, 통합 테스트 등을 실행합니다.
  • 빌드 및 테스트에 성공하면 통합된 코드를 저장소에 병합(Merge)합니다.
  • 통합된 코드는 안정된 상태로 유지되며, 다른 개발자들이 가져와 작업할 수 있습니다. 

장점

  • 코드 품질의 지속적인 향상
  • 통합 오류의 조기 발견
  • 빠른 피드백 제공

▶︎ CD(Continuous Deployment - 지속적 배포) vs. Continuous Delivery(지속적 제공)

 

Continuous Delivery

  • CI가 성공하면 개발자 또는 QA 팀은 수동으로 테스트를 진행합니다. 
  • 테스트 완료 시 안정된 코드를 프로덕션 환경에 배포하기 전에 프로덕션과 유사한 환경에서 추가 테스트를 진행합니다. 
  • 프로덕션으로의 배포를 수동으로 결정하고 수행합니다. 

Continuous Deployment

  • CI 성공 후 자동으로 프로덕션 환경에 배포가 진행됩니다. 
  • 배포 스크립트 또는 오케스트레이션 도구를 사용해 신규 코드를 프로덕션 서버에 배포합니다. 
  • 배포 후 자동으로 테스트를 실행하여 배포가 안정되었느지 확인합니다. 
  • 배포가 문제를 일으키면 자동으로 롤백되거나, 수동으로 롤백할 수 있는 메커니즘이 구현됩니다. 

장점

  • 릴리스 주기를 단축하고 빠른 피드백을 통해 신속한 개선

 

2. 왜 CI/CD가 필요한가 ?

1) 빠른 피드백 제공
CI/CD는 코드 변경 사항이 발생할 때마다 자동으로 빌드와 테스트를 실행하므로, 개발자들은 코드 품질 및 동작 여부에 대한 빠른 피드백을 받을 수 있습니다. 따라서, 조기에 문제를 감지하고 빠르게 수정함으로써 개발 생산성을 향상시키고 품질을 유지할 수 있습니다. 

 

2) 통합 오류의 조기 발견
CI는 다양한 개발자들이 작성한 코드를 지속적으로 통합하고 테스트하므로 통합 오류를 조기에 발견할 수 있습니다. 따라서, 통합 오류를 조기에 해결해 전체 프로젝트의 안정성을 유지하고 코드 충돌을 방지합니다. 

 

3) 릴리스 주기 단축
CD는 자동화된 빌드 및 배포를 통해 소프트웨어를 신속히 프로덕션 환경에 배포할 수 있습니다. 신속한 릴리스 주기는 비즈니스 요구사항에 빠르게 대응할 수 있게 하며, 사용자에게 빠른 혜택을 제공합니다. 

 

4) 일관된 환경 제공

CI/CD는 환경을 자동으로 구성하므로 모든 단계에서 일관된 환경에서 테스트 및 배포가 이루어집니다. 이런 일관된 환경에서의 테스트와 배포는 예측 가능성을 높이고 프로덕션 이슈를 방지합니다. 

 

5) 자동화를 통한 효율성 증대 
CI/CD는 작업 프로세스를 자동화해 개발자 및 운영 팀의 노동력을 절감합니다. 효율적인 자동화는 인간 에러를 감소시키고 작업의 일관성을 유지하며, 반복적이고 지루한 작업을 자동으로 처리합니다. 

 

6) 스케일링과 확장성

자동화된 프로세스는 더 많은 프로젝트, 팀 및 사용자 요구를 처리할 수 있도록 스케일링될 수 있습니다. 큰 규모의 프로젝트나 조직에서도 소프트웨어 릴리스를 효과적으로 관리하고 확장할 수 있습니다. 

 

3. CI/CD를 구현하는 데 사용되는 다양한 도구들 

▶︎ CI 도구 

  • Jenkins
    오픈 소스 CI도구로, 다양한 플러그인을 지원해 다양한 환경에서 사용 가능합니다. Jenkins는 빌드, 테스트, 배포 등의 작업을 자동화하는데 널리 사용됩니다. 
  • Travis CI
    GitHub 프로젝트와 통합되어 있는 클라우드 기반 CI 서비스로, 프로젝트의 브랜치에 대한 빌드 및 테스트를 지원합니다. 
  • CircleCI
    클라우드 기반 CI/CD 서비스로, GitHub 및 Bitbucket과 통합되어 있습니다. 컨테이너 기반 환경에서 빌드 및 테스트를 수행합니다. 
  • GitLab CI/CD
    GitLab에 통합된 CI/CD 기능을 제공합니다. 코드 리포지토리와 함께 제공되며, GitLab Runner를 사용해 빌드 및 배포를 자동화합니다. 
  • TeamCity
    JetBrains에서 개발한 CI 서버로, 다양한 플랫폼 및 언어 지원, 강력한 빌드 및 배포 기능을 제공합니다. 

 

▶︎ CD 도구

  • Spinnaker
    Netflix에서 개발한 오픈 소스 CD 도구로, 멀티클라우드 환경에서의 지속적인 배포를 지원합니다. 
  • Jenkins X
    Kubernetes 위에서 동작하는 CI/CD 도구로, 클라우드 네이티브 애플리케이션의 빌드 및 배포를 지원합니다. 
  • Argo CD
    Kubernetes 애플리케이션의 지속적인 전달을 위한 도구로, GitOps의 개념을 기반으로 합니다. 
  • AWS CodePipeline
    Amazon Web Services에서 제공하는 CI/CD 서비스로, AWS 서비스들과의 통합이 강점입니다. 
  • GitLab CI/CD
    GitLab은 CI 외에도 CD를 위한 강력한 도구를 제공합니다. 지속적인 통합 및 배포를 단일 플랫폼에서 관리할 수 있습니다. 
반응형

'BackEnd' 카테고리의 다른 글

[AWS] VPC에 대해서  (0) 2023.12.06
[AWS] RDS에 대해서  (0) 2023.12.03
클라우드 컴퓨팅에 대해서  (0) 2023.11.30
AWS에 대해서 알아보기  (0) 2023.11.30
MySQL 사용방법에 대해서  (0) 2023.11.29

댓글