CI/CD

gwanhun·2024년 8월 1일

참고

개요

  • CI/CD는 지속적 통합(Continuous Integration) 및 지속적 제공/배포(Continuous Delivery/Deployment)를 의미하며, 소프트웨어 개발 라이프사이클을 간소화하고 가속화하는 것을 목표로 합니다.

CI/CD가 중요한 이유

  • CI/CD는 조직이 버그 및 코드 오류를 예방(테스트 코드 자동화)하는 동시에 지속적인 소프트웨어 개발 및 업데이트 주기를 유지하는 데 도움이 됩니다.
  • 애플리케이션이 커짐에 따라 CI/CD의 기능을 활용하면 복잡성을 줄이고 효율성을 높이며 워크플로우를 간소화할 수 있습니다.
  • 기존에 새 코드를 커밋에서 프로덕션으로 가져오는 데 필요했던 수동 개입(git push, merge, vm에 pull, build, pm2 배포 등)을 CI/CD가 자동화하므로 다운타임이 최소화되고 코드 릴리스 주기가 단축됩니다. 또한 코드의 업데이트와 변경 사항을 더 빠르게 통합할 수 있으므로 사용자 피드백을 더 자주 효과적으로 통합할 수 있고, 그 결과 사용자에게 긍정적인 결과를 제공할 수 있으며 전체적인 고객 만족도가 향상됩니다.

CI 란?

  • CI (Continuous Integration)는 "지속적인 통합"이라는 의미이다.
  • 지속적 통합이란 애플리케이션 개발을 위한 자동화 프로세스로 코드의 변경사항을 빌드 및 테스트(단위 테스트 및 통합 테스트)하여 공유 리포지토리에 통합하는 것을 말합니다.

핵심 특징 :

  • 버그의 조기 발견 및 해결: 빈번한 통합으로 인해 문제가 빠르게 드러나며, 그로 인해 더 적은 비용으로 문제를 해결할 수 있습니다.
  • 개발 속도 향상: 자동화된 툴을 사용함으로써 개발자는 코드 작성에 더 많은 시간을 할애할 수 있으며, 통합 및 배포 과정에서 발생할 수 있는 지연을 줄일 수 있습니다.
  • 높은 소프트웨어 품질: 지속적으로 코드를 검증하고 테스트함으로써 소프트웨어의 전반적인 품질과 안정성이 향상됩니다.
  • 투명성 및 가시성 증대: 프로젝트의 상태에 대한 더 많은 가시성을 통해 팀 내 커뮤니케이션이 개선됩니다.

CD 란?

  • CD는 Continuous Delivery, 지속적인 제공이라는 의미와 Continuous Deployment, 지속적인 배포라는 의미가 있다.

지속적 제공 (Continuous Delivery)

  • 지속적 제공은 소프트웨어 개발 프로세스에서 개발된 변경사항이 자동으로 빌드, 테스트를 거쳐 프로덕션 환경에 배포될 준비가 되도록 하는 것을 말합니다. 이 과정에서 중요한 점은 모든 변경사항이 배포 가능한 상태로 유지된다는 것입니다. 즉, 프로덕션에 배포하는 결정은 여전히 사람이 수동으로 할 수 있습니다.

핵심 특징:

  • 변경사항은 언제든지 안전하게 프로덕션에 배포될 수 있는 상태로 유지됩니다.
  • 배포 과정의 대부분은 자동화되지만, 실제 프로덕션 환경으로의 배포는 결정적인 순간에 수동으로 트리거 될 수 있습니다.
  • 배포 준비 과정에서 발생할 수 있는 문제를 빠르게 발견하고 해결할 수 있습니다.

지속적 배포 (Continuous Deployment)

  • 지속적 배포는 지속적 제공의 한 단계 더 나아간 개념으로, 모든 변경사항이 자동으로 빌드, 테스트를 거쳐 바로 프로덕션 환경에 배포되는 과정을 의미합니다. 이 과정에서 사람의 개입 없이 완전히 자동화된 배포가 이루어집니다.

핵심 특징:

  • 개발자가 마스터 브랜치에 코드를 푸시하면, 코드는 자동으로 프로덕션 환경으로 배포됩니다.
  • 배포 프로세스는 완전히 자동화되어 있어서 개발자나 운영 팀의 수동 개입이 필요 없습니다.
  • 신속한 피드백과 빠른 반복이 가능하여, 제품의 질을 지속적으로 개선할 수 있습니다.

차이점 요약

  • 지속적 제공: 프로덕션에 배포하기 전에 수동으로 승인을 요구할 수 있는 단계를 포함합니다. 모든 변경사항이 배포 준비 상태로 유지되지만, 실제 배포는 선택적으로 수행됩니다.
  • 지속적 배포: 모든 성공적인 빌드가 자동으로 프로덕션 환경에 배포됩니다. 개발자의 변경사항이 바로 최종 사용자에게 전달될 수 있도록 보장합니다.

이 두 개념은 비슷해 보일 수 있지만, 조직의 필요에 따라 선택적으로 적용할 수 있는 매우 구체적인 차이점을 가지고 있습니다. 지속적 제공은 더 많은 통제를 원하는 조직에 적합할 수 있으며, 지속적 배포는 빠른 시장 출시와 지속적인 피드백을 중시하는 환경에서 유용합니다.

업무에 적용 한다면?

  • 현재 회사에서 진행하는 프로젝트에는 CI와 관련된 테스트 코드 자동화 및 자동 머지 기능, CD에서는 현재 회사의 프로젝트 사이즈에서는 지속적 제공 (Continuous Delivery)과 관련된 것들 보단 지속적 배포 (Continuous Deployment)와 관련된 github actions나 jenkis등 사용을 고려해 볼것 같다.

관련하여 추가로 공부할 것들

  • CI 관련
    • 테스트 코드
      • TDD
      • 유닛테스트
      • 통합테스트
  • CD관련
    • github actions
    • jenkis
profile
주니어 백앤드 개발자

0개의 댓글