-
[DevOps] CI/CD란 무엇인가?DevOps 2024. 6. 18. 23:44
CI (Continuous Integration)
- 지속적인 통합을 의미한다.
- 새로운 코드 및 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레퍼지토리에 통합하는 것을 의미한다.
- 다수의 개발자가 형상 관리 툴을 공유하여 사용하는 환경이어야 한다.
- 기능별로 빌드, 테스트, 머지를 하면 매우 번거롭다.
- 이런 상황에서, 자동화된 빌드, 테스트는 원천 소스코드의 충돌 등을 방어하는 이점을 제공해 줄 수 있다.
CD (Continuous Delivery/Deployment)
- 지속적인 서비스 제공 또는 지속적인 배포를 의미한다.
- 개발자의 변경사항이 레포지토리를 넘어, 고객의 프로덕션 환경까지 릴리즈 되는 것을 의미한다.
Continuous Delivery와 Continuous Deployment의 차이
- 지속적 제공에는 자동 프로덕션 배포 기능이 없는 반면,
- 지속적 배포는 업데이트를 프로덕션 환경에 자동으로 릴리스 한다.
- Continuous Delivery는 공유 레퍼지토리로 자동으로 Release 하는 것이다.
- Continuous Deployment는 Production 레벨까지 자동으로 deploy 하는 것을 의미한다.
CI/CD
- 지속적 통합 및 지속적 제공, 배포를 의미하며,
- 소프트웨어 개발 라이프사이클을 간소화하고 가속화는 것을 목표로 한다.
- 이렇게 연결된 두 사례를 일반적으로 "CI/CD 파이프라인"이라 부른다.
CI/CD가 중요한 이유
- CI/CD는 조직이 버그 및 코드 오류를 예방하는 동시에 지속적인 소프트웨어 개발 및 업데이트 주기를 유지하는데 도움이 된다.
- 애플리케이션이 커짐에 따라 CI/CD의 기능을 활용하면 복잡성을 줄이고 효율성을 높이며 워크플로우를 간소화할 수 있다.
- 기존에 새 코드를 커밋에서 프로덕션으로 가져오는 데 필요했던 수동 개입을 CI/CD가 자동화하므로 다운 타임이 최소하 되고 코드 릴리스 주기가 단축된다.
- 코드의 업데이트와 변경 사항을 더 빠르게 통합할 수 있으므로 사용자 피드백을 더 자주 효과적으로 통합할 수 있고, 그 결과 사용작에게 긍정적인 결과를 제공할 수 있으며 전체적인 고객 만족도가 향상된다.
지속적 통합?, 지속적 제공?, 지속적 배포?
- CI는 언제나 지속적 통합을 의미하며, 지속적 통합은 코드 변경 사항을 다시 공유 분기 또는 "트렁크"로 더 빈번하게 병합하는 것을 용이하게 하는 개발자용 자동화 프로세스이다.
- 업데이트가 이루어지면 병합된 코드 변경 사항의 신뢰성을 보장하기 위해 자동화된 테스트 단계가 트리거 된다.
- 개발자들이 동일한 애플리케이션의 각기 다른 기능을 동시에 작업하기를 원하는데, 조직에서 병합의 날을 정해 모든 분기 소스 코드를 병합하는 경우, 결과적으로 반복적인 수작업에 많은 시간을 소모하게 된다.
- 이는 충돌 가능성이 있다. 더 나아가 팀이 하나의 클라우드 기반 통합 개발 환경에 동의하지 않고 각자의 로컬 IDE를 커스터 마이징 하는 경우 문제는 더 심화될 수 있다.
- 성공적인 CI란 변경 사항들이 병합된 후 애플리케이션을 손상시키지 않도록 자동으로 빌드하고 테스트를 실행하여 해당 변경 사항을 검증하는 것이다.
- 지속적 제공은 CI에서 빌드와 단위 및 통합 테스트를 자동화한 다음 검증된 코드를 리포지토리로 릴리스하는 것을 자동화한다.
- 지속적 제공 프로세스를 마련하려면 CI가 개발 파이프라인에 이미 구축되어 있어야 한다.
- 코드 변경 사항의 병합부터 프로덕션 레디 빌드의 제공에 이르기까지 모든 단계에 테스트 자동화와 코드 릴리스 자동화가 수반된다.
- 지속적 제공의 목표는 언제다 프로덕션 환경의 배포할 준비가 되어 있는 코드베이스를 갖추고 새로운 코드를 배포하는 데 필요한 노력을 최소화하는 것이다.
- CI/CD의 파이프라인의 최종 단계는 지속적 배포이다.
- 지속적 배폰느 지속적 제공의 확장으로, 개발자의 변경 사항을 레포지토리에서 프로덕션으로 릴리스하는 것을 자동화여 고객이 사용할 수 있도록 하는 것을 말한다.
- 애플리케이션 제공 속도를 저하시키는 수동 프로세스로 인한 운영팀의 업무 과다 문제를 해결한다.
- 개발자가 애플리케이션에 변경 사항을 작성한 후 몇 분 이내에 클라우드 애플리케이션을 자동으로 실행할 수 있는 것을 의미한다.
- 이를 통해 사용자 피드백을 지속적으로 수신하고 통합하는 일이 훨씬 수월해진다.
- 애플리케이션의 배포의 리스크를 줄여주므로 애플리케이션 변경 사항을 한꺼번에 릴리스하지 않고 작은 단위로 세분화하여 더욱 손쉽게 릴리스할 수 있다.
- 프로덕션 이전의 파이프라인 단계에는 수동 게이트가 없으므로 지속적 배포는 잘 설계된 테스트 자동화에 크게 의존한다.
CI/CD와 DevOps비교
- CI/CD는 개발 팀과 운영 팀 간 협업 촉진을 목표로 하는 DevOps 방법론의 필수적인 부분이다.
- 모두 코드 통합 프로세스를 자동화하는 데 중점을 두어 사용자에게 가치를 제공할 수 있는 프로덕션 환경에서 이이디어가 개발에서 배포 단계로 이동하는 프로세스를 가속화한다.
- DevOps 프레임워크에서 보안이 매우 중요해지면서, DevOps 이니셔티브에 보안 기반을 구축해야 할 필요성을 강조하기 위해
"DevSecOps"라는 용어가 등장하게 되었다. - DevSecOps(개발, 보안, 운영)는 전체 IT 라이프 사이클에 걸쳐 보안을 통합하는 방식으로 책임을 공유하는 문화, 자동화 및 플랫폼 설계에 대한 접근 방식이다.
- DevSecOps의 핵심 구성 요소는 보안 CI/CD 파이프라인의 도입이다.
CI/CD 보안
- CI/CD 보안은 자동화도니 검사 및 테스트로 코드 파이프라인을 보호하여 소프트웨어 제공 시 취약점을 방지하는 데 사용된다.
- 보안을 shift-left와 shift-right 접근 방식등을 통해 기업의 파이프라인에 통합하는 것은 코드를 공격에서 보호하고 데이털르 누출을 방지하며 정책을 준수하고 품질 보증을 보장하는 데 도움이 된다.
일반적인 CI/CD 툴
- CI/CD 툴은 팀이 개발, 배포, 테스트를 자동화하도록 지원한다. 특히 통합 측면을 다루는 툴도 있고, 개발 및 배포를 관리하는 툴도 있으며, 지속적인 테스트 또는 관련 기능에 특화된 툴도 있다.
- Tekton Pipelines는 표준 클라우드 네이티브 CI/CD 경험과 컨테이너를 제공하는 쿠버네티스 플랫폼을 위한 CI/CD 프레임워크이다.
- Jenkins : 단순 CI 서버에서 완전한 CD 허브까지 모든 것을 처리하도록 설계된 툴
- Spinnaker : 멀티클라우드 환경을 위해 구축된 CD 플랫폼
- GoCD : 모델링 및 시각화에 중점을 둔 CI/CD 서버
- Concourse : 지속적인 오픈소스 작업 툴
- Screwdriver : CD용으로 설계된 빌드 플랫폼
'DevOps' 카테고리의 다른 글
[DevOps] 도커란? - 도커 개념 정리 (0) 2024.08.19