들어가며
프로젝트를 진행하면서 CI/CD를 알고 이를 구현하는게 필요하고, 중요하다는 걸 느끼게 되었다.
일일히 프로젝트를 빌드하고 배포하는 과정이 매우 귀찮기도 하고, 협업을 하게 된다면 팀원들의 코드를 일일히 깃에 push해서 에러를 수정한 다음 배포하기는 번거롭겠다는 생각이 들었다.
따라서 오늘은 CI/CD에 대해 정리하고자 한다.
CI/CD란?
CI/CD는 지속적 통합(Continuous Intergration)과 지속적 배포(Continuous Deployment)의 약자로, 어플리케이션 개발 단계를 자동화하여 릴리즈 주기를 단축시킨다. CI/CD는 어플리케이션의 통합 및 테스트 단계에서부터 배포에 이르기까지 어플리케이션의 라이프사키을 전체에 걸쳐 지속적인 자동화와 모니터링을 제공하고, 이런 방식을 'CI/CD 파이프라인'이라고 부른다.
결국, 요약하자면 우리가 개발한 코드의 통합과 배포를 자동화 시키기 위한 솔루션이다.
그렇다면 CI와 CD는 정확히 무엇이고 왜, 그리고 어떻게 사용해야하는 걸까?
먼저 이 두가지를 각각 알아보자.
지속적 통합(CI, Continuous Intergration)
CI는 간단히 말하면 빌드와 테스트의 자동화 과정이다. CI를 잘 구현해두면 우리가 개발하고 있는 코드에 변경사항이 정기적으로 빌드 및 테스트되어 Git 레파지토리에 통합되기 때문에 팀원들과 함께 개발을 하면서 동시에 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.
CI가 나오기 전까지는 개발을 끝마친 코드를 빌드하고, 배포가 되어야만 코드에 오류가 없는지를 검증하면서 코드의 품질을 관리할 수 있었지만, CI를 적용하고 나서는 개발자는 자신이 맡은 부분의 기능을 개발하면서도 직접 빌드하거나 테스트할 필요 없이 자동으로 이가 수행되고, 문제를 빠르게 해결할 수 있게 되었다.
지속적 배포(CD, Continuous Deployment)
CD는 배포 자동화 과정이다. CI를 거치면서 빌드와 테스트를 마친 코드는 사용자가 사용할 수 있는 배포 환경에 뿌려지게 된다. 간단하게 CI의 연장선으로 생각하면 된다. 배포 이전에 빌드와 테스트는 사실상 필수 과정이기 때문에 CD가 되려면 CI가 먼저 이루어져야한다.
정리하자면 CI를 통해 개발 중에 지속적으로 빌드와 테스트를 지속적으로 진행하고, 이를 통과한 코드에 대하여 서버에 바로 코드를 배포해 반영한다.
장점. 사용하는 이유?
사실 위의 내용만 봐도 빌드, 테스트, 배포를 자동으로 해준다는 점은 굉장히 편하고 큰 장점으로 다가온다.
그 외에도 세부적인 장점은 다음과 같다.
- 탁월한 코드 품질 보장
CI/CD 파이프라인은 테스트 자동화를 제공하기 때문에 거의 실시간으로 코드 문제를 파악할 수 있다. 따라서 개발자는 버그가 있는 코드로 인해 시간이나 자원을 낭비하지 않아도 되고, 오로지 코딩에만 집중할 수 있다. - 릴리즈 속도를 단축하여 더 신속하게 제공
- 자동화로 비용 절감 - CI/CD 파이프라인
소프트웨어 개발 프로세스에 사람의 개입이 필요 없게 되면, 시간과 비용을 절감할 수 있다.
CI/CD는 핸드오프(개발 협업 중 어떤 사람이 다른 동료에게 다양한 업무 관련 정보 또는 책임을 이전하는 것), 소스 코드 관리, 버전제어 시스템 및 배포 메커니즘, 많은 테스트 기능을 자동화한다. - 오류 격리
CI/CD와 자동화된 테스트로 인해 개발자는 코드 오류를 쉽게 식별한 다음, 이를 격리함으로써 생산성을 크게 향상시킬 수 있다. - 간소화된 롤백(이전 버전 되돌리기)
개발자는 CI/CD 파이프라인을 통해 오류를 신속하게 해결하고, 훨씬 더 빠르게 복구할 수 있다.
코드를 쉽게 롤백할 수 있는 기능은 팀의 시간과 에너지, 리소스를 절약하고, 문제가 있는 코드를 보다 신속하게 수정할 수 있도록 해준다. - 지속적인 피드백
CI/CD는 비즈니스 이해관계자들을 비롯해 팉ㅁ의 모든 사람들이 무슨 일이 일어나고, 어디에서 일어나는지, 그리고 무엇이 잘못되었는지 확인할 수 있는 방법을 제공한다. - 최적의 투명성과 책임성
CI/CD 파이프라인은 지속적인 피드백을 통해 전체 소프트웨어 개발 프로세스를 비즈니스 측면에서 완전히 투명하게 처리한다. 제품 관리자는 프로젝트 상태를 한 눈에 확인하고 ,필요에 따라 책임 소재를 추적할 수 있다. - Metrics(지표) 데이터 모니터링
CI/CD 파이프라인은 다양한 지표에 대한 지속적인 피드백을 제공하여 팀이 먼저 코드 문제를 파악하고, 최종 사용자가 이를 인식하기 훨씬 전에 롤백할 수 있게 한다.
최근 Log4j 취약점 공격이 발생해서 세계적으로 문제가 됐던 적이 있었는데, CI/CD 파이프라인이 없는 기업들은 '어느 지점'이 공격 당했는 지 파악하기도 쉽지 않았던 반면에, 미리 구축했던 기업들의 경우 문제를 신속하게 파악 후, 이러한 취약점에 빠르게 대응이 가능했다고 한다. 이처럼 CI/CD를 통해 정상적인 개발 사이클을 항시 유지할 수 있다는 장점이 있다.
CI/CD를 구축하기 위한 도구들
CI/CD를 구축할 수 있는 도구들은 정말 많다. 그 중 대표적인 툴로는 Jenkins와 Github Actions, Travis를 꼽을 수 있다.
Jenkins
- 무료 및 오픈소스이고, Github와 연동이 가능하다.
- 다양한 플러그인과 IDE를 지원하므로, 확장성이 좋다.
- 많은 사용자가 존재하기 때문에 관련 문서 또한 다양하다.
- 다만, 설정과 운영이 어렵고 복잡하기 때문에 규모가 작은 프로젝트의 경우 리소스 낭비가 발생할 수 있다.
Github Actions
- 복잡한 과정 없이 바로 Github에서 사용할 수 있다.
- 빌드 과정을 한눈에 보기 쉽다.
- Github의 모든 이벤트에 대한 작업을 제공하고, 다양한 언어와 프레임워크를 지원한다.
- Jenkins보다 빠르다.
- 다만, 관련 문서가 비교적 부족하고, 워크플로우에서 단일 작업만 다시 실행할 수 없다.
Travis
- Github와 연동이 가능하다.
- 빌드 과정을 한 눈에 이해하기 쉽다.
- 초기 설정이 Jenkins에 비해 간편하다.
- 별도의 서버가 필요 없다.
- 다만, 로컬에서 CI 환경과 동일한 빌드 환경을 제공하지 않고, 플러그인이 다소 부족하며, 설정파일을 수정하고 테스트하려면 git push를 반복해야한다.
마치며
Docker 서버와 Jenkins를 이용한 CI/CD를 구축하려고 시도했다가 어려움을 겪었었다. Github Actions의 자료가 적어서 선택한 방식이었는데, 최근 대세로 떠오르는 Github Actions를 적용해보는 것도 나쁘지 않을 것 같다.
출처 및 참고
CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정
'Study > CS' 카테고리의 다른 글
[CS] OAuth2.0 (0) | 2022.07.18 |
---|---|
[CS] 브라우저의 동작 원리 (1) | 2022.06.01 |
[CS] 동기 & 비동기 vs 블로킹 & 논블로킹 (2) | 2022.05.30 |
[CS] API란? (0) | 2022.04.10 |
[CS] Rest API: URL 디자인 가이드 (0) | 2022.02.11 |