CI/CD 란?
CI : Continuous Integration
지속적 통합
소프트웨어를 개발하면서 새로운 코드를 작성하거나 코드를 변경하고 빌드 및 테스트하여 공유 리포지토리에 통합되는 것을 말합니다.
CI개발을 하려면 개발자들은 코드를 추가, 변경하면 주기적인 일정마다 공유 리포지토리에 병합시켜줘야 합니다.
만약 주기적으로 리포지토리에 공유하지 않고 오랜 시간이 지난 후 병합을 하면 아주 큰 컨플릭트(충돌)가 일어나겠죠?
작은 컨플릭트라면 그나마 다행이지만, 오랫동안 개인만의 개발을 한다면 나중에 병합을 할 때 큰 컨플릭트가 날 확률이 높습니다. 그래서 요즘 IT 기업들은 개인주의 성향의 개발자보다 커뮤니케이션을 중요시하는 개발자를 선호한답니다.
CI는 빌드, 테스트, 병합이 모두 자동화되어야 합니다.
프로그래머가 리포지토리에 코드를 공유를 한다면 빌드 후 테스트가 이루어지고 테스트가 통과까지 자동으로 이루어져야 합니다.
테스트 후 그 결과를 출력함으로써 프로그래머가 자신이 병합하고 공유한 코드에 문제를 파악하고, 빠르게 수정이 가능합니다. 그러면 높은 완성도의 소프트웨어 개발이 가능하겠죠?
프로그래머가 버그를 스스로 찾고 문제를 해결하는 것은 꽤나 번거롭고 시간이 드는 일입니다. 이러한 사소한 일을 자동으로 해결함으로써 개발자는 퀄리티 높은 소프트웨어를 개발하는 것에 집중할 수 있습니다.
CD : Continuous Deployment 또는 Continuous Delivery
지속적 배포 / 지속적 제공
CI를 통해 테스트까지 모두 끝나고 배포까지의 단계를 말합니다.
Deployment와 Delivery는 차이점이 있습니다.
- Deployment : 배포 단계를 자동화
CI를 마치고 릴리즈가 가능하다면 배포까지 자동으로 이루어질 때 Continuous Deployment라는 용어를 사용합니다. - Delivery : 배포 단계를 수동화
CI를 마치고 릴리즈가 가능하다면 배포 단계에서 사람의 검증을 통해 수동적으로 배포가 이루어지면 Continuous Delivery라는 용어를 사용합니다.
Deployment와 Delivery는 뭐가 좋고 나쁘다는 기준이 없습니다. 어떤 프로젝트를 개발하는지, 회사 또는 팀에서 어떤 방식을 선호하고 채택하는지에 따라 방식을 선택할 수 있습니다.
만약 테스트용 서버에 배포를 한다면 Continuous Deployment를 사용할 수 있습니다. 유닛 테스트 이외 시나리오 테스트, 통합 테스트에서 특정 오류나 수정사항이 생긴다면 프로그래머가 빠르게 수정하고 테스트 서버로 배포를 할 때 이러한 자동화된 방법을 사용하여 업무 속도를 증가시킬 수 있습니다.
하지만 중요한 서비스, 시스템을 고객들에게 배포를 한다면 철저한 검증을 통해서 배포되어야 할 것입니다. 이럴 땐 Continuous Delivery가 적합할 수 있습니다.
CI/CD를 위한 툴
각 툴의 장단점과 기능에 대해 자세히 설명드릴 순 없어서 어떤 것이 있는지만 알려드리겠습니다.
직접 사용한 툴이 젠킨스밖에 없어서 그렇습니다.;;
젠킨스 (Jenkins)
자바 기반 오픈소스 CI/CD 툴입니다.
위키백과에서 정보를 조금 가져오자면, 젠킨스는 허드슨 프로젝트로 개발되어 2004년 여름 썬 마이크로시스템즈에서 시작된 CI 툴(Tool)이라고 합니다.
젠킨스는 설정도 자동으로 해주어 편리하고 다양한 플러그인을 설치할 수 있어 확장에 용이합니다.
CircleCI
사용해보지 않았지만 굉장히 완성도가 높은 엄청난 CI/CD 도구 중 하나입니다.
Cloud와 Server 버전으로 제공하고 있고, Window와 Linux 그리고 macOS에서도 구축할 수 있습니다.
TeamCity
JetBrains에서 개발한 CI/CD툴입니다. 자바 기반으로 개발되어 있어 자바가 설치되어 있어야 합니다.
클라우드와 직접 호스팅을 위한 서버로 사용이 가능한데 서버는 예상 밖으로 무료입니다.
물론 무제한 빌드와 더 많은 기능을 사용하려면 유료로 사용해야 하지만, 상업용으로도 무료이기 때문에 일반 기업에서도 사용할 수 있을 정도의 규모입니다.
https://www.jetbrains.com/ko-kr/teamcity/
Buildkite
마무리
CI/CD 툴은 굉장히 많지만 제가 알고 있거나 들어본 일부만 소개했습니다.
협업과 수준높은 개발을 원한다면 CI/CD는 중요한 개념입니다.
만약 잘못된 내용이 있다면 덧글로 제보 부탁드리고 기회가 된다면 위의 툴을 사용하는 포스팅을 하고 싶네요.
'개발 아카이브 > 개발 관련 지식' 카테고리의 다른 글
배워보자 정규표현식! (Regular Expression) (0) | 2022.09.18 |
---|---|
gitignore 파일을 쉽게 만들어주는 사이트 gitignore.io (0) | 2021.09.01 |
MarkDown을 편하게 작성하기 위한 도구들 (0) | 2021.04.29 |
[링크] MarkDown 사용법 (0) | 2021.03.23 |
[이클립스] 웹 개발을 위한 이클립스 인코딩 세팅 (2) | 2021.03.18 |