[CI/CD] CI/CD란?

보라보라·2024년 3월 4일
0

개발 다했다!! 이제 배포하자!!
근데?! 왜 로컬에서 잘 돌아가던 것이 서버에서는 동작이 잘 안하는 것일까...?
또!! 내가 모르고 잘못하고 버그가 있는 코드를 git에 올려버렸단 말이다? 그걸 모르고 배포해서... 버그도 못찾고 원인도 모르는 경우도 있다.
근데 이 배포과정 계속 반복되는데 안그래도 실패 떠서 울상인데...
이거 개발자는 반복하는거 못참즤!!!!!!
그래서 나온 것이 CI/CD라는 것이다!

1. CI/CD 정의

CI(Continuous Integration)

  • 지속적 통합
  • 개발을 진행하면서도 품질을 관리 할 수 있도록 하는 것
  • 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리
    • CI를 적용하게 되면 각자의 개발자가 자신이 구현해야할 기능을 구현한다.
    • 이후 완성이 되면 main 브랜치와 병합하려고 할 것이다. 그때 코드가 잘 빌드되는지 보고, 올바르게 동작하는지 테스트하며 코드에 버그가 있다면 해결한다.
    • 이를 자동화하면 개발자가 빌드와 테스트를 직접 하지 않고도 수정한 코드를 브랜치에 병합하기만 하면 자동으로 빌드와 테스트를 검증할 수 있다.
    • 개발자가 단위별로 구현한 부분을 병합할 때마다 자동화된 빌드와 테스트가 트리거되어 실행된다. 결과를 통해 어떤 부분에서 문제가 있는지 배포 전에 버그를 빠르고 정확하게 확인하여 해결 할 수 있다.
  • 그 결과로 소프트웨어 품질을 개선하고 새로운 소프트웨어 업데이트를 검증하고 릴리즈하는데에 걸리는 시간을 단축할 수 있다.
  • CI 진행 순서
    1. 개발자가 구현한 코드를 기존 코드와 병합한다.
    2. 병합된 코드가 올바르게 동작하고 빌드되는지 검증한다.
    3. 테스트 결과에 문제가 있따면 수정하고 다시 1로 돌아간다. 문제가 없다면 배포를 진행한다.

용어

빌드
소스코드 파일을 컴퓨터에서 실행할 수 있는 소프트웨어 산출물로 만드는 과정
java에서는 maven, gradle과 같은 빌드 도구를 이용하여 컴파일과 함께 소스코드 파일(.jar, .war)와 같은 산출물로 변환


배포
빌드의 결과물을 사용자가 접근할 수 있는 환경에 배치하는 것

마틴 파울러가 제시하는 CI의 4가지 규칙

  • 모든 소스코드가 살아 있고 누구든 현재의 소스에 접근할 수 있는 단일 지점을 유지할 것
  • 빌드 프로세스를 자동화해서 누구든 소스로부터 시스템을 빌드할 수 있게 할 것
  • 테스팅을 자동화해서 언제든지 시스템에 대한 건전한 테스트 수트를 실행할 수 있게 할 것
  • 누구든 현재 실행 파일을 얻으면 지금까지 가장 완전한 실행 파일을 얻었다는 확신을 하게 할 것

CD(Continuous Deployment)

  • 지속적 배포
  • 지속적 제공(Continuous Delivery)로 사용되기도 한다.
  • 지속적 제공은 CI를 통해서 새로운 소스코드의 빌드와 테스트 병합까지 성공적으로 진행되었다면, 빌드와 테스트를 거쳐 github와 같은 저장소로 업로드 하는것을 의미
  • 지속적 배포는 이렇게 성공적으로 병합된 내역을 저장소뿐만 아니라 사용자가 사용할 수 있는 배포환경까지 릴리즈 하는 것을 의미
  • 즉, 빌드의 결과물을 프로덕션으로 릴리스 하는 작업을 자동화 하는 것

CI/CD흐름

  • 이 그림을 보면 CD는 CI의 연장선에 있는 개념
  • 빌드 결과물이 만들어지면 배포 환경에 소프트웨어 결과물을 Deploy한 것 까지 포함

CI/CD tool


CI/CD는 개발하고 있는 소프트웨어의 품질 개선을 위해 빌드 -> 배포 과정을 자동화 하는 과정이라고 볼 수 있다.
개발자는 개발에 더 집중할 수 있고, 배포되는 환경에서의 버그도 더 빠르게 찾을 수 있다.
나도 이번 프로젝트에 한번 적용해봐야겠다.
다음 글에서는 Jenkins 서버를 구축하고 CI/CD를 적용해보겠다.


[출처]

profile
쉽게쓰려고 노력하는 블로그

0개의 댓글