CI/CD ?
CI(Continuous Intergration)
란 개발자들이 빠른 주기로 작업한 내용을 통합 브랜치에 통합하고 빌드하는 개발 방식을 의미한다.
현재 진행하고 있는 프로젝트에서도 giflow 브랜치 전략을 이용해 하나의 기능을 feature라는 브랜치로 분리해 작업한후 develop 브랜치로 병합하는 작업을 거치고있다.
CI는 위 예시처럼 개인이 작업한 코드를 master 또는 develop 브랜치에 통합하는 과정에서 발생하는 이슈를 빠르게 발견하기 위해서 필요하다.
CD
는 Continuous Delivery 혹은 Continuous Depolyment 두 용어 모두의 축약어이다. Continuous Delivery는 공유 레포지토리까지 자동으로 Release하는 것을 의미하며, Continuous Depolyment은 프로덕션 레벨까지 자동으로 배포하는것을 의미한다.
쉽게 말해서 개발자가 애플리케이션에 변경 사항을 작성한 후 몇 분 이내에 애플리케이션을 자동으로 실행할 수 있는 것을 의미한다.
CI/CD가 생겨나게된 배경을 더 쉽게 이해하기 위해서 소프트웨어 개발 방법론 중 가장 널리 사용되는 폭포수 모델에 대해서 간략하게 알아보자.
폭포수 모델은 위 이미와 같이 요구사항 분석 -> 프로그램 설계 -> 구현/코딩 -> 테스트 -> 유지보수가 순차적으로 이루어지는 구조이다.
첫 번째로 요구사항 분석과 프로그램 설계가 상당한 시간에 걸쳐 완료된다. 해당 단계 이후에는 어떠한 추가나 수정도 허용되지 않는다. 이후 구현/코딩 단계에서 실질적인 개발이 진행되는데, 개발 기간은 평균 3개월~6개월정도 소요된다. 이 기간동안 테스트 팀은 아무런 일도 하지 않는 경우가 많았다.
개발 단계가 끝나면 몇 주의 시간동안 개발한 소스코드들을 통합하는 과정을 거친다. 이 과정에서 다양한 통합 이슈가 발생하고 수정되는데, 이 과정 또한 엄청난 시간이 소요된다. 모든 통합이 완료되면 테스트 단계가 진행되는데 테스트 단계 또한 마찬가지로 수 개월의 시간이 소요된다.
폭포수 모델은 위 설명처럼 글로만 보기에도 명확한 단점이 있음에도 불구하고 오랜 기간동안 사용되었다. 하지만 최근 소프트웨어 기술이 급속하게 발전하면서 폭포수 모델은 현재 시대의 요구를 더 이상 충족하지 못하게 되었다.
따라서 애자일 방법론이 등장하게 되었는데, 이는 기존 폭포수 모델의 싸이클을 빠른 속도로 여러번 도는 과정을 통해 소프트웨어 개발을 진행하는 방법을 의미한다.
이러한 과정을 거치기 위해서는 작업한 브랜치를 통합 브랜치에 지속적으로 통합하는 작업(CI)과 개발이 완료된 작업을 배포서버에 지속적으로 배포하는 작업(CD)이 필수적인 요소가 되었다.
하지만 개발자가 CI/CD 작업을 한 번의 사이클마다 직접 수동으로 실행하는 작업은 매우 지루하고 생산성이 떨어지는 일이었다. 이러한 단점을 보완하기 위해 Jenkins라는 툴을 이용해 CI/CD를 자동화 시켜주는 것이다.
Jenkins?
Jenkins는 위에서 설명한 그대로 CI와 CD를 제공하는 툴, 또는 CI/CD의 자동화를 지원하는 툴이다.
Jenkins 외에도 Travis ci와 같은 툴도 존재하지만 다양한 플러그인과 document를 지원하는 Jenkins를 더 많이 사용하고 있다.
다음 포스팅에서는 실제로 프로젝트에 Jenkins를 이용한 CI/CD 자동화 과정을 소개하려고 한다.
Reference
'etc' 카테고리의 다른 글
리눅스 서버에 ngrinder 설치하기 (1) | 2021.05.23 |
---|---|
[MySQL] 트랜잭션의 격리수준 (Lock) (1) | 2021.04.24 |
인터넷 주소창에 URL을 입력 후 화면에 출력되는 과정 (0) | 2021.02.21 |
동기/비동기 vs 블로킹/논블로킹 (0) | 2021.02.11 |
자주 사용되는 Http status code를 알아보자. (0) | 2021.02.03 |