24.03.28 작성
개발자가 코드를 작성할 때마다 테스트와 빌드를 한다면 많은 시간이 소요된다.
특히 혼자 개발하는 것이 아닌 여러 명과 함께 개발하면 시간은 배로 소요할 수밖에 없다.
이때 생겨난 개념이 지속적인 통합 Continuous Integration(CI), Continuous Delivery 지속적인 서비스 및 지속적인 배포 Continuous Deployment(CD)이다.
CI 란?
Continuous Integration 즉 지속적인 통합이라는 뜻이다.
기본적으로 여러 명이 개발한다고 생각할 때 과정을 살펴보자.
- 각자 Local에서 코드 작성 및 테스트
- 각자 작성한 코드를 Remote 저장소에 Push
- Merge 및 충돌 해결
- Remote 저장소 기준으로 테스트
대략적으로 이런 순서를 따를 것이다. 다만 이때 코드 수정이 빈번할 수록, 사람이 많아질 수록 더욱 더 많은 시간이 소요된다. 또한 수작업으로 진행하면 실수의 가능성도 배제할 수 없다.
이 때 필요한 개념이 바로 CI이다. CI를 쉽게 설명하면 빌드/테스트 자동화이다.
- 각자 Local에서 코드 작성 및 테스트
- 각자 작성한 코드를 Remote 저장소에 Push
여기까지는 그대로 진행한다.
다만 CI가 성공적으로 구현되어 있다면, Remote 저장소에 변경 이벤트가 감지되면 자동으로 해당 변경 사항을 가져와 빌드하고 테스트한다.
즉 3. Merge 및 충돌 해결, 4. Remote 저장소 기준으로 테스트를 개발자가 직접 할 필요가 없어진다.
CD 란?
Continuous Delivery 지속적인 서비스, Continuous Deployment 지속적인 통합이라는 두 가지 뜻이다.
마찬가지로 개발 과정을 생각해 보자.
정상적으로 작동하는 코드를 사용하기 위해서는 배포를 해야 한다. 이때 코드가 변경 될 때 마다 배포를 수동으로 다시 해줘야하는 문제가 생긴다.
이 때 필요한 개념이 바로 CD이다. CD를 쉽게 설명하면 배포 자동화이다.
위에서 빌드/테스트를 자동화했다면 그 코드를 다시 배포하는 과정 또한 자동화를 하면 매우 편리해진다.
만약 수동으로 배포한다고 생각해 보자.
- 작성된 코드를 jar 파일로 생성
- 배포 서버에 접속하여 기존 배포 중단
- 새로운 파일 다운
- 서버 실행
위와 같은 과정을 수작업해야 한다. 마찬가지로 수작업으로 진행하니 중간 실수를 배제할 수 없다. 위에서 설명했듯 자동화한다면 이러한 과정의 시간을 아낄 수 있다.
따라서 CI/CD의 개념이 묶어서 설명되는 이유는 개발자가 코드를 작성 후 Remote 저장소에 Push를 한다면 그 후 빌드 및 테스트, 배포를 자동으로 관리해 주기 때문에 시간 단축 및 편리성 증가 등 다양한 장점이 생기기 때문이다.