CI/CD에 대해서

구본식·2023년 1월 10일
0
post-thumbnail

CI개념

CI는 Continuous Integration의 약자로써 지속적인 통합의 의미이다.
지속적인 통합이란 새로운 어플리케이션의 새로운 기능이나 코드 변경이 있을때 주기적으로 빌드 및 테스트가 진행되어 공유 레포지토리(main repository)에 통합 되는것을 의미한다.

CI 사용시 알아야 될 지식

1. 코드 변경사항을 주기적으로 빈번하게 머지해야된다.

여러 개발자가 있는 환경에서 새로운 기능, 코드 변경 사항들을 최대한 작은 단위로 나누어 개발을 해야된다. 주기적으로 merge 하지 않고 개발하다가 시간이 많이 지나고 merge를 하게 되면 merge 충돌이 발생할수 이 문제를 해결하는데 많은 시간이 사용되기 때문이다.

또한 주기적으로 머지할경우 작은 단위로로 작업되기 때문에 버그 발생범위도 작은 단위로 일어나기 때문에 버그 수정에 용의할 것이다.

2. 통합을 위한 단계(빌드, 테스트, 머지)의 자동화

새로운 기능이나 코드 변경사항이 있을때 공유 레포지토리에 merge하게 되면 공유 레포지토리에 연결된 CI Script를 통해서 기존 레포지토리에 추가된 기능과 함께 자동으로 Build한 후 정상적이라면 작성해논 단위, 통합 Test를 거친후 정상적이라면 추후 배포할때 반영되게 된다.

만약 Build, Test 단계에서 버그 발생시 merge한 개발자에게 자동으로 알려주게 된다.

CI의 장점

1. 개발 생산성이 향상

주기적으로 merge하기 때문에 개발이외에 merge 충돌 문제들을 피할수 있어서 개발 생산성이 올라간다.

2. 문제점 빠르게 발견, 개발자가 미처 발견하지 못한 코드의 문제 발견

코드 변경사항, 새로운 기능들이 공유레포지토리에 merge되면 자동으로 빌드, 테스트되기 때문에 코드의 문제점이나 미처 생각하지 못하였던 문제점들이 빠르게 발견될수 있다.

3. 버그 수정의 용의

여러 개발자들이 주기적으로 코드 변경사항들을 공유 레포지토리merge하기 때문에 코드 변경사항들도 작은 단위이므로 버그 발생 단위도 작은 단위이기 때문이다.


CD의 개념

CD는 Continuous DeploymentContinuous Deliver의 약자로 지속적 배포/지속적 제공의 의미다.

두 개념은 약간의 차이가 있는데

Continuous Delivery(지속적인 제공)

앞서 CI의 단계를 정상적으로 통과하였다면 Release 단계에 들어가게 된다.
Release단계에서 Deploy단계로 넘어가기전에 Release단계에 문제가 없는지 검증하고 Deploy단계로 넘어가게되는데 이것을 수동으로 하게 되면 Continuous Delivery라고 하게 된다.

CI단계 후 공유 레포지토리자동으로 Release까지하는 것을 Continuous Delivery 라고한다.

Continuous Depolyment

앞서 Continuous Delivery를 통해 Release가 준비되면 자동으로 사용자들에게 Deploy(배포) 까지 해주는것을 의미한다.


CI/CD 파이프라인 정리

  1. 새로운 기능개발, 코드 변경 사항을 공유 레포지토리(메인 레포지토리) 에 merge

  2. 기존의 코드와 새로 추가된 코드와 함께 자동으로 Build

  3. 작성해논 단위, 통합 테스트를 통해 Test

  4. 앞 과정이 성공시 Release

  5. 수동으로 Deploy(배포)할 경우 : Continuous Delivery
    자동으로 Deploy 할 경우 : Continuous Depolyment


이러한 CI/CD를 해주는 Tools들은 대표적으로 Jenkins, Buildkite, Github Actions등 처럼 다양하다.

다음으로는 이번 프로젝트에 사용했던 Jenkins에 대해서 알아보도록 하겠다.

참고자료 : https://www.youtube.com/watch?v=0Emq5FypiMM, https://foot-develop.tistory.com/14

profile
백엔드 개발자를 꿈꾸며 기록중💻

0개의 댓글