본문 바로가기

infra

[CI/CD] 개발부터 배포까지, 자동화하기

이제 CI/CD는 더 이상 선택이 아닌 필수가 되었다.

빠른 개발 속도와 안정적인 서비스 운영을 위해 반드시 구축해야 하는 개발 프로세스인

CI/CD가 무엇인지 그 개념부터 필요성, 대표 CI/CD 툴까지 알아보자.

 

CI (Continuous Integration)

 

여러 개발자가 하나의 프로젝트를 진행할 때, 각자 맡은 기능을 며칠, 몇주에 걸쳐 개발한 뒤 마지막에 코드를 합친다면 수많은 conflict가 발생하여 해결에 엄청난 시간이 소요될 것이다.

CI란?
: 여러 개발자의 각 소스들을 메인 소스에 병합하고 빌드하는 과정의 반복을 자동화하는 것
'주기적으로', 그리고 '자동으로' 통합하고 테스트하는 것

 

왜 필요할까?

  • 코드 통합 시 발생하는 문제점을 조기에 발견하고 빠르게 해결 가능
  • 버그가 발견되는 시점을 앞당기고, 코드의 품질을 일정하게 유지할 수 있음
  • 개발자는 항상 테스트된 상태로 유지되는 안정적인 코드 기반 위에서 자신의 작업에 집중할 수 있음

→ CI 환경에서 개발자가 코드를 push하면 CI 서버(Jenkins, Github Actions 등)가 이를 감지하여 자동으로 빌드 및 테스트를 수행하고 그 결과를 즉시 피드백해준다

 

 

CD (Continuous Delivery/Deployment)

 

배포 과정을 자동화하지 않으면 매번 반복되는 빌드, 테스트, 배포 작업을 개발자가 직접 수행하여 불필요한 시간과 노력이 소요된다. 또, 수동 배포 시 발생할 수 있는 설정 오류, 빌드 실패 위험을 CD를 통해 감소시킬 수 있다.

CD란?
: CI를 통해 통합된 코드를 테스트하고, 최종적으로 운영 환경에 배포하는 과정을 자동화하는 것

 

CD는 2가지 수준으로 나뉜다.

  1. 지속적 제공 (Continuous Delivery)
    • 빌드, 테스트, 배포 준비까지의 모든 단계를 자동화하여, "언제든 배포 가능한 상태"를 유지하는 것
    • 운영 환경으로의 실제 배포는 사람이 수동으로 제어. 배포 시점 조절 가능
  2. 지속적 배포 (Continuous Deployment)
    • 지속적 제공에서 한 단계 더 나아가, 운영 환경 배포까지 자동화하는 것
    • 모든 테스트를 통과한 코드는 사람의 개입 없이 즉시 운영 환경에 배포됨

 

 

CI/CD 파이프라인

 

소스 코드의 변경이 발생했을 때부터 최종 배포에 이르기까지 거쳐야 할 단계

Source → Build → Test → Deploy

  1. Source : 개발자가 코드를 버전 관리 시스템(VCS)에 푸시하면 파이프라인이 자동으로 시작됨
  2. Build : 푸시된 소스 코드를 컴파일하고, 실행 가능한 파일이나 배포 가능한 패키지로 만듦
  3. Test : 유닛 테스트, 통합 테스트 등 미리 정해진 테스트를 실행하여 코드의 품질과 안정성 검증
  4. Deploy : 모든 테스트를 성공적으로 통과하면 결과물을 Staging(Continuous Delivery)   또는 Production 환경에 자동으로 배포(Continuous Deployment)

 

 

주요 CI/CD 도구

 

클라우드 기반 솔루션과 직접 설치해서 사용하는 설치형(오픈소스) 도구가 있다.

대표적인 CI/CD 툴은 다음과 같다.

 

클라우드 기반

  • Github Actions : GitHub 리포지토리 내에서 워크플로우를 자동화. 코드와 함께 CI/CD 파이프라인 관리 가능.
  • GitLab CI/CD : GitLab에 내장된 CI/CD 도구.
  • Azure DevOps: Microsoft 생태계 최적화
  • AWS CodePipeline: 빌드, 테스트, 배포 등 AWS 서비스와 쉽게 연동할 수 있는 CI/CD 파이프라인.

오픈소스

  • Jenkins : 가장 대표적인 CI/CD 오픈소스. 다양한 플러그인 제공. 설정과 관리가 복잡할 수 있음.