(유튜브 채널 드림코딩 by 엘리의 영상을 보고 정리하는 글)
요즘처럼 빠르게 진화하고 변화하는 시대에 어떻게 하면 시장과 고객의 요구에 빠르게 반응해서 제품을 출시, 업데이트할 것인가가 큰 과제이다.
이것을 위해 세계적으로 많은 기업들이 CI/CD를 개발 프로세스로 사용하고 있다.
CI/CD란?
어플리케이션 개발부터 배포 때까지 모든 단계를 자동화를 통해 조금 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있도록 만드는 것이다.
CI(Continuous Integration)
지속적인 통합
버그수정이나 새로 만드는 기능이 메인 레파지토리에 주기적으로 빌드되고 테스트되어서 머지되는 것!
포인트
- 코드 변경사항을 주기적으로 빈번하게 머지해야 한다.
머지를 너무 안하면 새로운 기능을 개발하기 위해 코드를 작성하는 시간보다 머지 충돌을 해결하는데 더 오래 걸릴 수 있다.
따라서 기능을 어떻게 작은 단위로 나눠서 메인 레파지토리에 반영하거나, 작은단위로 나눠서 사용자에게 배포하는 등 작은 단위로 나눠서 개발하는 것이 중요하다. - 통합을 위한 단계(빌드, 테스트, 머지)의 자동화
메인 레파지토리에 개발자들이 주기적으로 코드를 머지한다.
자동으로 팀의 CI 스크립트를 통해 추가된 코드와 함께 빌드하고, 여러 테스트를 실행한다.
잘 되면 Green 사인이 나오면 무사히 통과되어 배포할 때 반영이 되고, 어느 단계에서 문제가 생기면 Red 사인이 나온다.
CI 원칙을 따라갔을 때의 장점?
1. 개발 생산성 향상
주기적으로 머지를 하기 때문에 머지충돌을 피할 수 있어 개발 생산성이 올라가고,
2. 버그 수정 용이, 문제점을 빠르게 발견
머지되는 코드들은 자동으로 빌드, 테스트가 되기 때문에 코드의 결함이 빠르게 발견되고 수정할 수 있다.
작은 단위로 머지하기 때문에코드의 변경사항이 적기 때문이다.
3. 코드의 퀄리티 향상
모든 개발자들이 자신의 새 코드에 대해서 유닛 테스트를 포함해야 하기 때문이다.
CD(Continuous Delivery or Deployment)
지속적인 제공 or 배포
마지막 배포 단계에서 자동화하는 것
- CI 주기적으로 머지된 변경 사항들이 자동적으로 빌드, 테스트
- Prepare Release 릴리즈할 준비과정
- 개발자나 검증팀이 준비된 릴리즈가 정상적인지, 문제가 없는지 직접 검증하고 사용자에게 배포해도 되겠다는 결론이 나면 수동적으로 배포함(Continuous Delivery)
- 릴리즈가 준비되자마자 자동으로 사용자에게 배포하도록 만들어 둠(Contiuuous Deployment)
→ 최종 단계가 자동화되었는지 아닌지에 따라 Delivery, Deployment가 나뉜다.
CI/CD 파이프라인
Code → Build → Test → Release → Deploy