CI(Continuous Integration)

CI는 지속적인 통합(Continuous Integration)을 의미합니다.

많은 사람들이 갖고 있는 오해

일반적으로 CI가 뭐냐고 물어보면, 젠킨스나 깃허브 액션 등을 통해 테스트를 자동화한다고 합니다. 이 이야기는 반만 맞거나 어쩌면 반도 맞지 않는 이야기일 수 있습니다. 왜냐하면 위 정의에 따르면 지속적으로 통합한다는 의미가 전혀 들어 있지 않기 때문이죠!

그렇다면, “지속적이다.”라는 기준은 뭐고 “통합”의 기준은 뭘까요?

지속적인(Continuous)

지속적이라는 표현은 굉장히 추상적입니다. 누군가는 한 달에 1번이면 지속적이다라고 할 수 있고, 하루에 1번이면 지속적이다라고 할 수 있습니다. 일반적으로 CI에서 지속적으로 무언가를 하려면 적어도 하루에 1번 이상은 수행되어야 한다고 이야기합니다.

통합(Integration)

통합은 A와 B를 합치는 행위입니다. CI에서는 무엇을 합칠까요?

주로 A 브랜치에서 B 브랜치로 Pull Request를 날린 뒤, 코드 리뷰 과정을 거쳐서 B 브랜치로 합치는 과정을 의미합니다. 그렇다면, feature 브랜치에서 develop 브랜치로 합치고 master 브랜치로 오랫동안 합치지 않더라도 통합으로 볼 수 있을까요?

사전적으로는 통합일 수 있으나, master 브랜치로 합치지 않는다면 이는 통합이 아닌 격리라고 부릅니다. 통합은 master 브랜치로 합쳐져야 합니다.

CI의 엄밀한 정의

그렇다면, CI는 뭐라고 정의해야 할까요?

지속적인과 통합이라는 표현이 명확하게 들어가려면 애매할 수 있는데, 제가 선호하는 정의는 다음과 같습니다.

정기적으로 (최소한 매일) 모든 작업을 Trunk (master 브랜치)에 통합합니다.

Jez Humble이 이야기한 것으로, 해당 링크에서 자세한 내용을 참조하실 수 있습니다.