클라우드 환경에서의 지속적 통합과 지속적 배포 (CI/CD)

Updated:

지속적 통합과 지속적 배포 (CI/CD)

지속적 통합 (CI) 이란 애플리케이션 소스 변경 사항들이 지속적으로 병합, 빌드, 테스트되는 것을 의미한다. 그리고 지속적 배포 (CD) 란 지속적 통합을 통해 준비된 애플리케이션이 테스트 및 프로덕션 환경에 자동으로 배포되는 것을 의미한다.
애플리케이션 개발을 한다고 생각해보자. 개발자들은 작업한 소스 코드를 형상 관리에 커밋, 푸시하게 된다. 그 후에 소스 변경 사항들은 빌드, 테스트 과정을 거쳐 테스트 또는 프로덕션 환경으로 배포되게 된다. 이런 일련의 작업들을 자동화한 것이 지속적 통합과 지속적 배포 (CI/CD) 라고 할 수 있다.



위 그림은 샘플 프로젝트의 애플리케이션 빌드/배포 프로세스를 도식화한 것이다. 이는 일반적인 클라우드 환경에서 의 빌드/배포 프로세스이다. 각 단계별 상세 태스크를 정리하면 다음과 같다.

프랙티스 주요 활동 태스크 작업 도구
지속적통합 소스 코드 확보 및 통합 - 소스코드 커밋
- 소스코드 풀
형상관리
예) 깃허브
  빌드, 컨테이너 - 소스코드 빌드
- 도커 이미지 생성
빌드 도구
예) 도커, 코드빌드
  컨테이너 레지스트리 등록 - 레지스트리 푸쉬 컨테이너 레지스트리 서비스
예)도커허브, ECR, ACR, GCR
지속적배포 컨테이너 이미지 확보 - 컨테이너 이미지 풀 컨테이너 레지스트리 서비스
예)도커허브, ECR, ACR, GCR
  배포 - 배포 수행 배포 도구
예) 젠킨스, AWS CodePipeline, Azure DevOps Pipeline, GCP Code Build

단계별로 살펴보자. 가장 먼저, 형상관리에 통합된 애플리케이션 소스코드를 빌드하게 된다. 여기서 컨테이너 기술을 적용하지 않는다면 빌드 단계에서 생성된 war, jar 등 의 결과물을 바로 배포하면 된다. 하지만 컨테이너 기술을 적용한다면 도커 이미지를 생성하고 이를 관리하기 위해 컨테이너 레지스트리에 등록한다. 다음으로 컨테이너 레지스트리에 등록한 도커 이미지를 사용하여 쿠버네티스 환경에 애플리케이션을 배포한다.

그럼 주요 태스크들에 대해 좀 더 자세히 알아보자.

빌드

빌드란 소스코드를 실행가능한 소프트웨어으로 생성해주는 것을 말한다. 그 과정에서 컴파일, 테스트 등을 수행하게된다. 빌드 도구는 이러한 빌드 과정을 편리하고 쉽게 수행할 수 있도록 도와준다. 다양한 빌드 도구 들이 있지만 최근 가장 많이 사용되는 빌드 도구는에는 메이븐, 그래들 이 있다.

컨테이너화

컨테이너화란 애플리케이션을 컨테이너 이미지로 생성하는 것을 말한다. 그렇다면 컨테이너 이미지는 무엇일까? 컨테이너 이미지는 간단히 말해 애플리케이션 실행에 필요한 모든 것을 압축해놓은 것이라고 할 수 있다. 애플리케이션을 컨테이너화 하는데 가장 널리 알려져 있는 도구는 바로 도커이다. 도커는 컨테이너 이미지 빌드, 실행의 핵심이 되는 도구라고 할 수 있다. 도커를 사용하여 애플리케이션을 컨테이너화할때는 사전에 도커데몬이 설치되어 있어야하고 도커 파일도 작성해야한다.

컨테이너 레지스트리 등록

컨테이너 이미지를 생성하는 것까지 완료하였다. 그렇다면 이렇게 생성한 컨테이너 이미지들을 어떻게 관리해야할까? 우리가 소스코드를 더이상 파일 서버에 관리하지 않고 깃, SVN 등의 형상관리 도구를 사용하여 관리하듯이 컨테이너 이미지들도 컨테이너 레지스트리를 통해 관리할 수 있다. 다시 말해, 컨테이너 레지스트리는 컨테이너 이미지를 관리하는 저장소이다. 도커 이미지같은 컨테이너 이미지를 업로드하고 다운로드 할 수 있다. 기존에 도커를 접해봤다면 도커 허브를 들어봤을 것이다. 도커 허브는 도커에서 운영하는 도커 이미지를 공용, 개인용으로 관리할 수 있는 공식이다. 도커 허브 외에도 여러 클라우드 벤더 사에서는 자체적으로 컨테이너 레지스트리 서비스를 운영, 제공하고 있다. 대표적으로 AWS 의 ECR, MS 의 ACR, Google 의 GCR 가 있다.

배포

클라우드 환경에 애플리케이션을 배포하는 형태는 여러 가지가 있다. 일반적인 온프레미스 환경에서 자바 애플리케이션을 배포한다고 생각해보자. 빌드를 통해 생성된 war 파일을 was 에 배포할게 될 것이다. 클라우드 환경에서도 IaaS 서비스 모델에서는 크게 다를 것이 없다. 다만 배포되는 환경이 클라우드라는 것만 다르다고 할 수 있다. 하지만 컨테이너 기술을 적용하고 더 나아가 쿠버네티스를 적용하게 된다면 많은 것이 달라질 수 있다. 물론 이런 기술들을 직접 구축하여 적용할 수도 있지만 클라우드 벤더 사에서는 이미 PaaS 서비스로 제공해주고 있기 때문에 이를 사용하면 보다 쉽게 적용할 수 있다.

지금까지 지속적 통합과 지속적 배포 (CI/CD) 에 대해 알아보고 이를 수행하기 위한 작업들도 살펴보았다. 이런 모든 과정 또는 일부과정을 빌드/배포 도구를 사용하여 파이프라인을 구성하여 자동화할 수 도 있다. 대표적인 도구로 젠킨스가 있으며 각 클라우드 벤더마다 빌드/배포를 지원하는 도구들이 있는데 대표적으로 AWS CodePipeline, Azure DevOps Pipeline, GCP Cloud Build 가 있다.

Tags: , ,

Categories:

Updated: