학습에 앞선 선행 용어 정리
컴파일
- 프로그래머가 작성한 소스코드를 기계어로 변환하는 과정
빌드
- 소스 코드 파일을 컴퓨터에서 실행할 수 있는 소프트웨어 산출물로 만드는 과정
배포
- 빌드의 결과물을 사용자가 접근할 수 있는 환경에 배치하는 것
비유*
영문판 책을 서점에 개재한다 (영어로 된 글을 한국어로 변환한다 ➡︎ 변환된 글을 책으로 엮는다 ➡︎ 이를 서점에 배치한다)
CI (Continuous Integration)
개발을 진행하면서도 품질을 관리할 수 있도록 여러 명이 하나의 코드에 대해서 수정을 진행해도 지속적으로 통합하면서 관리함으로써, 통합 시마다 자동으로 빌드하고 테스트하여 문제를 조기에 발견하고자 하는 Extreme Programming(XP) 방법론 중 하나
CI의 한계
테스트를 마치고 배포할 서버가 증가할 경우, 각 서버마다 배포를 일일히 해야 하는 문제 발생➡︎ CD를 통한 배포 자동화
CD (Continuous Delivery)
reposityory에 자동으로 릴리즈 되게 하여 언제든지 배포될 준비가 된 상태를 유지하는 것 ( 프로덕션 배포 자동 X)
CD (Continuous Deployment)
CI의 연장선 개념으로 빌드의 결과물을 프로덕션으로 배포 하는 작업을 자동화하는 것
그래서 CI/CD가 왜 필요한가?
코드의 빌드, 테스트, 병합과정을 거쳐 배포에 이르기까지 체계적이고 자동화된 빌드와 테스트 과정을 통해 버그나 오류의 유무를 조기에 발견하고 수정할 수 있다. 이는 배포의 속도 및 안정성을 향상시킨다.
대표적인 CI/CD tool
- Jenkins
- GitLab CI/CD
- Travis CI
무중단 배포 (Zero Downtime Deployment)
애플리케이션을 업데이트 하거나 새 버전을 배포하는 동안에도 서비스 중단 없이 사용자에게 서비스를 제공하는 배포 방법
배포 방법
1. 롤링 배포
서버 그룹을 점진적으로 업데이트하여 배포하는 방법으로 한 번에 한 대의 서버 혹은 소규모 서버 그룹을 업데이트
서버 그룹 중 일부를 선택하여 새로운 버전의 애플리케이션 배포 후 모니터링 이상 없을 시 다음 서버 업데이트 함
장점
- 전체 시스템의 가용성 유지 가능
- 인스턴스를 추가하지 않아도 되어 관리가 간편함
단점
- 사용 중인 인스턴스에 트래픽이 몰릴 가능성
- 이전 버전과 신버전과의 공존으로 인한 호환성 문제
2. 블루 - 그린 배포
블루(이전 버전)와 그린(새로운 버전)을 사용한 배포 방법으로 한 환경을 운영하면서, 이와 다른 환경으로 새로운 버전의 어플리케이션을 배포하고 테스트 한 뒤, 테스트 성공 시 그린 환경으로 트래픽을 옮김. 기존 블루 환경의 경우 다음 배포를 위해 준비함.
장점
- 배포 속도가 빠름
- 롤백이 쉬움
- 남은 버전의 환경을 다음 배포에 재사용 가능
단점
- 시스템 자원 유지 비용이 2배로 증가함
3. 카나리 배포
새로운 버전의 어플리케이션을 소수의 사용자에게만 배포하여 테스트하는 방법으로 롤링 배포와 달리, 문제가 발생하지 않을 시 배포 범위를 늘림
장점
- 초기 배포 리스크 감소로 인한 문제 발생 시 영향을 받는 사용자의 수가 적음
단점
- 배포 및 모니터링 과정이 복잡할 수 있음
- 이전 버전과의 호환성 문제 발생 가
출처
CI/CD(CI CD, 지속적 통합/지속적 배포): 개념, 툴, 구축, 차이
CI/CD는 애플리케이션의 통합 및 테스트 단계부터 제공 및 배포까지 애플리케이션 라이프사이클 전체에서 지속적인 자동화와 지속적인 모니터링을 제공하는 것을 뜻합니다.
www.redhat.com
https://engineering.linecorp.com/ko/blog/build-a-continuous-cicd-environment-based-on-data
데이터 기반으로 지속적인 CI/CD 개선 환경 만들기
들어가며 지난 1993년에 개봉했던 사랑의 블랙홀이라는 영화를 기억하시나요? 남자 주인공이 2월 2일 성촉절(Groundhog Day, 미국에서 마멋이 겨울잠에서 깨어난다고 여기는 날) 하루를 끊임없이
engineering.linecorp.com
'Server' 카테고리의 다른 글
도커(Docker)에 대하여 (0) | 2024.06.22 |
---|---|
RESTful API에 대하여 (0) | 2024.06.10 |
JPA와 MyBatis (ORM, SQL Mapper)에 대하여 (0) | 2024.06.09 |
Stateful과 Stateless (0) | 2024.05.19 |
java.lang.IndexOutOfBoundsException (MyBatis) (0) | 2024.05.18 |