/ FRAGMENTARY-KNOWLEDGE

What is Continuous Integration?

Introduction

CI는 Continuous Integration의 약자로 우리나라 말로 굳이 번역하자면 “지속적인 통합” 정도가 되겠네요.

여기서는 간단하게 Continuous Integration이 어떤 개념인지 살펴보도록 하겠습니다.


CI(Continuous Integration)란 무엇인가?

소프트웨에 개발은 다음과 같은 라이프 사이클을 가지고 있습니다.

계획 => 요구사항 분석 => 설계 => 코드화 => Build => Testing => Release => Deploy

waterfall 방식으로 한 단계가 끝나면 다음 단계로 이동하기도 하지만 일반적으로는 프로젝트가 진행되는 동안 이 안의 단계가 반복적으로 실행되게 됩니다.

하지만 우리는 코드를 작성한 후 통합 Build작업과 통합 Test작업을 하지 않고 넘어가는 경우가 많습니다. 가장 큰 이유는 Build작업과 Test작업에 시간이 오래 걸리고 만약 중간에 문제가 발생하면 이걸 수정하는게 쉽지 않고 결국 또 시간을 잡아먹게 되기 때문이죠. 심한경우 프로젝트의 중반 이후에 개별적으로 작성한 코드를 통합 build하고 Test하는 경우도 있습니다. 이런 경우 소프트웨어 통합작업은 결국 산으로 올라가게 됩니다.

Continuous Integration은 이런 문제점을 해결하기 위해 코드를 최대한 자주 통합하여 개발하는 소프트웨에 개발 방법론중의 하나라고 볼 수 있습니다. 이런 CI를 도와주는 여러가지 툴들이 존재하는데 이를 이용하면 통합 시 필요한 여러가지 자잘한(?) 문제들을 자동화시켜서 최대한 빨리 오류를 발견하고 문제를 해결해 나갈 수 있습니다. 결과적으로는 상당히 품질이 좋은 소프트웨어를 개발할 수 있게 되는 거지요.

그림으로 표현하면 아래와 같이 단순하게 표현할 수 있겠네요.

CI 동작방식-Simple

( 이미지 출처 : https://blog.snap-ci.com/categories/continuous-integration )

사실 더 복잡하지만 위의 그림처럼 단순하게 바라보시면 될 듯 합니다. CI Server가 통합된 코드를 자동으로 Build-Test-Release-Deploy까지 진행하고 그 결과를 개발자나 다른 관련있는 사람에게 알려주게 됩니다.

CI Server가 일련의 과정을 자동으로 처리해 줌으로써 개발자는 Business Logic 작성에 더 집중할 수 있고 오류에 대한 내용도 빨리 수정을 할 수 있습니다. 일반적으로 Git과 같은 VCS(Version Control System)과 연계해서 사용하게 됩니다.

현재 많이 사용되는 CI 제품들은 다음과 같습니다.

  • Jenkins : Java로 작성된 open source CI tool입니다. open source CI 진영에서는 압도적 사용자를 보유하고 있습니다. Java 개발자들에겐 진리입니다. 설치형이기 때문에 설정이 조금 복잡합니다.

  • Travis CI: Github와의 편한 연동 및 public repository에 대해서는 무료로 사용할 수 있다는 장점이 있습니다. 설정이 Jenkins만큼 복잡하지 않고 Travis Server를 이용하여 동작시키는 것이기 때문에 편합니다. private repository에 대해서는 일정량의 비용을 지불해야 합니다.

  • TEAMCITY, BAMBOO, GITLAB CI, CIRCLECI, CODESHIP 등등이 있습니다. 이놈들은 저도 써보질 않아서 할말이 없네요.

간단하게 CI의 개념에 대해서만 살펴보았습니다. Travis CI와 같은 것은 사용하기 그리 어렵지 않으니 한번 사용해 보시면 느낌이 확 오실겁니다.

End.