CI/CD란?

박상민·2024년 3월 23일
0

개념 정리!

목록 보기
10/18

CI/CD란?


개발자라면 한 번쯤 CI/CD를 들어봤을 것이다.

오늘은 CI/CD에 대해서 알아보자.
우선 CI가 뭔지 알아보자

CI(Continuous Integration)


CI는 Continuous Integration. 즉, 지속적인 통합이라는 의미이다.

지속적인 통합

  • 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합되는 것을 의미

CI가 필요한 환경 조건

  • 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경

    • 형산관리 툴(Git, SVN 등)은 대부분의 개발자가 사용을 한다.
      지속적으로 서비스해야 하는 어플리케이션이나 현재 개발중인 어플리케이션은 기능 추가 시마다 commit, PR 등을 날려 Repository에 버전 업데이트를 한다.
      다수의 개발자가 한 팀으로 작업할 경우, 공유 Repository에 수많은 커밋이 쌓이게 된다. 그럴 때마다, 기능별로 빌드/테스트/병합까지 하려면 상당히 번거롭다.
      이런 상황에서, 자동화된 빌드&테스트는 원천 소스코드의 충돌 등을 방어하는 이점을 제공할 수 있다.
  • MSA(Micro Service Archietecture) 환경
    -IT 업계에 떠오른 아키텍처 모델

    • 기존의 어플리케이션이 모든 기능을 포함하는 하나의 거대한 서비스였다면, MSA는 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태를 의미한다.
      MSA 환경에서는 대부분 Agile 방법론(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발방법론)이 적용되기 때문에, 기능 추가가 매우 빈번하게 발생한다.
      또한, 작은 micro service의 긴밀한 동작 테스트도 중요해진다.
      이런 상황에서, CI의 적용은 기능 충돌 방지 등의 이점을 제공할 수 있다.

CI의 핵심 목표

  • 버그를 신속하게 찾아 해결
  • 소프트웨어의 품질을 개선
  • 새로운 업데이트의 검증 및 릴리즈의 시간을 단축시키는 것

CD(Continuous Delivery & Continuous Deployment)


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

Continuous Delivery

  • 공유 Repository로 자동으로 Release 하는 것

Continuous Deployment

  • Production 레벨까지 자동으로 deploy 하는 것

정리하자면, CI가 새로운 소스코드의 빌드, 테스트, 병합까지를 의미했는데, CD는 개발자의 변경 사항이 Repository를 넘어, 고객의 Production 환경까지 릴리즈 되는 것을 의미한다.

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

이는 서비스의 개발팀과 비즈니스팀 간의 커뮤니케이션 부족 문제를 해결해 주고, 개포에 이르기까지의 노력을 최소한으로 단축시켜 준다는 이점을 제공한다.

DevOps 엔지니어의 역할

CI/CD 자동화는 백엔드의 역할이라기 보다는 DevOps 엔지니어의 핵심 업무에 속한다.

물론 회사에 따라서 백엔드가 할 수도 있다.
또한, 개인 프로젝트, 사이드 프로젝트의 경우도 마찬가지이다.

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

프론트, 백엔드 개발도 중요하지만 배포 또한 매우 중요한 작업이다.
고객에게 안정감 있는 서비스를 배포하여 운영하는 일은 굉장히 중요하다.

만약, 수시로 서버가 종료되는 서비스가 있다면 고객들이 사용할까?
이와 유사한 서비스를 하지만 안정감 있는 서비스를 제공하는 쪽으로 고객이 몰릴것이다.

CI/CD 툴

  • Jenkins
  • Travis CI
  • Bamboo
  • Github action(비교적 최신)

LINE 엔지니어의 CI/CD 적용 사례
https://engineering.linecorp.com/ko/blog/build-a-continuous-cicd-environment-based-on-data


출처
gocd
Amazon Web Service

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글