본문 바로가기
프로그래밍/기타

CI / CD

by hustle-ing 2023. 6. 3.

CI / CD

CI는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다. CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충동할 수 있는 문제를 해결할 수 있다.

 

CD는 지속적인 서비스 제공(Continuous Delivery) 혹은 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용된다. 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.

 

 

 

CI / CD의 단계

일반적인 앱의 개발 및 유지보수 단계

지속적 통합(Continuous Integration, CI)

개발자를 위한 자동화 프로세스라고 볼 수 있으며, Code - Build - Test 단계에서 꾀할 수 있다.

  • Code : 개발자가 코드를 원격 코드 저장소에 push 하는 단계
  • Build : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
  • Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인하는 단계

이 과정에서 개발자는 코드를 자주 원격 코드 저장소에 push하고, 테스트 및 빌드를 하며, 빌드 결과를 통해 빌드의 성공 여부를 확인하고, 통합 테스트를 통해 개선 방안을 찾는다. 이 지속적인 통합 과정을 통해 개발자는 버그를 일찍 발견할 수 있고, 테스트가 완료된 코드에 대해 빠른 전달이 가능해지며 지속적인 배포가 가능해진다.

 

지속적인 통합은 모든 코드 변화를 하나의 리포지토리에서 관리하는 것 부터 시작된다. 모든 개발팀이 코드의 변화를 확인할 수 있기 때문에 투명하게 문제점을 파악할 수 있다. 잦은 pull request와 merge로 코드를 자주 통합한다. 이 때, 기본적인 테스트도 작동시킬 수 있다. 이렇게 지속적 통합을 통해 개발팀은 각자 개발한 코드를 이른 시점에 자주 합치고 자주 테스트 해볼 수 있다.

 

지속적 통합으로 보안 이슈, 에러 등을 쉽게 파악할 수 있어 해당 이슈를 빠르게 개선할 수 있다. 이전에는 각자 개발자가 작성한 코드를 합치고 난 후, 모두 모여서 빌드를 시작하고 나서야 문제점을 파악할 수 있었다. 지속적 통합이 적용된 개발팀은 코드를 머지하기 전, 이미 빌드 오류나 테스트 오류를 확인하여 훨씬 더 효율적인 개발을 할 수 있게 된다.

 

 

지속적 배포(Continuous Delivery/Deployment, CD)

Release - Deploy - Operate 단계에서 꾀할 수 있다.

  • Release : 배포 가능한 소프트웨어 패키지를 작성한다.
  • Deploy : 프로비저닝을 실행하고 서비스를 사용자에게 노출한다. 실질적인 배포 부분.
  • Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지한다.

지속적 배포의 경우, 코드 변경 사항의 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계로, 테스트 자동화와 코드 배포 자동화가 포함된다. 이 프로세스를 완료하면 프로덕션 준비가 완료된 빌드를 코드 리포지토리에 자동으로 배포할 수 있기 때문에 운영팀이 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포할 수 있게 된다.

 

최근에는 클라우드 기술 발전과 맞물려 지속적 통합과 지속적 배포가 빠른 속도로 진행되면서 CI/CD를 하나로 묶어 다루는 경우가 점차 증가하고 있다. 고객의 피드백을 빨리 받기 위해서라도, 서비스를 중단하지 않기 위해서라도 릴리스만 잘 기록해두고 바로바로 배포하는 사례가 증가하고 있는 것이다.

'프로그래밍 > 기타' 카테고리의 다른 글

Github action으로 CI/CD 구축하기  (0) 2023.06.05
YAML  (0) 2023.06.04
WAI-ARIA  (0) 2023.04.27
웹 접근성  (0) 2023.04.27
Redux - 기초  (0) 2023.04.24

댓글