CI (Continuous Integration) 란


CI는 Continuous Integration의 약자이며 지속적인 통합을 의미한다. 쉽게 풀어서 말하면 여러 개발자들의 코드 베이스를 계속해서 통합하는 것을 말하며 1. 빌드 2. 테스트 3. 통합 4. 배포의 과정 중 1~3의 배포 전까지 여러 브랜치의 코드를 통합하는 과정을 거친다. 각 브랜치의 코드를 통합하는 과정을 거칠 때마다 우리는 빌드 후 테스트를 돌려야 하고 기존 코드와 충돌이 없는지 확인해야 하며, 통합을 위한 규칙을 잘 지켰는지 확인해야 한다. 이러한 과정을 자동화하여 반복하기 때문에 이를 지속적 통합이라 한다. 

 

 

 CD (Continuous Delivery)


CD는 Continuous Delivery 혹은 Continuous Depolyment의 약자이며 지속적인 서비스 제공 혹은 지속적인 배포를 의미한다.  코드 베이스가 항상 배포 가능한 상태를 유지하여, 사용자의 환경에 서비스를 지속적으로 배포 가능하도록 하는 것을 말한다. CI에서 빌드, 테스트, 병합까지의 과정을 처리하였다면 CD에서는 개발자의 변경 사항이 레포지토리를 넘어 고객의 Production 환경까지 릴리즈하는 활동을 한다.

 

CI/CD의 장점


  • 수작업을 줄일 수 있기 때문에 개발 생산성이 향상된다.
  • 버그를 신속하게 발견할 수 있기 때문에 문제점을 빠르게 발견할 수 있고 수정이 용이하다.
  • 테스트의 빈도를 높일 수 있기 때문에 코드의 퀄리티를 향상시킬 수 있다.
  • 신속한 업데이트와 배포가 가능하다.

 

 

CI/CD 전과 후


CI/CD를 적용하기 전의 배포 과정

 

1. 개발자들이 개발하여 코드를 작성 또는 수정한다.

2. 각자의 feature 브랜치 코드를 remote repository로 push 한다.

3. 각자 push 한 코드를 통합한다.

4. 해당 단계에서 에러가 발생했지만 정확히 어느 부분에서 에러가 났는지 모르기 때문에 다시 에러가 발생한 부분을 디버깅하고 코드를 수정한다.

5.  에러가 해결될 때까지 1 ~ 4의 과정을 반복한다.

6.  배포를 시작한다. (배포 과정 또한 개발자가 직접 배포 과정을 거치므로 많은 시간을 소요한다)

 

CI/CD를 적용 후의 배포과정

 

1. 개발자들이 개발하여 feature 브랜치에 코드를 push 한다.

2. git push를 통해 Trigger 되어 CI서버에서 알아서 Build, Test, Lint를 실행하고 결과를 전송한다.

3. 개발자들은 결과를 전송받고 에러가 난 부분이 있다면 에러 부분을 수정하고 코드를 master 브랜치에 merge 한다.

4. master 브랜치에 코드를 merge 하고 Build, Test가 정상적으로 수행이 되었다면 CI서버에서 알아서 Deploy 과정을 수행한다.

 

CI/CD Tool


Jenkins

CircleCI

TravisCI

Github Actions

'devops' 카테고리의 다른 글

Docker란  (0) 2023.11.06
Jenkins로 배포 자동화 실현해보기  (0) 2022.09.04
compile(컴파일), build(빌드), deploy(배포)  (0) 2022.05.12

+ Recent posts