간단하게 정리한 파이프라인 구축 프로세스화

this-is-spear·2023년 4월 6일
1

Intro

계기

대규모 시스템 설계 기초를 읽게 되면서 `여러 데이터 센터를 사용하도록 시스템이 구성된 상황이라면 여러 위치에서 테스트해보는 것이 좋다` 라는 글을 읽고 모호하다는 생각이 들어서 글을 정리하게 됐습니다.

정리 내용

일반적인 배포 과정은 Alpha, Beta and Gamma 테스트를 지나 프로덕션 환경에 배포 과정을 거치게 됩니다.

일반적인 상황에서는 Alpha, Beta and Gamma 테스트를 QA팀이나 테스터를 통해 검증 과정을 거치지만, 최근에는 배포 과정에서 걸리는 시간을 단축하기 위해 파이프라인을 통해 검증 과정을 동작하고 있습니다.

그래서 Alpha, Beta and Gamma 테스트를 간단하게 소개해보고 파이프라인 내부에서 Alpha, Beta and Gamma 테스트를 진행하는 과정을 설명해보도록 하겠습니다.

목차

  • Alpha, Beta and Gamma
  • Alpha, Beta and Gamma with Pipeline

Alpha, Beta and Gamma

일반적인 배포 과정은 다음과 같습니다. Alpha Test에서는 사내 개발 또는 QA 팀이 수행하는 내부 검사이며 드물게는 고객이 직접 수행하는 방식으로 진행이 되며 Beta Test에서는 프로덕션과 비슷한 환경을 구성한 다음, 베타 테스터를 통해 진행됩니다. 마지막으로 Ganna Test에서는 프로덕션과 비슷한 환경을 구성한 다음, 일정 수의 사용자들에 의해 진행됩니다.

  • Alpha - 기능 테스트 진행
  • Beta - 물리적인 리소스와의 호환성 확인 테스트
  • Ganna - 실제 상황 테스트

참고자료 : [Difference Between Alpha, Beta, and Gamma Testing](Difference Between Alpha, Beta, and Gamma Testing – QATestLab
https://qatestlab.com/resources/knowledge-center/alpha-beta-gamma/)

Alpha, Beta and Gamma with Pipeline

파이프라인이란?
명령에 우선순위를 지정해 프로세스화를 한 것을 의미한다.

CICD 파이프라인
자동화를 통해 소프트웨어 개발 수명 주기 전반에 걸쳐 소프트웨어 제공을 개선하는 데 중점을 둔 방법입니다

아마존의 파이프라인 4 단계

Amazon에서는 파이프라인을 통해 프로덕션 환경에 배포되는 과정을 단계적으로 분할해 관리하고 있습니다.

참고자료 : automating-safe-hands-off-deployments

독립적으로 수행할 수 있는 단위로 분할해서 관리하게 되면 수정 범위를 줄일 수 있고, 분업이 가능하다는 장점이 생길 수 있기 때문에 4 단계로 나눠서 관리한다고 볼 수 있습니다.

여러 위치에서 테스트하는 과정에 집중하기 위해 테스트 단계만 작성했고, 테스트 단계 별로 선택할 수 있는 기술 중 일부만 정리했습니다.

테스트 단계

프로덕션 환경에 배포하기 전 테스트 범위와 환경 구성을 달리해 검증을 진행합니다. 처음 단계인 Alpha는 수정된 코드가 예상대로 동작하는지 검증하고, 마지막 단계인 Gamma 단계에서는 프로덕션 환경과 가깝게 구성해 검증하게 됩니다.

참고자료 : automating-safe-hands-off-deployments

Alpha 및 Beta

  • API 테스트 및 E2E 테스트를 통해 최신 코드가 예상대로 작동하는지 검증
  • Alpha - Functional Tests 진행
  • Beta - Integration Tests 진행

Alpha - Functional Tests

  • Functional Tests은 기능 요구 사항에 대해 소프트웨어 시스템을 검증하는 소프트웨어 테스트 유형입니다.
  • Functional Tests의 목적은 적절한 입력을 제공하고 기능 요구 사항에 대해 출력을 확인해 각 기능을 테스트하는 것입니다.

Beta - Integration Tests

  • Integration Tests는 소프트웨어 모듈이 논리적으로 통합되어 그룹 단위로 테스트하는 유형입니다.
  • Integration Tests의 목적은 소프트웨어 모듈간 상호 작용에서 결합을 노출하는 것입니다.

Gamma

  • 최대한 프로덕션 환경에 가깝게 구성해 테스트하며 프로덕션 환경에 안전하게 배포할 수 있는지 검증
  • 지역별 차이로 인해 발생할 수 있는 잠재적 영향을 포착하기 위해 여러 지역에 배포

Gamma - Rolling Deployment

  • 사용 중인 인스턴스 내에서 새 버전을 점진적으로 교체하는 방법입니다.
  • 인스턴스를 차례로 배포하기 때문에 손쉽게 롤백이 가능한 장점이 있다.

Gamma - Canary Testing

  • Canary Testing는 프로덕션 환경에서 실제 사용자와 함께 새 소프트웨어 버전을 테스트하는 것을 의미하며 새로운 버전의 제공 범위를 비율 단위로 조절합니다.

Gamma 과정에서는 Deployment 과정까지 포함되기 때문에 Deployment 과정을 조금 정리했습니다.

Deployment

무중단 배포는 제한된 자원에서 하나씩 변경하는 롤링 배포 방식과 현재 사용중인 버전의 인스턴스 수만큼 스위칭하는 블루-그린 배포 방식이 있습니다.

참고 자료 : 무중단 배포 아키텍처(Zero Downtime Deployment)

큰 차이점은 롤링 배포 방식에서는 변경할 때, 기존 인스턴스를 종료하고 배포되기 때문에 남은 서버에 받는 부하가 늘어나게 되고, 블루-그린 배포 방식은 위와 같은 문제가 없지만, 배포할 때 추가 인스턴스가 필요하다는 차이가 있습니다.

Outro

정리하자면

  • Amazon에서는 파이프라인 과정을 4 단계로 분할해 배포 과정을 거친다.
  • 파이프라인의 테스트 과정을 Alpha-Beta-Gamma 순으로 테스트 범위, 환경을 달리해 테스트를 진행한다.

마지막으로

Alpha-Beta-Gamma 순으로 테스트를 진행하며 지역별로 달리해 안정적으로 배포할 수 있습니다. 이러한 과정으로 인해 리소스가 많이 소모될 수 있는데, 자동화 과정을 통해 리소스를 줄일 수 있습니다.

profile
익숙함을 경계하자

0개의 댓글