CI/CD란 무엇인가?

김현정·2025년 5월 22일
0

1. CI (Continuous Integration)

1.1 CI란?

CI는 Countinuous Integration 즉, 지속적인 통합이라는 의미이다.
지속적인 통합이란, 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합하는 것을 의미한다.

1.1.1 CI가 필요한 환경 조건

다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경

: 지속적으로 서비스해야하는 어플리케이션이나 현재 개발 중인 어플리케이션은 기능 추가 시마다 commit등 날려 레파지토리에 버전 업데이트를 하는데 다수의 개발자가 한 팀으로 작업할 경우 이 공유 레파지토리에 수많은 commit들이 쌓이게 된다. 이런 상황에 자동화 된 빌드&테스트는 원천 소스코드의 충돌 등을 방어할 수 있다.

MSA(Micro Service Archietecture)환경

: 아키텍처 모델로 MSA는 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태를 의미.
MSA 환경에서는 대부분 Agile(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발방법론)방법론이 적용되기 때문에, 기능 추가가 매우 빈번하게 발생한다. 작은 micro service의 긴밀한 동작 테스트도 중요해진다. 그러한 상황에서 CI의 적용은 기능충돌방지 등의 장점을 제공한다.

1.1.2 CI의 핵심 목표

버그를 신속하게 찾아 해결함.

소프트웨어의 품질을 개선함.

새로운 업데이트의 검증 및 릴리즈의 시간을 단축시키는 것

1.1.3 CI의 장점

코드의 검증에 소요되는 시간이 줄어든다.

개발 편의성이 향상된다.

향상 테스트 코드를 통과한 코드만 레포지토리에 올라가기 때문에, 코드 퀄리티를 높게 유지할 수 있다.

2. CD(Continuous Delivery & Continuous Deployment)

2.1 CD란?

CD는 Continuous Delivery 혹은 Continuous Deploymen 두 용어 모두의 축약어이다.
지속적인 서비스 제공 혹은 지속적인 배포라는 의미이다.

2.1.1 Continuous Delivery

Continuous Delivery는 공유 레포지토리로 자동으로 Release하는 것이다.

2.1.2 Continuous Deployment

Continuous Deployment는 Production 레벨까지 자동으로 deploy하는 것을 의미한다.

2.1.3 CD의 핵심 목표

CD는 개발자의 변경 사항이 레포지토리를 넘어 고객의 프로덕션(production) 환경까지 릴리즈 되는 것을 의미

개발팀과 비즈니스팀(영업, CS팀 등)간의 커뮤니케이션 부족 문제를 해결해 줌

소프트웨어가 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 support 해줌

2.1.4 CD의 장점

개발자는 배포보다는 개발에 더욱 집중할 수 있게 도와줌

개발자가 원클릭으로 수작업 없이 빌드, 테스트, 배포까지의 자동화를 할 수 있다.

3. CI/CD 배포 도구

3.1 GitHub Actions

Git과 직접 연동이 되기 때문에 workflow 작성 및 관리가 쉽다.
다양한 플러그인을 제공해줌.
초기에는 러닝커브가 있을 수 있음.
public repository는 무료로 제공되며, private이라면 500MB 2000분이 무료로 제공됨
https://docs.github.com/ko/actions

3.2 Jenkins

아직까지도 제일 많이 사용하는 도구이며, 커뮤니티가 활발하다.
오픈소스이고 무료이다.
서버를 직접 호스팅 하고 관리해야 하기 때문에 서버 비용은 별도.
마찬가지로 다양한 플러그인을 제공해준다.
초기 설정에 시간이 걸릴 수 있으며, 지속적인 관리가 필요하다.
https://jenkins.io/

3.3 GitLab CI

GitLab 플랫폼에서 자동화 빌드, 테스트 및 배포 파이프라인을 제공한다.
사용이 간편하고 배포 설정이 쉽다.
다른 플랫폼에 비해 플러그인이 적다.
https://about.gitlab.com/

3.4 Circle CI

4. CI/CD 적용 전과후 비교

4.1 CI/CD를 적용하기 전 코드 통합 과정

  1. 개발자들이 개발하여 코드를 수정한다.
  2. 각자의 feature 브랜치에 코드를 push한다. (어느 한 부분에서 에러가 났다면 개발자들은 눈치채지 못함)
  3. 각자의 코드를 git에 올리고 통합한다.
    4, 에러가 발생했지만 어느 부분에서 에러가 났는지 모르기에 다시 어느 부분에 에러가 있는지 디버깅하고 코드를 수정한다.
  4. 위의 과정을 반복
  5. 많은 시간을 할애하여 에러가 해결되면 배포를 시작. 배포과정도 오랜시간 소요

4.2 CI/CD를 적용한 후 코드 통합 과정

  1. 개발자들이 개발하여 feature브랜치에 코드를 push한다.
  2. git push를 통해 Trigger되어 CI서버에서 알아서 Build, Test, Lint를 실행하고 결과를 전송한다.
  3. 개발자들은 결과를 전송받고 에러가 난 부분이 있다면 에러 부분을 수정하고 코드를 master브랜치에 merge한다.
  4. master브랜치에 코드를 merge하고 Build, Test가 정상적으로 수행이 되었다면 CI서버에서 알아서 Deploy 과정을 수행한다.

참고
https://artist-developer.tistory.com/24
https://zsunn.tistory.com/entry/CICD-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%A5%BC-%EC%9C%84%ED%95%9C-CICD-%EB%8F%84%EA%B5%AC%EC%9D%98-%EC%A2%85%EB%A5%98
https://seosh817.tistory.com/104

0개의 댓글