java 배우기/TIL

CI/CD란

checkuu 2024. 10. 2. 09:58

CI/CD

Continuous Integration / Continuous Deployment(Delivery)의 약자로, 지속적인 통합과 지속적인 제공을 의미

  • 지속적인 통합(Continuous Integration) : 코드의 지속적인 통합
  • 자동화된 빌드와 자동화된 테스트를 제공
  • 안정적인 코드를 빠르게 제공할 수 있는 밑거름
  • 지속적인 서비스 제공(Continuous Delivery)
  • 지속적인 배포(Continuous Deployment)
  • 배포를 자동화하여 배포 시간을 단축하고 코드 결과물을 빠르게 지속적으로 제공

단계

-. 코드 작성: 개발자들은 소스 코드를 작성하고 저장소(repository)에 업로드

-. 빌드: 저장소에서 최신 소스 코드를 가져와 빌드를 수행. 빌드는 소스 코드를 컴파일하고, 라이브러리를 추가하고, 필요한 파일을 생성하는 과정.

-. 테스트: 빌드된 결과물을 대상으로 테스트를 수행. 테스트는 기능이 정상적으로 작동하는지 확인하고, 버그를 발견하고 수정하는 과정.

-. 배포: 테스트를 통과한 결과물을 배포. 배포는 서버에 업로드하거나, 사용자에게 제공하는 과정

 

과거의 배포

소프트웨어 개발주기 (SDLC, Software Development Life Cycle) 중 폭포수 개발 방식

오랜 시간동안 구현하고 테스트하여 가끔씩 배포

 

이 과정에서 한 대의 서버에 배포하기 위해 다음과 같은 과정을 n개 서버에 반복

  • 클러스터에서 서버 1 분리
  • 서버 1에서 톰캣 종료
  • 기존 앱 버전(WAR 파일) 제거
  • 새 앱 버전(WAR 파일) 복사
    • ssh 접속 또는 scp 복사
  • 구성 파일의 속성 업데이트
  • 톰캣 시작
  • 클러스터에 서버 1 다시 연결

출시 직후 진행된 프로덕션 테스트에서 아무도 발견하지 못한 버그가 있는 경우,

되돌리거나 빠르게 수정하고 테스트하여 추가 배포하는 과정으로 큰비용이 발생했었다.

 

스크럼으로 대표되는 애자일 개발

  • 특정 주기마다 개발, 테스트 및 프로덕션에 통합된 기능을 출시
  • 이 상황에서 테스트 및 기능 출시에 오랜 기능이 걸리고 “손배포” 를 통해 실패 위험성이 있을 수 있다.
  • Docker를 통해 서버를 표준화하고 같은 환경에서 테스트 및 배포 테스트를 진행하고 이 과정을 자동화
    • 테스트로 검증된 자동화 배포를 사용하여 실패 확률 저하
  • 자동화된 과정으로 지속적으로 코드를 통합하여 지속적으로 자동 배포
  • 컨테이너와 빌드/테스트 도구의 발전에 따라 Docker가 테스트 뿐만 아니라 실제 배포도 담당

'java 배우기 > TIL' 카테고리의 다른 글

date 타입 불일치로 인한 에러  (2) 2024.10.03
포크해온 코드 분리하기  (0) 2024.10.02
aws EC2 instances 삭제  (0) 2024.09.27
프로젝트 KPT 회고  (0) 2024.09.25
포스트맨 JWT 토큰 바로 적용하기  (0) 2024.09.25