CI/CD가 무엇일까

김광훈·2022년 8월 27일
0

기록

목록 보기
3/3

CI/CD

사용자에게 우리가 만든 프로젝트를 배포했는데 특정 동작에서 에러가 발생했다고 가정해보자. 개발자들은 이를 해결하기 위해 코드를 수정할 것이고 컴파일-빌드-배포의 과정을 통해 수정된 코드가 제대로 동작하는지 테스트하고 검증을 해야한다. 이 과정 중 테스트를 통과하지 못한다면 앞의 과정을 반복해야 할 것이다. 이러한 과정은 시간도 많이 걸리고 실수도 발생하기 쉽다.

그리고 이런 과정에 들이는 비용을 최소화하여 개발 친화적인 환경을 구축함으로서 고객에게 더 나은 서비스를 제공하기 위해 CI/CD가 생겼났다.

CI/CD의 기본 개념은 '지속적인 통합(CI)', '지속적인 서비스 제공(CD)', '지속적인 배포(CD)'가 있다.

CI(continuous integration

CI는 지속적 통합이라는 의미를 갖고 있고 개발을 진행하면서 여러명이 하나의 코드에 수정을 진행해도 지속적으로 관리할 수 있게 만든다.

CI의 시작은 개발자들이 버전 관리 시스템(Git, SVN)에 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일 작업 기반을 제공하는 것부터 시작합니다. 이에 추가적으로 커밋할 때마다 빌드와 일련의 자동 테스트가 이루어져 변경된 코드의 신뢰성을 부여하게 됩니다. 이렇게 신뢰성이 부여된 코드는 CI/CD 파이프 라인(자동화)을 시작하는 중요한 첫 단계이기도 합니다.

CI단계

  • 빌드(Build) - 애플리케이션을 컴파일하는 단계
  • 테스트(Test) - 코드를 테스트하는 단계. 이 단계를 자동화하여 시간과 수고를 줄일 수 있다.

CD(Continuous Deployment / Continuous Delivery)

CD는 지속적 배포로 소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 관리하자는 개념으로 지속적 제공(Continuous Delivery)로 사용되기도 한다.

지속적 제공(Continuous Delivery)

CI를 통해 새로운 소스코드의 빌드와 테스트 병합까지 성공적으로 진행되었다는 것은 빌드와 테스트를 거쳐 github과 같은 레포지토리에 업로드되었다는 것을 의미한다.

지속적 배포(Continuous Deployment)

성공적으로 병합된 내역을 저장소뿐만 아니라 사용자가 사용할 수 있는 배포환경까지 릴리즈 하는 것을 의미한다.

CD 단계

  • 릴리즈(Release) - 애플리케이션을 리포지토리에 제공하는 단계이다.
  • 배포(Deploy) - 코드를 실제 사용자가 사용할 수 있는 배포 환경까지 배포하는 단계이다.

그 외에도 필요에 따라 검증 및 컴플라이언스(Validation & compliance)와 같이 빌드 검증 단계를 추가할 수 있다.

CI/CD 흐름

  1. 개발자가 로컬 개발환경을 코드베이스를 이용해 최신화 한다.
  2. 최신화 되어 있는 개발환경에서 코드(서비스 로직, 테스트 코드 등)를 작성하고 커밋을 한다.
  3. CI서버에서 빌드-테스트를 실행하고 결과를 내려준다. 해당 결과를 확인하고 이상이 없다면 머지를 한다.
  4. 3번에서 동일하게 메인 브랜치에서도 CI에 의해 코드를 테스트하여 신뢰성을 갖추고 github과 같은 저장소로 코드를 업로드한다.
  5. 이렇게 업로드 된 코드는 서버에 구축되어 있는 CD에 의해 자동으로 서버에 애플리케이션이 전달되고 배포되는 절차를 밟는다.

이런 흐름 사이사이에 회사에 따라 다른 방식으로 CI/CD 파이프 라인을 구축할 수 있다.

글을 마치며

개인적으로 생각하는 CI/CD의 핵심은 개발자들의 개발 편의성을 향상시켜준다고 생각한다. 실제 현업에서 CI/CD가 구축되어 있는 환경에서 개발을 하고 있고, CI/CD가 무엇인지 공부해보니 CI/CD를 구축해 놓으면 개발자들은 배포나 신경쓰지 않아도 되고 서비스 로직에 온전히 집중할 수 있게 되어 효율이 높아졌고 짧은 배포주기 덕분에 에러가 발생하더라도 비교적 리스크를 크게 질 필요가 없어 졌다는 것도 큰 장점이라고 생각한다.
물론 앞에서 말한 CI/CD의 장점을 다 누리기 위해서는 개발자들이 테스트 코드를 철저하게 작성하여 신뢰성이 부여된 코드를 만드는 것부터 시작해야 한다고 생각한다.

Reference

profile
잘 부탁드려요

0개의 댓글