이번에 프로젝트를 진행하면서 CI/CD 에 대해 알게 되었는데 자동화 구축은 매우 유용하고 나중엔 필수라고 느껴지게 되었다.
하지만 정확하게 이해하지 못해서 이번에 정리하면서 알아보려고 한다.
CI(Continuous integeration) 지속적 통합 과 CD(Continuous delivery) 지속적 제공, 줄여서 CI/CD는 애플리케이션 개발팀이 더 자주, 안정적으로 코드 변경을 제공하기 위해 사용하는 문화와 운영 원칙, 일련의 작업방식으로 구성된다.
CI란?
CI는 간단히 요약하면 빌드/테스트 자동화 과정
이다. CI는 개발자를 위한 자동화 프로세스인 지속적인 통합(CI)
을 의미한다.
CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션과 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.
지속적 통합의 실행은 소스/버전 관리 시스템에 대한 변경 사항을 정기적으로 커밋하여 모든 사람들에게 동일 작업 기반을 제공하는 것으로 시작한다. 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 생기는 부분이 없도록 보장한다. CI는 그 자체로 유익하지만 CI/CD 파이프라인 구현하기 위한 첫 번째 단계이기도 하다.
CD란?
CD는 배포 자동화 과정이다. CD는 지속적인 서비스 제공
또는 지속적인 배포
를 의미하며 이 두 용어는 상호 교환적으로 사용된다.
두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
지속적 배포
는 빌드, 테스트 및 배포 단계를 자동화하는 DevOps방식을 논리적 극한까지 끌어 올린다. 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포된다. 지속적 배포를 채택하면 품질 저하 없이 최대한 빨리 사용자에게 새로운 기능을 제공할 수 있다.
또한 성숙하고 입증된 지속적 통합 및 지속적인 전달 단계를 기반으로 한다. 간단한 코드 변경이 정기적으로 마스터에 커밋되고, 자동화된 빌드 및 테스트 프로세스를 거치며 다양한 사전 프로덕션 환경으로 승격되며, 문제가 발견되지 않으면 최종적으로 배포된다. 강력하고 신뢰할 수 있는 자동화 배포 파이프라인을 구축하면 하루에도 여러 번 이루어지는 릴리스가 특별하지 않게 된다.
CI/CD 종류
- Jenkins
- 무료이고 Reference 및 사용자층과 정보가 많음
- Windows, macOS 또는 openSUSE, Red Hat, Ubuntu와 같은 다양한 리눅스 OS에 사용가능
- 설치 및 사용이 간단하다.
- 발전하는 플러그인 생태계 (플러그인은 젠킨스내에서 여러 유용한 기능을 제공하고 생산성과 안정성을 높이게끔 해주는 역할을 함)
- CircleCI
- Linux, macOS, Android, and Windows 운영체제에서 사용 가능
- 일정 한도 내에서 무료로 사용 가능
- 한주에 2500 크레딧 부여하고 한번에 하나의 job 수행
- 무료 제공되는 크레딧으로 한달에 1000분 정도의 빌드시간 사용 가능
- 유료로 사용할 경우 한달에 15달러
- Git에 Push를 하면 자동으로 테스트를 진행하여 검사 결과를 알려 주어 문제점에 대해 바로 알림을 보내줌. 이를 통해 협업시 발생할 수 있는 파일충돌이나 에러를 잡을 수 있음. 그리고 문제가 없다면 서버에 배포까지 자동으로 이루어짐
- TravisCI
- 간결하고 직관적인 웹 인터페이스를 제공하는 인터넷 기반의 CI 서비스
- 무료 버전과 기업용 버전(유료)이 있음
- 오픈 소스 프로젝트 일 경우(public repo) 무료로 사용 가능
- private repo일 경우 한달에 69$
- Github와 연동하여 Commit/Push를 기반으로 CI가 자동 동작하며, Push 외에도 Pull Request에도 반응하도록 설계되어 있음
CI/CD는 데브옵스팀을 위한 권장 사항이자 애자일 방법론의 권장 사항이기도 하다. CI/CD는 통합과 제공을 자동화함으로써 소프트웨어 개발팀이 코드 품질과 소프트웨어 보안을 보장하는 동시에 비즈니스 요구사항을 충족하는 데 집중할 수 있게 해준다.
'CS' 카테고리의 다른 글
CPU 작동 원리 (0) | 2023.03.02 |
---|---|
컴퓨터의 구성 (0) | 2023.03.02 |
[네트워크] TCP와 UDP의 특징과 차이 (0) | 2022.12.29 |
[네트워크] OSI 7 Layer / 7계층 (0) | 2022.12.16 |
[운영체제] 가상 메모리 (0) | 2022.12.03 |