[Infra] CI/CD란 무엇일까?

jjuny7712·2023년 5월 30일
0
post-thumbnail

CI/CD 개념

CI는 지속적인 통합(Continuous Integration)을 의미하고, CD는 지속적인 배포(Continuous Delivery 또는 Continuous Deployment)를 의미한다. 즉, 통합하는 과정을 CI, 배포하는 과정을 CD라고 생각하면 된다.

하지만, 여기까지만 들으면 잘 이해가 되지 않는다.. 지속적인 통합은 뭐지?, 지속적인 배포는 뭐지? 라는 생각이 들 수 있다.

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

CI는 새로 만드는 기능들이 Main Repository에 주기적으로 빌드되고 테스트되서 Merge되는 것을 의미한다.

CI는 2가지 포인트를 중점으로 생각하면 된다

  1. 코드 변경사항을 주기적으로 빈번하게 Merge해야한다.
    1. 두 명의 개발자가 서로 다른 소스코드를 작성하다가 Merge를 하면 충돌이 발생할텐데 아주 오랫동안 Merge를 하지 않고 있다가 한번에 통합하려고 하면 이 충돌을 해결하기 위해 엄청난 시간이 소요될 수 있다.
    2. 결국은 기능을 최대한 작은단위로 분할하고 통합해 나가면서 개발하는 것이 중요하다고 할 수 있다.
  2. 통합을 위한 단계 (빌드, 테스트, 머지)의 자동화
    1. 주기적으로 머지되어 코드의 변경사항이 발생한 이후에도 빌드가 성공적으로 되는지 확인해야하고(빌드 자동화), 기존에 시스템의 다른 버그를 초래하지는 않았는지 자동으로 테스트까지 수행되야한다.(테스트 자동화)
    2. 메인 레포지토리에 머지를 수행하면 CI Script를 통해 메인 레포지토리가 빌드가 되고, 빌드가 잘 된다면 개발자가 작성한 통합 테스트, 단위 테스트 등 여러가지 테스트 코드도 실행이 된다.
    3. 빌드와 테스트 중 실패한다면, 머지한 개발자에게 자동으로 알려준다

CI를 통해 얻어가는 장점

  1. 주기적으로 머지를 하기때문에 머지 충돌을 피할 수 있다
  2. 머지되는 모든 코드들은 자동으로 빌드되고 테스트되기 때문에 코드의 문제를 빠르게 발견할 수 있다
  3. 주기적으로 머지를 하기 위해 코드의 변경사항이 작기 때문에 코드에 문제가 발생해도 해결하는 시간이 짧아진다
  4. 코드의 퀄리티가 향상된다
    1. CI를 잘 운영 하기 위해서는 테스트 코드 작성이 필수적이기 때문이다(자동으로 테스트되도록 만들어야 하기 때문)

CD / 지속적인 배포(Continuous Delivery or Continuous Deployment)

CI 과정에서 테스트까지 완료한다면 배포하는 단계에서 릴리즈할 준비과정을 거치고

준비된 릴리즈가 정상적인지 검증을 하면 사용자에게 배포하게 되는데, 수동적으로 배포하는 단계를 지속적인 제공(Continuous Delivery)이라고 하고, 릴리즈가 준비가 되자마자 자동으로 사용자에게 배포하는 즉, 모든 과정을 자동화 해놓는 것을 지속적인 배포(Continuous Deployment)라고 한다

최종 단계에서 배포를 수동적으로 하는지, 자동적으로 하는지에 따라 Continuous Delivery인지 Continuous Deployment인지 나뉘게 되는것이다.

결론적으로 CI/CD 과정을 정리해보자면

  1. 개발자가 작은 단위로 기능을 나누고 주기적으로 메인 레포지토리에 머지
  2. 자동으로 빌드 및 테스트 수행 성공
  3. 릴리즈 준비
  4. 최종 배포(자동 or 수동)

참고한 사이트

CI/CD 5분 개념 정리 - Youtube

profile
차곡차곡

0개의 댓글