시스템 아키텍트DevOps 엔지니어, Backend 개발자

제로 다운타임 배포란 무엇이며 IT 시스템 아키텍처에서 어떻게 구현할 수 있나요?

Hintsage AI 어시스턴트로 면접 통과

답변.

제로 다운타임 배포는 애플리케이션을 중단 없이 업데이트하여 사용자에게 불편함 없이 서비스를 제공하는 실천입니다. 이는 애플리케이션의 구형 인스턴스를 단계적으로 제거하고 신형 인스턴스를 도입함으로써 이루어집니다.

스테이트리스 애플리케이션을 클라우드에서 구현하는 예시 (예: Kubernetes 사용 시):

  1. 이전 인스턴스를 종료하지 않고 새로운 버전의 파드를 배포합니다.
  2. 새로운 인스턴스가 건강한지 확인합니다.
  3. 그 후에만 트래픽을 해당 인스턴스로 전환합니다 (블루-그린/릴리즈 또는 롤링 업데이트).
  4. 새로운 버전이 완전히 확신이 서면 구형 컨테이너를 점진적으로 종료합니다.

롤링 업데이트를 위한 deployment.yaml 예시:

apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 4 strategy: type: RollingUpdate rollingUpdate: maxSurge: 1 maxUnavailable: 1 template: metadata: labels: app: my-app spec: containers: - name: app image: my-app:v2

주요 특징:

  • 스테이트리스 서비스 또는 상태 마이그레이션을 위한 특수 전략이 필요합니다.
  • 종종 롤링 업데이트 또는 블루-그린 배포를 통해 구현됩니다.
  • 데이터베이스 수준에서 제로 다운타임을 위해서는 단계적인 마이그레이션이 필요합니다 (뒤로/앞으로 호환 가능한 스키마).

트릭 질문.

데이터 스키마가 변경될 때 제로 다운타임 배포는 불가능한가요?

가능합니다. 스키마 마이그레이션이 두 단계로 진행된다면: 처음에는 코드가 이전 및 새로운 스키마와 호환되도록 하고, 그 후에 마이그레이션과 레거시 코드 제거가 이루어집니다.

애플리케이션이 스테이트리스라면 제로 다운타임 배포가 항상 보장되나요?

아닙니다! 제한 요인은 외부 상태, 연결 시간 초과, 처리되지 않은 요청 또는 API에서 지원되지 않는 역호환성 변화 등이 될 수 있습니다.

제로 다운타임 배포는 대기업에만 필요하나요?

아닙니다. 작은 스타트업이나 SaaS 솔루션에서도 제로 다운타임은 사용자 경험에 결정적인 요소입니다 (특히 글로벌 마켓과 고부하 상황에서).