시장과 고객의 요구에 빠르게 반응해서 제품을 출시하고 업데이트할지에 대한 고민으로 CI/CD 개발 프로세스를 채택한다.
어플리케이션 개발 단계부터 배포 때까지 모든 단계들을 자동화를 통해서 더 효율적이고 빠르게 사용자에게 빈번히 배포할 수 있도록 만드는 것을 말한다.
지속적인 통합은 버그 수정 또는 새로 만든 기능들이 Main Repository에 주기적으로 빌드 되고 테스트가 되어서 merge 되는 것을 말한다.
이런 장점은 코드의 퀄리티 향상으로 이어진다
CI를 잘 운용하기 위해서 작성한 코드는 단위가 작아 유닛 테스트를 꼭 포함한다. 이는 안정성이 있는 제품을 개발하는 것을 의미한다.
팀원 간 서로 다른 코드를 작성하고 있다가 오랜 기간 머지 하지 않고 변경하고서 나중에 merge를 하게 되면 서로 다른 코드를 어떻게 통합해서 적용할지 많은 고생을 하게 된다.
새로운 기능을 개발하기 위해서 코드를 작성한 시간보다 merge conflict를 해결하기 위해서 더 많은 시간을 써야 할지 모른다.
그래서 버그나 새로운 기능을 개발할 때는 어떻게 작은 단위로 나눌지에 대해 고민을 해봐야 한다. 최대한 작은 단위로 나누어서 개발하고 통합해나가는 것이 중요하다.
코드 리뷰를 통해서 코드가 적절한지 확인이 되고 merge가 되면 자동으로 팀에서 만든 CI Script를 통해 추가된 코드와 함께 Repository가 build 된다. 이 과정이 잘 되었다면 팀에서 작성한 여러 가지 테스트들도 Script를 통해서 실행이 된다.
지속적인 제공은 CI를 통해서 주기적으로 머지 된 코드 변경사항들이 자동으로 빌드가 된다. 그리고 테스트를 정상적으로 마쳤다면 배포하는 단계에서 Release 준비 과정을 거친다.
Prepare Release가 문제가 없어서 최종적으로 배포하기로 결정이 된다면 수동적으로 배포하는 단계를 Continuous Delivery
라고 한다.
지속적인 배포는 Prepare Release가 되자마자 자동으로 사용자에게 배포한다. 모든 과정을 자동화하는 것을 Continuous Deployment
라고 한다.
Delivery와 비슷하지만 최종 단계가 자동화가 되었는지에 따라 다르다.
CI/CD는?