🚀 CI/CD
개발자가 코드를 수정하고 빌드하고 테스트하고 배포까지 한다면 상당히 많은 시간이 소요된다.
하지만 git
에 코드를 올리는 것만으로 누군가가 빌드와 테스트, 배포까지 해준다면
일련의 과정에 소요되는 시간을 단축시키고 오롯이 개발에만 더 많은 시간을 투자할 수 있게될 것이다.
이때 등장하는 개념이 CI
/CD
이다.
다음의 두 이미지를 통해 기존의 전통적인 개발 환경과 CI/CD를 도입한 환경을 한눈에 비교할 수 있다.
🚀 CI
CI는 Continuous Integration 즉, 지속적인 통합이라는 의미이다.
지속적인 통합이란, 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레포지토리에 통합되는 것을 의미한다.
📌 CI가 필요한 환경
- 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경
지속적으로 서비스해야 하는 어플리케이션이나 현재 개발 중인 어플리케이션은 기능을 추가할 때마다 commit을 날려 레포지토리에 버전 업데이트를 한다.
다수의 개발자가 한 팀으로 작업할 경우 공유 레포지토리에는 수많은 commit이 쌓이게 된다.
그럴 때마다 기능별로 빌드 → 테스트 → 병합(Merge) 과정을 하려면 상당히 번거롭다.
이런 상황에서 자동화된 빌드 & 테스트는 원천 소스코드의 충돌 등을 방어하는 장점을 제공할 수 있다. - MSA(Micro Service Architecture) 환경
MSA는 작은 기능별로 서비스를 작게 쪼개어 개발하는 형태를 의미한다.
MSA 환경에서는 대부분 Agile(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발 방법론)이 적용되기 때문에 기능 추가가 매우 빈번하게 발생하며 작은 micro service 간의 긴밀한 동작 테스트 또한 중요해진다.
그러한 상황에서 CI의 적용은 기능 충돌 방지 등의 장점을 제공할 수 있다.
📌 CI의 단계
- 개발자가 구현한 코드를 기존 코드와 병합한다.
- 병합된 코드가 올바르게 동작하고 빌드되는지 검증한다.
- 테스트 결과 문제가 있다면 수정하고 다시 단계 1로 돌아간다. 문제가 없다면 배포를 진행한다.
🚀 CD
CD는 Continuous Delivery 혹은 Continuous Deployment 용어 모두의 축약어이다.
해석하자면, 지속적인 서비스 제공 혹은 지속적인 배포를 의미한다.
Continuous Delivery는 공유 레포지토리로 자동으로 Release
하는 것,
Continuous Deployment는 Production 레벨까지 자동으로 Deploy
하는 것을 의미한다.
정리하면, CI
가 새로운 소스 코드의 빌드 -> 테스트 -> 병합까지를 의미한다면 CD
는 개발자의 변경 사항이 레포지토리를 넘어, 고객의 Production 환경까지 릴리즈되는 것을 의미한다.
MSA와 같은 환경에서 Agile 방법론이 적용될 경우 서비스의 사용자는 최대한 빠른 시간 내에 최신 버전의 Production을 제공받을 필요가 있다.
이때, 소프트웨어 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 Support
하는 것이 CD라고 할 수 있다.
🚀 DevOps의 역할
DevOps 엔지니어는 CI/CD를 위한 파이프라인을 구성하고, 이를 자동화(Automation) 단계까지 끌어 올린다.
또한 중간중간 모니터링 지표를 구성하여, 개발자들의 개발 방향을 가이드한다.
이를 통해 Production을 이용하는 고객들에게 안정적이고 신뢰성 높은 서비스 프로덕션을 제공한다.
🚀 CI/CD 도구
매우 다양한 CI/CD 도구가 존재한다. 이중 가장 많이 사용되는 도구 몇가지만 알아보자
🚀 Jenkins
- 자바 기반 오픈소스 CI/CD 툴
- 무료(단, 별도의 서버 필요)
- 다양한 플러그인을 설치할 수 있어 확장에 용이하다.
- 많은 사용자와 많은 레퍼런스
- 규모가 작은 프로젝트의 경우 설정하는데 리소스 낭비가 발생할 수 있다.
- 지라와 연동이 불편하거나 완벽하지 않을 수 있다.
🚀 Travis CI
- 깃허브와 연동된다.
- 빌드 과정을 한 눈에 이해하기 쉽다.
- 초기 설정이 젠킨스에 비해 간편하다.(yaml 파일을 통한 설정)
- 별도의 서버 필요 없다. travis에서 알아서 VM으로 호스팅 해준다.
- Jenkins에 비해 플러그인이 다양하지 않다.
- 로컬에서 CI 환경과 동일한 빌드환경을 제공하지 않는다.
- .travis.yml 파일을 수정하고 테스트하려면 git push를 반복해야한다.
🚀 Github Actions
- 복잡한 과정없이 바로 깃허브에서 사용할 수 있다.
- 빌드 과정을 눈으로 확인하기 쉽다.
- 깃허브의 모든 이벤트에 대한 작업을 제공하고 다양한 언어와 프레임워크를 지원한다.
- 젠킨스보다 빠르다.
- public은 무료, private 저장소의 경우 매월 3000분 무료
- 문서가 비교적 부족하다.
- UI에서 개별 워크플로우 실행을 삭제할 수 없다.
- 워크플로우에서 단일 작업만 다시 실행할 수 없다.
🚀 Bamboo
- JIRA 의 대시보드나 confluence의 Page에 bamboo build chart 를 붙일 수 있다.
- JIRA 의 특정 이슈와 관련된 build 내역을 조회하는 등 atlassian 제품을 기존에 사용하고 있다면 각 제품군을 통합해서 더욱 유기적으로 사용할 수 있음.
- 유료 서비스
- Windows, Mac OS X, Linux와 같은 플랫폼에서 사용가능
이 외에도 매우 다양한 CI/CD 도구가 존재한다.
🔗 참고
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!