카테고리 없음

CI & CD

sungw00 2023. 5. 16. 03:52
728x90

CI(Continuous Integration) - 지속적 통합

코드 버전 관리를 하는 VCS 시스템(Git, SVN 등)에 PUSH가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정

 

CD(Continuous Deployment) - 지속적인 배포

CI의 빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정

 

일반적으로 CI와 CD는 함께 구축한다. 

 

CI가 생긴 이유

원인

현대 웹 서비스 개발에서는 하나의 프로젝트를 여러 개발자가 함께 개발을 진행하는데, 이 과정에서 각자가 개발한 코드를 합치는 것이 큰 일이었음. 그래서 매주 병합일(코드 Merge만 하는 날)을 정해 이 날은 각자가 개발한 코드를 합치는 일만 진행했음.

 

개선

이런 수작업 때문에 생산성도 낮았고, 개발자들은 지속해서 코드가 통합되는 환경(CI)을 구축하게 됨.

 

결과

개발자 각자가 원격 저장소(깃허브나 깃랩 등)로 푸시가 될 때마다 코드를 병합하고, 테스트 코드와 빌드를 수행하면서 자동으로 코드가 통합되어 더는 수동으로 코드를 통합할 필요가 없어지면서 자연스레 개발자들 역시 개발에만 집중할 수 있게 됨

 

CD가 생긴 이유

한두 대의 서버에 개발자가 수동으로 배포를 할 수 있지만, 수십 대 수백 대의 서버에 배포를 해야 하거나 긴박하게 당장 배포를 해야 하는 경우에는 수동으로 배포할 수 없음.

 

개선

이 역시 자동화하게 됨

 

결과

개발자들이 개발에만 집중할 수 있게 됨

 

CI 도구를 도입했다고 해서 CI를 하고 있는 것은 아니다. 마틴 파울러는 다음과 같은 4가지 규칙을 이야기했다.

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

 

여기서 특히나 중요한 것은 테스팅 자동화인데, 지속적으로 통합하기 위해서는 무엇보다 이 프로젝트가 완전한 상태임을 보장하기 위해 테스트 코드가 구현되어 있어야만 한다.

728x90