- [C672] 지속적 통합 과정에서 반드시 자동화가 이뤄져야 하는 부분은 어떤 부분인가요?
CI에서 반드시 자동화가 이뤄줘야 할 부분은 build와 test이다.
지속적 통합을 요약하면 한 번에 모아 통합하기는 어려우니 작은 단위로 코드를 자동으로 수시로 테스트하고, 통합하자는 것이라고 생각한다. 즉, CI에서는 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 것과 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 것이 제일 중요하다고 생각한다. 유닛 테스트 후 빌드하는 것은 CI의 Build 과정이고 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 것은 CI의 Test 과정이다. Build와 Test는 수시로 해야 하며 수시로 하지않고 한번에 통합하면 통합 지옥(Integration Hell)에 빠질 수도 있으며 통합 과정이 몇시간, 며칠이 걸릴수도 있다. 그래서 수시로 Build와 Test는 해줘야하기때문에 자동화가 필수라고 생각한다. 또한 클래스와 기능에서부터 전체 애플리케이션을 구성하는 서로 다른 모듈에 이르기까지 모든 것에 대한 자동화된 테스트를 수행한다면 기존 코드와 신규 코드 간의 충돌이 발견되면 CI를 통해 이러한 버그를 조기에 빠르게 자주 수정할 수 있다.
- [C671] 지속적 통합을 도입함으로써 기존 개발 방식의 어떠한 문제를 해결해주었을까요?
기존 개발 방식은 개발과 운영이 격리된 상태에서 작업이 진행되고 작업이 완료된 후에 마스터 브랜치에 병합했다. 이로 인해 병합코드가 어렵고 시간 소모적으로 변하게 되었고 수정 없이 오랜 시간 동안 버그가 축척되는 결과가 나타나게 되었다고 한다.
또한 반복적인 작업을 빠르게 처리하기 위해서 숙련된 인력 필요하며 수많은 변경사항의 번거로움이 발생하고 개발 속도가 느리고 유연성도 떨어지며 개발 요구사항의 변경이 자유롭지 못 했다.
지속적 통합을 도입함으로써 개발자 생산성 향상되고 개발자의 수동 작업에 대한 부담을 덜고 버그 수를 줄이는 데 도움이 되며 빠른 업데이트 또한 제공되기 시작했다. 자동화를 통해 수시로 통합하여 문제도 조기에 찾아 발견하고 조치할 수 있으며 빌드와 테스트를 독립적으로 구성하여 개발자가 코드를 빌드하거나 수정했을 때 개인 환경에서만 실행되는 문제를 조기에 수정할 수 있었다.