CICD란?

CI/CD(Continuous Integration/Continuous Deployment or Delivery)는 코드 통합, 테스트, 빌드, 배포 과정을 자동화하여 개발 효율성을 높이고 품질을 유지하기 위한 소프트웨어 개발 방법론

 


1. CICD의 주요 개념

일반적인 앱의 개발 및 유지보수 단계는 아래와 같습니다. 여기서 지속적 통합 및 지속적 전달을 단계별로 자동화할 수 있습니다.

 


CI (Continuous Integration) ' 지속적인 통합 '

 

개발자를 위한 자동화 프로세스라고 볼 수 있으며, Code - Build - Test 단계를 자동화할 수 있습니다.  

Code : 개발자가 코드를 원격 코드 저장소 (Ex. github repository)에 push하는 단계
Build : 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계
Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인하는 과정

 

애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있습니다.

 

이전에는 각자 개발자가 작성한 코드를 합치고 난 후, 모두 모여서 빌드를 시작하고 나서야 문제점을 파악할 수 있었습니다. 지속적 통합이 적용된 개발팀은 코드를 머지하기 전, 이미 빌드 오류나 테스트 오류를 확인하여 훨씬 더 효율적인 개발을 할 수 있게 됩니다.

 

 

  • 개발자가 작성한 코드를 자주(하루에도 여러 번) 저장소에 통합하는 프로세스.
  • 코드가 통합될 때마다 자동으로 테스트와 빌드를 실행

 

CD (Continuous Delivery & Deployment) ' 지속적인 제공 & 배포 '

 

Release - Deploy - Operate 단계를 자동화할 수 있습니다. 속적으로 통합된 코드를 자동으로 프로덕션 환경에 배포하는 프로세스이며 즉, 개발자가 원클릭으로 수작업 없이 빌드, 테스트, 배포까지의 자동화를 할 수 있습니다.

코드 변경 사항이 테스트 및 승인을 거쳐 자동으로 프로덕션 환경에 배포 (merge to main) 되고, 새로운 기능과 버그 수정 사항이 실제 사용자에게 빠르게 제공됩니다. 

 

Release : 배포 가능한 소프트웨어 패키지를 작성
Deploy : 프로비저닝을 실행하고 서비스를 사용자에게 노출 > 실질적인 배포
Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지

 

 

  • Continuous Delivery: CI에서 생성된 빌드 결과물을 수동 승인 후 프로덕션 환경에 배포.
  • Continuous Deployment: CI에서 생성된 결과물을 자동으로 프로덕션 환경에 배포.

 

2. CI/CD 파이프라인의 주요 구성

 

개발자가 배포할 때마다 일일히 빌드하고 배포하는 과정을 진행하는 것은 한두 번이면 충분하겠지만, 이러한 과정이 수없이 진행된다면 일일히 이 과정을 수행하는 것이 번잡스럽고 지루할 것이다. 그래서 이 수없이 진행되는 배포 과정을 자동화시키는 방법을 구축하게 되는데, 그것을 CI/CD 파이프라인이라고 한다.

 

 

2.1 소스 코드 관리 (Source)

  • GitHub, GitLab, Bitbucket과 같은 플랫폼에서 소스 코드를 관리
  • 브랜치 전략(예: Git Flow, Trunk-Based)을 활용하여 작업 분리

2.2 빌드 (Build)

  • 코드를 컴파일하고 의존성을 설치하여 실행 가능한 상태로 만드는 단계
  • ex )
    • FE : npm run build
    • BE (Java): mvn clean package

2.3 테스트 (Test)

  • 단위 테스트: 기능별 코드가 올바르게 동작하는지 확인
  • 통합 테스트: 여러 컴포넌트 간 상호작용 테스트
  • E2E 테스트: 실제 사용자 환경에서의 테스트

2.4 배포 (Deploy)

  • 스테이징 환경: 실제 배포 전에 테스트를 위한 환경
  • 프로덕션 환경: 사용자에게 제공되는 환경
  • 배포 도구: Kubernetes, AWS ECS, Docker Swarm 등

 


 

3. CI/CD의 주요 도구

 

3.1 CI/CD 플랫폼

GitHub Actions: GitHub 기반 CI/CD 워크플로우
GitLab CI/CD: GitLab 내장 CI/CD 기능
Jenkins: 오픈소스 CI/CD 서버
CircleCI: 클라우드 기반 CI/CD 서비스
Travis CI: 간단한 설정으로 CI/CD 제공

 

3.2 빌드 및 테스트 도구

FE : Jest, Mocha, Cypress (테스트), Webpack (빌드)
BE (Java) : JUnit (테스트), Maven/Gradle (빌드)

 

3.3 배포 도구

Docker: 컨테이너 기반 애플리케이션 배포
Kubernetes : 컨테이너 오케스트레이션 도구
AWS ECS/EKS : AWS의 컨테이너 관리 서비스
Google Cloud Build : Google Cloud의 CI/CD 서비스

 


 

 

'CS > WEB' 카테고리의 다른 글

[HTTP] 2. URI Web Browser  (1) 2024.11.20
[CI/CD] Github Action으로 CI/CD 구축하기  (1) 2024.11.17
[API] 01. Restful API란?  (0) 2024.11.14

+ Recent posts