CI/CD에 대해 알아보자

이호인·2022년 2월 22일
0

프로젝트

목록 보기
1/6

📌 CI/CD란?

  • 어플리케이션 개발 단계부터 배포 단계까지 이 모든 단계들을 자동화를 통해서 조금 더 효율적이고 빠르게 사용자에게 빈번이, 보다 짧은 주기로 고객에게 제공할 수 있도록 만드는 것을 말한다.

CI/CD 장점

  • 시장 출시 기간 단축
  • 위험 감소
  • 검토 시간 단축
  • 코드 품질 개선
  • 프로덕션 환경으로 원활한 전환
  • 더 빠른 버그 수정
  • 효율적인 인프라
  • 진행 상황에 대한 평가 가능
  • 더 긴밀한 피드백 루프
  • 협업 및 커뮤니케이션

📌 CI : 지속적인 통합 (Continuous Integration)

  • 어플리케이션의 버그 수정이나 새로운 코드 변경이 main repository에 주기적으로 빌드 및 테스트 되어 통합 (merge) 되는 것을 말한다.

CI 중요 사항 두 가지

  1. 코드 변경 사항을 주기적으로, 빈번하게 merge 해야한다.

    • 여러 명의 개발자가 프로젝트를 진행하고 있고, 형상관리 툴 (git, svn 등)을 사용하고 있다고 가정하자.
    • 여러 개발자들이 코드 변경 사항을 빈번하게 merge하지 않고 각자 오랜 시간 변경한 사항을 한번에 merge 하려한다면 통합, 적용하는데 어려움이 있다.
    • 충돌나는 코드들이 발생할 확률이 높고, 새로운 기능의 코드를 작성하는 것보다 충돌하는 코드들을 수정하는데 더 많은 시간을 쏟을 수 있어 비효율적이다.
    • 때문에 가능한 작은 단위로 나누어 주기적으로, 빈번이 개발하여 계속 통합해 나가는 것이 중요하다.
👉 CI 흐름
1. 코드 변경 사항을 계속해서 github 등 관리 시스템에 통합한다.
2. 통한한 코드가 제대로 동작하는지 build, test를 진행한다.
3. 버그 등 문제 발생 시 다음에 처리할 목록에 정리하고 해결한다.
  1. 통합을 위한 단계 (build, test, merge)의 자동화

    • 위 단계에서 build와 test 하는 과정은 굳이 사람이 하지 않아도 되는 작업이다.
    • 주기적으로 merge 된 코드의 변경 사항이 자동으로 build가 되어 코드 변경 사항 이후에도 build가 성공적으로 되었는지 확인이 되어야한다.
    • 또 새로 추가된 이 코드의 변경 사항 뿐만 아니라 기존 시스템에 다른 버그를 초래하지 않았는지 자동으로 테스트까지 되어야한다.
    • 보통 개발 팀에서 개발자들은 하루에도 몇 번씩 주기적으로 변경 사항을 코드 리뷰를 통해 적절한지 확인을 받고 merge를 한다.
    • merge가 되었으면 자동으로 팀에서 만든 CI Script를 통해 추가된 코드와 함께 build가 잘 되었다면, 팀에서 작성한 Unit 테스트 등 여러가지 테스트들도 Script를 통해서 실행이 된다.
      - green : 무사히 통과가 되어 나중에 배포할 때 반영 가능
      - red : 문제를 일으킨 개발자에게 자동으로 알려준다.
👉 장점

✔ 개발 편의성이 증가한다.

✔ 주기적으로 merge를 하기 때문에 충돌을 피할 수 있어 개발의 생산성을 높일 수 있다.

✔ 모든 코드들은 자동으로 build되고 test 되기 때문에 코드의 결함이나 문제점이 빠르게 발견될 수 있다.

✔ 주기적으로 merge를 하기에 코드 변경 사항이 빈번하기 때문에 문제를 수정할 때도
좀 더 고립된, 작은 단위의 문제를 확인할 수 있다.

✔ 코드 검증에 들어가는 시간이 줄어든다.

✔ 항상 테스트 코드를 통과한 코드만이 repository에 올라가기 때문에 좋은 코드 퀄리티를 유지할 수 있다.

📌 CD : 지속적인 제공 or 지속적인 배포 (Continuous Delivery/Deployment)


  • CD는 지속적인 제공(Continuous Delivery)는 의미와 지속적인 배포(Continuous Deployment)라는 의미가 있다.


    ✔ CI에서 Build되고 Test된 후에, 배포 단계에 왔을 때 prepare release, 최종배포의 자동화 선택에 따라 나뉜다.

  1. 지속적인 제공 (Continuous Delivery)

    • release할 준비 단계를 거치고 문제가 있는지, 수정할 사항이 있는지 개발자와 검증팀이 검증을 한다.
    • 사용자에게 배포해도 된다는 결론이 나왔을 때, 배포를 수동적으로 진행하는 것을 말한다.
    • 간단한 코드 변경이 정기적으로 마스터에 커밋되고, 자동화된 빌드 및 테스트 프로세스를 거치며 다양한 사전 프로덕션 환경으로 승격되며, 문제가 발견되지 않았을 때 최종적으로 배포한다.
  2. 지속적인 배포(Continuous Deployment)

    • 배포 단계에서 배포할 준비가 되자마자 자동화를 통해 배포를 진행하는 것을 지속적인 배포라고 한다.
    • 코드 변경이 파이프 라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포된다.
    • 지속적 배포를 채택하면 품질의 저하 없이 최대한 빠르게 사용자에게 새로운 기능을 제공할 수 있게 된다.
👉 CD 흐름

✔ CI를 적용하여 코드를 검증한다.

✔ 배포 환경과 비슷한 곳에서 검증을 진행한다.

✔ 검증된 소프트웨어를 실제 프로덕션 환경으로 배포한다.

📌 마무리

👉 CI/CD는 어느 정도 자동화를 하느냐에 따라 모두 같은 것이 아니라 팀, 회사마다 조금씩 다를 수 있다.

profile
공부 기록

0개의 댓글