본문 바로가기

IT개발정보

CI/CD (지속적인 통합과 배포)

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

 

CI 개요

  • 여러 개발자가 작성하거나 수정한 소스를 지속적으로 빌드, 통합하고 테스트
  • 개발, 통합, 배포, 릴리즈, 테스트를 자동화하여 지속적으로 배포
  • 개발자는 자신이 개발한 소프트웨어의 소스코드를 공통된 버전 관리시스템(github 등)에 저장합니다.
    소스코드상에 변동이 생기면 버전 관리 시스템에서는 CI 툴 (Jenkins)로 소스코드 변경을 알립니다.
    CI툴에서는 변경된 소스코드를 대상으로 Build, Test, Merge를 진행합니다. 이 과정들이 완료되면 슬랙, 카카오톡, 메일 등을 통해 통합 결과를 알립니다. 

파이프라인 Pipe Line (흐름을 얘기함)

현대적인 애플리케이션 개발에서는 여러 개발자들이 동일한 애플리케이션의 각기 다른 기능을 동시에 작업할 수 있도록 하는 것을 목표로 합니다. 그러나 조직에서 특정한 날("병합의 날(merge day)")을 정해 모든 분기 소스 코드를 병합하는 경우, 결과적으로 반복적인 수작업에 많은 시간을 소모하게 됩니다.

이렇게 반복적인 수작업을 하는 이유는 독립적으로 작업하는 개발자가 애플리케이션에 변경 사항을 적용할 때 다른 개발자가 동시에 적용하는 변경 사항과 충돌할 가능성이 있기 때문입니다. 이는 팀이 하나의 클라우드기반 통합 개발 환경(Integrated Development Environment, IDE)사용에 동의하는 대신 각 개발자가 각자의 로컬 IDE를 커스터마이징하는 경우 더욱 복합적인 문제가 될 수 있습니다.

CI(지속적 통합)를 통해 개발자들은 코드 변경 사항을 공유 브랜치 또는 "트렁크"로 다시 병합하는 작업을 더욱 수월하게 자주 수행할 수 있습니다. 개발자가 애플리케이션에 적용한 변경 사항이 병합되면 이러한 변경 사항이 애플리케이션을 손상시키지 않도록 자동으로 애플리케이션을 구축하고 각기 다른 레벨의 자동화된 테스트(일반적으로 단위 테스트 및 통합 테스트) 실행을 통해 변경 사항이 애플리케이션에 제대로 적용되었는지를 확인합니다.

다시 말해, 클래스와 기능에서부터 전체 애플리케이션을 구성하는 서로 다른 모듈에 이르기까지 모든 것에 대한 테스트를 수행합니다. 자동화된 테스트에서 기존 코드와 신규 코드 간의 충돌이 발견되면 CI를 통해 이러한 버그를 더욱 빠르게 자주 수정할 수 있습니다.

 

CI tools

  • Jenkins
  • Github Action

 

CI 의 장점

  • 개발의 편의성이 증가합니다.
  • 변경된 코드에 대한 즉각적 피드백과 검증이 가능합니다.
  • 소스코드의 통합과 검증에 들어가는 시간 단축합니다.

 

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

 

CD 개요

  • 사용자에게 제품을 서비스 지속적 배포
CI/CD 파이프라인의 마지막 단계는 지속적 배포입니다. 프로덕션 준비가 완료된 빌드를 코드 리포지토리에 자동으로 릴리스하는 지속적 제공의 확장된 형태인 지속적 배포는 애플리케이션을 프로덕션으로 릴리스하는 작업을 자동화합니다. 프로덕션 이전의 파이프라인 단계에는 수동 작업 과정이 없으므로, 지속적 배포가 제대로 이루어지려면 테스트 자동화가 제대로 설계되어 있어야 합니다.

실제 사례에서 지속적 배포란 개발자가 애플리케이션에 변경 사항을 작성한 후 몇 분 이내에 클라우드 애플리케이션을 자동으로 실행할 수 있는 것을 의미합니다(자동화된 테스트를 통과한 것으로 간주). 이를 통해 사용자 피드백을 지속적으로 수신하고 통합하는 일이 훨씬 수월해집니다. 이러한 모든 CI/CD 적용 사례는 애플리케이션 배포의 위험성을 줄여주므로 애플리케이션 변경 사항을 한 번에 모두 릴리스하지 않고 작은 조각으로 세분화하여 더욱 손쉽게 릴리스할 수 있습니다. 그러나 자동화된 테스트는 CI/CD 파이프라인의 여러 테스트 및 릴리스 단계를 수행할 수 있어야 하기 때문에 많은 선행 투자가 필요합니다.

 

 

 

JenKins

  • Java Runtime enviroment 에서 동작
  • 다양한 플러그인들을 활용하여 각종 자동하 작업 처리
  • 일련의 자동화 작업의 순서들의 집합인 PipeLine을 활용

 

개발 프로세스

  • 개발자가 자신의 PC에 개발 진행
  • 다른 개발자가 작성한 코드와 차이가 발생하지 않는지 내부 테스트
  • 진행한 내용을 다른 개발자들과 공유하기 위해 Git (흔히 dev 브랜치)
  • Dev 브랜치의 내용을 개발 환경에 배포하기전 테스트 코드 포맷팅
  • 배포하기 위해 빌드
  • 코드 배포
  • 테스트 진행
  • 위 모든 과정을 DEV, QA, PROD 환경 진행후 배포

 

관련강의

 

젠킨스 
https://www.youtube.com/watch?v=JPDKLgX5bRg

 

CI/CD
https://www.youtube.com/watch?v=0Emq5FypiMM 

 

 

 

References

https://deveric.tistory.com/106

https://www.redhat.com/ko/topics/devops/what-is-ci-cd

 

'IT개발정보' 카테고리의 다른 글

STS ERROR list  (0) 2023.02.03
Jenkins 알아보기  (0) 2023.02.03
맨먼스(Man/Month), 맨데이(Man/Day)  (0) 2023.02.03
Git , Git Hub  (0) 2022.09.25
(Docker) 도커 알아보기 1  (0) 2022.09.22