본문 바로가기

# Development/DevOps

[CI/CD] CI/CD란 무엇인가?

CI/CD란 무엇인가?

소프트웨어 개발 및 배포를 자동화하여 효율적으로 개발 및 배포 프로세스를 관리하는 방법론이다.

 

CI (Continuous Integration)

Continuous Integration: 지속적 통합

CI는 개발자들이 코드를 공유하는 과정에서 자동으로 코드 변경사항을 빌드, 테스트, 통합하는 프로세스를 의미한다.

 

개발자들이 코드를 수정하고 Github과 같은 버전 관리 시스템에 푸시하면, CI 서버가 이를 자동으로 감지하여 해당 코드를 빌드하고, 테스트를 실행하여 기존 코드와 통합하는 방법이다. 해당 프로세스를 통해 빠르게 코드를 통합하고, 충돌과 오류를 검출할 수 있다.

 

주요 특징

  • 코드 통합
    • CI는 여러 개발자들이 동시에 개발하는 경우에도 각자 작성한 코드를 자주 통합하도록 장려한다.
    • 개발자들이 작성한 코드는 중앙 저장소(버전 관리 시스템)에 자주 푸시된다.
  • 자동화된 빌드
    • 코드를 푸시하면 CI 서버가 자동으로 빌드 작업을 수행힌다.
    • 이를 통해 코드 빌드 시 오류를 빠르게 발견하고, 빌드 오류가 없는지 확인할 수 있다.
  • 자동화된 테스트
    • CI 서버는 자동으로 테스트를 실행하여 코드 변경사항이 기존 코드와 잘 통합되는지 확인한다.
    • 테스트를 통과하지 못한 코드는 통합되지 않고, 오류를 신속하게 발견할 수 있다.
  • 조기 오류 발견
    • CI는 코드 변경사항을 자주 빌드하고 테스트하기 때문에 오류를 조기에 발견할 수 있다.
    • 버그를 최소화하고 개발자들이 빠르게 수정할 수 있도록 도와준다.
  • 피드백과 협업 강화
    • CI는 팀 내에서 코드 변경사항에 대한 피드백과 리뷰를 쉽게 얻을 수 있다.
    • 빠른 피드백으로 개발자들이 서로 협업하고 코드 품질을 높일 수 있다.

 

CD (Continuous Deployment or Continuous Delivery)

코드 변경사항이 CI 테스트를 통과한 후 자동으로 운영 환경으로 배포되는 프로세스로, Continuous Deployment, Continuous Delivery 두 방법의 공통된 약자로 쓰인다.

 

Continuous Deployment: 지속적 배포

지속적 배포(CD)는 소프트웨어 개발에서 CI(Continuous Integration)와 함께 사용되는 프로세스로, 코드 변경사항이 자동으로 운영 환경(프로덕션 서버)으로 자동 배포되는 것을 의미한다.

 

CI 테스트를 통과한 코드는 자동으로 운영 환경으로 배포되어 사용자들에게 실시간으로 제공된다. 개발자들이 코드를 작성하고 버전 관리 시스템에 푸시하면, CI가 자동으로 빌드하고 테스트를 실행한 후, 통과한 코드가 자동으로 운영 환경에 배포된다.

 

지속적 배포는 빠른 배포 주기와 빠른 피드백을 가능하게 하므로 작성한 코드가 실제 사용자에게 어떤 영향을 미치는지 빠르게 확인할 수 있으며, 기능 추가나 버그 수정과 같은 코드 변경사항이 빠르게 적용되어 개발자들의 생산성을 향상시킨다.

 

Continuous Delivery: 지속적 제공

지속적 제공(CD)은 지속적 배포와 비슷하지만, 배포 시점을 수동으로 결정할 수 있는 프로세스다.

 

CI를 통해 테스트를 통과한 코드는 자동으로 빌드되어 특정 환경(개발 환경, 스테이징 환경 등)으로 배포되지만, 운영 환경으로의 배포는 수동으로 결정된다.

 

지속적 제공은 실시간 배포와 비교하여 조금 더 보수적인 접근 방식으로, 운영 환경으로의 배포를 수동으로 검토하고 승인하는 과정을 거친다. 지속적 제공은 더 안정적인 배포를 가능하게 한다.

 

 

CI/CD의 주요 도구와 사용 방법

CI/CD를 구현할 수 있는 주요 도구들을 소개한다.

 

GitHub Actions

GitHub Actions는 GitHub의 통합 CI/CD 서비스로, GitHub 레포지토리에서 코드 변경사항을 자동으로 빌드, 테스트하고 배포하는데 사용된다.


