더 알아보기/개념

CI/CD (지속적인 통합/지속적인 제공/지속적인 배포)

은돌1113 2022. 1. 8. 14:17

CI/CD란?

DevOps 엔지니어의 핵심 업무라고들 합니다. 

 

CI (Continuous Intergration)

: CI는 Continuous Integration 즉, 지속적인 통합이라는 의미를 내포하고 있습니다.

지속적인 통합이란, 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리(repo)에통합하는 것을 의미합니다. (가능하다면 하루에 여러번까지)

 

CI가 필요한 환경에는 어떤 조건들이 있을까요??

  • 다수의 개발자가 형상관리 툴을 공유하고 사용하는 환경
    : N년차 개발자 분들이시라면, 형상관리 툴(Git, SVN 등)을 사용하고 계시죠?
    지속적으로 서비스해야 하는 어플리케이션이나 현재 개발 중인 어플리케이션은
    기능 추가 시마다 commit 등을 날려 레포지토리(Repository)에 버전 업데이트를 하는데요.
    다수의 개발자가 한 팀으로 작업할 경우, 이 공유 레포지토리에 수많은 commit들이 쌓이게 됩니다.
    그럴 때마다, 기능별로 빌드/테스트/병합(Merge)까지 하려면 상당히 번거롭겠죠?
    이런 상황에서, 자동화된 빌드&테스트 원천 소스코드의 충돌 등을 방어하는 Benefit을 제공할 수 있습니다.
  • MSA(Micro Service Archietecture) 환경
    : 최근 IT 업계에 붐처럼 떠오르고 있는 아키텍쳐 모델입니다. 기존의 어플리케이션이 모든 기능을 포함하는 하나의 거대한 서비스이었다면 MSA는 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태를 의미합니다. MSA 환경에서는 대부분 Agile(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발방법론) 방법론이 적용되기 때문에, 기능 추가가 매우 빈번하게 발생하게 됩니다.
    작은 micro service의 긴밀한 동작 테스트도 중요해지고요.
    그러한 상황에서 CI의 적용은 기능 충돌 방지 등의 Benefit을 제공할 수 있습니다.

이러한 CI의 핵심 목표는 1) 버그를 신속하게 찾아 해결하고 2) 소프트웨어의 품질을 개선하고 3) 새로운 업데이터의 검증 및 릴리즈의 시간을 단축 시키는 것

 

CD (ContinuousDelivery & Continuous Deployment)

CD는 Continuous Delivery 혹은 Continuous Deployment 두 용어 모두의 축약어 입니다. 해석하자면 지속적인 서비스 제공 혹은 지속적인 배포라는 의미입니다.

 

Continuous Delivery는 공유 레포지토리(Repo)로 자동으로 Release(출시하다, 공유하다) 하는 것

Continuous Deployment는 Production(생산) 레벨까지 자동으로 deploy(배포) 하는 것을 의미합니다.

 

정리

정리하자면 CI가 새로운 소스코드의 빌드, 테스트, 병합까지를 의미하고 CD는 개발자의 변경 사항이 레포지토리(Repo)를 넘어, 고객의 프로덕션(Production, 생산) 환경까지 릴리즈 되는 것을 의미합니다.

 

CI에서 예로 든 MSA와 같은 아키텍쳐 환경에서 Agile 방법론이 적용 될 경우, 서비스의 사용자는 최대한 빠른 시간 내에 최대 버전의 Production(생산)을 제공 받을 필요가 있습니다.

 

CI/CD 빌드 파이프라인

이 외에도 더 많은 툴이 있습니다.

 

출처

https://artist-developer.tistory.com/24

 

CI/CD란 무엇인가 (Feat. DevOps 엔지니어)

안녕하세요. 개발자의 용어를 쉽고 명확하게 설명해드리는 개발자 김모씨입니다. CI/CD ?! 개발자로 밥먹고 사시는 분들이시라면, 혹은 IT서비스 업계에 종사하시는 분들이라면, 한 번 쯤은 들어

artist-developer.tistory.com

 

참고 영상

https://youtu.be/0Emq5FypiMM