본문 바로가기
INFRA/DevOps

DevOps의 핵심 CI/CD란?

by BTC_조롱이 2022. 4. 22.

안녕하세요. Administrator팀입니다~🦔

이번 포스트에서는 DevOps의 핵심인 CI/CD에 대해서 다뤄보려 합니다.
DevOps는 개발자와 운영자 간의 간극을 좁히기 위한 개발문화 및 방법론이라고 소개를 했었죠? DevOps의 핵심인 CI/CD는 앱 개발 단계에 자동화를 도입해 고객이 자주 업데이트 받을 수 있도록 하는 개발방식입니다.

CI/CD?

CI(지속적인 통합)과 CD(지속적인 전달/배포)는 애플리케이션 개발 팀이 코드 변경을 보다 자주, 안정적으로 제공하기 위한 방식 또는 운영원칙 입니다.
CI/CD는 통합 및 제공을 자동화함으로써 소프트웨어 개발 팀이 코드 품질과 보안을 보장하며, 비즈니스 요구사항을 충족하는 데에 집중하도록 합니다.
CI와 CD의 더 자세한 내용은 아래서 알아볼게요!


CI(Continuous Integration)

먼저, CI는 Continuous Integration, 지속적인 통합이라는 뜻입니다. 지속적인 통합이란, 새로운 코드 변경이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합하는 것을 의미합니다.

CI가 필요한 환경

다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경:
현재 개발 중이거나 서비스 중인 애플리케이션은, 개발자가 기능을 추가할 때마다 commit을 날려 레포지토리에 버전 업데이트를 하게 됩니다. 다수의 개발자가 한 팀으로 작업할 경우, 공유 레포지토리에는 수많은 commit이 쌓이게 됩니다. 이런 상황에서 자동화된 빌드 및 테스트는 원천 소스코드의 충돌을 방어하는 이점이 있습니다.

MSA(Micro Service Archietcture) 환경:
최근 많은 IT기업이 선호하는 아키텍처 모델입니다. MSA는 기능별로 서비스를 잘게 쪼개어 개발하는 아키텍처인데요, MSA환경에서는 Agile 방법론이 적용되기 때문에, 기능 추가가 매우 빈번하게 이뤄집니다. 이러한 환경에서 CI의 적용은 기능 충돌 방지 등의 이점이 있습니다. 

CI의 목표는,
버그를 신속하게 찾아 해결하고,
소프트웨어의 품질을 개선하고,
새로운 업데이트의 검증 및 릴리즈의 시간을 단축시키는 것에 있습니다.


CD(Continuous Delivery, Continuous Deployment)

CD는 Continuous Delivery와 Continuous Deployment 모두 의미합니다. 해석하면 지속적인 서비스 제공, 지속적인 배포라는 뜻이죠.
Continuous Delivery는 공유 레포지토리에 자동으로 release 하는 것,
Continuous Deployment는 Production 레벨까지 자동으로 deploy 하는 것을 의미합니다.
CI가 새로운 소스코드의 빌드, 테스트, 병합까지 의미한다면, CD는 개발자의 변경 사항이 레포지토리를 넘어 고객의 프로덕션 환경까지 릴리즈 되는 것을 의미합니다.

MSA와 같은 환경에서 Agile방법론이 적용된다면, 서비스의 사용자는 최대한 빠른 시간 내에 최신 버전의 프로덕션을 제공받을 필요가 있습니다. 이 때, 소프트웨어가 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 support하는 것이 CD라고 할 수 있습니다.

이는 서비스의 개발팀과 비즈니스팀(영업, CS팀 등) 간의 커뮤니케이션 부족 문제를 해결해 줌으로써, 배포에 이르기까지의 노력을 최소한으로 줄여주는 이점이 있습니다.


DevOps 엔지니어의 역할

CI/CD 자동화는 DevOps 엔지니어의 핵심 업무에 속합니다.

DevOps엔지니어는 CI/CD를 위한 파이프라인을 구성하고, 이를 자동화 단계까지 구축합니다. 또한, 중간중간 모니터링 지표를 구성하여 개발자들의 개발 방향을 가이드합니다. 이를 통해, 고객들에게 안정적이고 신뢰성 높은 서비스 프로덕션을 제공합니다.

서비스 제품을 개발하는 것도 중요하지만, 고객에게 안정감 있는 서비스를 배포하고 운영하는 일도 중요합니다. 애플리케이션이 수시로 종료된다면 고객들이 앱을 신뢰하지 않고 사용하지 않게 되겠죠?

 

CI/CD Tools

CI/CD를 위한 대표적인 툴로는 Jenkins, Travis CI, Bamboo이 있습니다. 이 외에도 다양한 툴을 사용합니다.

'INFRA > DevOps' 카테고리의 다른 글

CI/CD 파이프라인 개념과 구축 방법  (0) 2022.04.29
kubectl 명령어 구조  (0) 2022.04.27
Pod  (0) 2022.04.21
kubernetes 설치 방법  (0) 2022.04.20
애자일 소프트웨어 개발 방법론  (0) 2022.04.14

댓글