사용 방법

  • GitHub Actions는 .github/workflows 디렉토리에 YAML 파일을 생성하여 사용한다.
  • 이 파일에서 CI/CD 파이프라인의 작업 흐름과 단계를 정의한다.
  • 각 작업은 name, on, jobs 등의 필드를 갖고 있으며, 각 단계에서 실행할 스크립트를 지정할 수 있다


Jenkins

Jenkins는 오픈 소스 CI/CD 도구로, 다양한 플러그인과 유연한 설정으로 CI/CD 파이프라인을 구축할 수 있다.

 

사용 방법

  • Jenkins 서버를 설치하고 웹 인터페이스를 통해 파이프라인을 설정한다.
  • Jenkins는 "젠킨스 파일" 또는 "젠킨스 파이프라인"이라고 불리는 Groovy 스크립트를 사용하여 파이프라인을 정의한다.

 

CircleCI

CircleCI는 클라우드 기반의 CI/CD 플랫폼으로, GitHub, Bitbucket, GitLab과 같은 버전 관리 시스템과 연동하여 사용할 수 있다.

 

사용 방법

  • CircleCI에서는 .circleci/config.yml 파일에 CI/CD 파이프라인을 정의한다.
  • 이 파일에서 환경 설정과 단계별 실행 커맨드를 정의하여 사용한다.

 

Travis CI

Travis CI는 오픈 소스 CI/CD 플랫폼으로, GitHub과 통합하여 레포지토리에서 CI/CD 파이프라인을 실행할 수 있다.

 

사용 방법

  • .travis.yml 파일에 CI/CD 파이프라인을 정의한다.
  • 이 파일에서 언어, 빌드 환경, 테스트 스크립트 등을 설정하여 사용한다.


GitLab CI/CD

GitLab CI/CD는 GitLab의 통합 CI/CD 서비스로, GitLab 레포지토리에서 코드 변경사항을 자동으로 빌드, 테스트하고 배포하는데 사용된다.

 

사용 방법

  • .gitlab-ci.yml 파일에 CI/CD 파이프라인을 정의한다.
  • GitLab에서는 .gitlab-ci.yml 파일을 기준으로 파이프라인을 구성하고 실행한다.

 

마무리

CI/CD의 이점으로는  지속적으로 테스트되고 검증된 코드가 배포된다는 점이다. 이로 인해 버그와 결함이 줄어들고, 소프트웨어 품질을 일정하게 관리 할 수 있다. 또한 자동화된 빌드, 테스트 및 배포 프로세스를 통해 새로운 기능과 수정 사항을 신속하게 고객에게 제공할 수 있다. 반복적이고 지루한 테스트 및 배포 작업을 자동화함으로써 개발자의 생산성을 향상 시킬 수 있다.

 

참고자료 (CI/CD의 적용 사례)

살펴보면 좋을 기업들의 CI/CD 적용 사례들을 소개한다.

 

LINE

 

CI/CD 자동화가 가져다 준 행복

LINE DEVELOPER DAY 2020에서 구상모 님이 발표하신 The CI/CD Automation make happiness from small pieces 세션 내용을 옮긴 글입니다. 안녕하세요. LINE Plus에서 Andr...

engineering.linecorp.com

 

PIPE: 더 나은 개발자 경험을 제공하기 위한 CI/CD

LINE DEVELOPER DAY 2021에서 이승 님이 발표하신 PIPE: 더 나은 개발자 경험을 위한 CI/CD 세션 내용을 옮긴 글입니다. 안녕하세요. LINE Plus&nbs...

engineering.linecorp.com

 

KAKAO

 

모빌(MoBiL) - kakao의 모바일앱 CI/CD 플랫폼

하나의 모바일 앱이 마켓에 출시되기까지는 수많은 빌드와 배포 과정을 거치게 됩니다. 더 자주, 더 빠르게, 더 높은 품질의 서비스를 출시하기 위해서는 효율적인 빌드와 배포는 필수적입니다.

tech.kakao.com

 

뱅크샐러드

 

뱅크샐러드 Web chapter에서 GitHub Action 기반의 CI 속도를 개선한 방법 | 뱅크샐러드

이 글은 대부분의 웹 프론트엔드에서 사용하는 Node.js와 Npm 을 사용하는 사례를 바탕으로 작성되었습니다. 안녕하세요 뱅크샐러드 웹 프론트엔드 엔지니어 조성동입니다. Web chapter 내 개발 과정

blog.banksalad.com