공부 기록장

효율적인 소프트웨어 배포를 위한 CI/CD와 DevOps 전략 본문

카카오테크 부트캠프/강의

효율적인 소프트웨어 배포를 위한 CI/CD와 DevOps 전략

빛나무 2024. 8. 3. 15:57

CI/CD

CI/CD(Continusous Integration/Continuous Delivery or Deployment)란?

애플리케이션 개발 단계를 자동화하여, 더욱 짧은 주기로 고객에게 제공하는 방법론

 

지속적 통합(Continusous Integration, CI)

애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐, `자동화된 프로세스`를 통해 공유 리포지토리에 지속적으로 통합되는 것을 의미

 

지속적 제공(Continuous Delivery, CD)

소프트웨어를 항상 배포 가능한 상태로 유지하는 것을 목표로 하는 것을 의미

 

코드 변경사항 통합, 자동화된 테스트, 스테이징 환경까지 자동으로 배포되고,

프로덕션 환경(실제 사용자가 제공되는 환경)으로의 배포는 여전히 수동으로 이루어진다

⇒ 배포의 안정성과 예측 가능성을 보장

 

지속적 배포(Continuous Deployment, CD)

지속적 제공 다음 단계로 모든 코드 변경 사항이 통합, 테스트를 거쳐 `프로덕션 환경으로까지도 자동 배포`되는 것을 의미

 

프로덕션 환경으로의 배포도 자동화되어 있어, 개발자가 코드에 변경을 푸시하면 자동으로 최종 사용자에게 제공

⇒ 민첩성과 빠른 피드백 중시

 

CI/CD의 목표

소프트웨어 개발과 배포 프로세스를 자동화하여

작업 시간을 줄여서 효율성을 높이고, 서비스가 발전하면서 발생하는 변화를 끊임없이 따라가며

지속적인 개선을 통해 높은 품질의 서비스를 사용자에게 신속하게 제공하는 것

 

 

DevOps

DevOps란?

개발(Development)와 운영(Operation)을 결합해 탄생한 개발 방법론으로,

시스템 개발자와 운영을 담당하는 정보기술 전문가 사이의 소통, 협업, 통합 및 자동화를 강조

 

DevOps의 요소

CI/CD를 통한 프로세스적인 내용과 더불어 MSA, IasC 등의 기술적, 커뮤니케이션의 소통의 요소를 가진다

  • 협업과 커뮤니케이션 강화
  • 자동화
  • CI/CD
  • IasC or IaC(Infrastructure as Code)
  • 모니터링과 로깅
  • 문화적 변화

 

배포 환경의 변화

 

① 전통적인 배포 시대

- 애플리케이션을 물리 서버에서 실행

- 하나의 물리 서버에서 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당 문제 발생

- 이에 대한 대안으로, 서로 다른 여러 물리 서버에서 각 애플리케이션 실행

- 이 방식은 리소스가 충분히 활용되지 않는다는 점에서 확장 가능성 ↓

- 또한, 많은 물리 서버를 유지하는데에 높은 비용 발생

 

② 가상화된 배포 시대

- 단일 물리 서버의 CPU에서 여러 가상 시스템(VM)을 실행

- VM간의 애플리케이션 격리를 통해 보안성 강화

- 물리 서버에서의 리소스 보다 효율적으로 활용 가능

- 비용 절감 및 더 나은 확장성 제공

- VM은 가상화된 하드웨어 상에서 자체 운영체제를 포함한 모든 구성 요소를 실행하는 하나의 완전한 머신으로서 작동

 

③ 컨테이너 개발 시대

- VM을 통해 가상화된 배포와 유사하지만, 애플리케이션 간 운영체제 공유로 `격리 속성을 완화`해 더 가볍게 여겨짐

- 컨테이너에는 자체 파일 시스템, CPU 점유율, 프로세스 공간 등이 존재

- 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있다는 장점

 

 

배포 프로세스

일반적인 배포 프로세스

  1. 개발자들이 개발 및 코드 수정
  2. 각자의 feature 브랜치에 코드를 push
  3. 각자의 코드를 git에 올리고 통합
  4. 에러가 발생 시, 각자 디버깅 후 코드 수정
  5. (1) ~ (4) 과정을 반복
  6. 에러 해결 후, 배포 시작

 

CI/CD 자동화가 도입된 프로세스

  1. 개발자들이 개발 및 코드 수정
  2. 각자의 feature 브랜치에 코드 push
  3. CI 서버(Jenkins, Tekton 등)에서 push 명령을 트리거링 하여 자동으로 빌드, 테스트 등을 실행
  4. 에러 발생 시, 개발자에게 결과 전송하여 오류 수정
  5. 빌드, 테스트가 정상적으로 수행되었다면 CD 서버가 자동으로 배포 수행

 

컨테이너 환경에서의 배포 프로세스

빌드 된 어플리케이션을 구동할 수 있는 컨테이너 이미지(애플리케이션과 그 실행 환경을 포함하는 패키지)를 생성하고

이미지 레지스트리에 추가하는 과정 추가

 

 


[참고 자료]

https://tech.osci.kr/cicd-architecture/