대규모 환경에서 동적 (새 탭에서 열림)
에어비앤비(Airbnb)는 대규모 시스템에서 서비스 재시작 없이 런타임 동작을 변경할 수 있는 동적 설정 플랫폼 'Sitar'를 통해 개발의 유연성과 시스템의 안정성을 동시에 확보하고 있습니다. 설정을 코드처럼 관리(Config as Code)하고 단계별 배포 및 로컬 캐싱 전략을 도입함으로써, 설정 오류로 인한 장애 범위를 최소화하고 신속한 사고 대응이 가능한 환경을 구축했습니다. 이를 통해 에어비앤비는 수많은 마이크로서비스 환경에서도 안전하고 신뢰성 있는 설정 변경 프로세스를 운영하고 있습니다.
현대적인 동적 설정 플랫폼의 필수 요건
- 일관된 관리 경험: 설정의 정의, 리뷰, 테스트, 배포에 이르는 전 과정을 통합된 워크플로우로 제공하여 개발자 경험을 개선합니다.
- 설정의 코드화(Config as Code): 모든 설정 변경은 서비스 코드와 마찬가지로 버전 관리, 코드 리뷰, 감사(Audit)가 가능해야 하며, 강력한 접근 제어가 수반되어야 합니다.
- 격리된 환경에서의 테스트: 운영 환경에 적용하기 전, 로컬이나 카나리(Canary) 환경에서 설정을 안전하게 검증할 수 있는 기능을 제공합니다.
- 유연한 멀티테넌트 지원: 서비스별 위험도에 따라 배포 전략(예: AWS 존 단위, 쿠키 단위, 포드 백분율 등)을 다르게 설정할 수 있어야 합니다.
- 신속하고 통제된 사고 대응: 장애 발생 시 긴급 설정을 즉시 배포할 수 있어야 하며, 변경 사항에 대한 높은 관측성(Observability)을 통해 원인을 빠르게 파악하고 롤백할 수 있어야 합니다.
Sitar 플랫폼의 4계층 아키텍처
- 개발자 지향 계층(Developer-facing layer): 기본적으로 Git 기반 워크플로우를 사용하며, 긴급 상황이나 특정 운영 요구사항을 위해 웹 UI(Sitar-portal)를 병행 운영합니다.
- 제어 평면(Control Plane): 설정 변경의 오케스트레이션을 담당하며 스키마 검증, 권한 확인, 배포 범위 및 속도 결정 등 핵심 로직을 실행합니다.
- 데이터 평면(Data Plane): 설정 값의 원천(Source of Truth) 역할을 하며, 대규모 환경에서도 신속하고 일관되게 설정을 배포할 수 있는 확장성 있는 저장소 역할을 수행합니다.
- 에이전트 및 클라이언트(Agents and Clients): 서비스와 함께 실행되는 사이드카 에이전트가 설정을 가져와 로컬에 캐싱하며, 클라이언트 라이브러리는 애플리케이션이 이 설정에 빠르게 접근할 수 있도록 돕습니다.
안정성을 위한 핵심 설계 선택
- Git 기반 워크플로우 활용: GitHub Enterprise와 기존 CI/CD 도구를 재사용하여 코드 리뷰, 승인 절차, 변경 이력 관리 등 검증된 프로세스를 설정 관리에도 동일하게 적용합니다.
- 단계별 배포(Staged Rollouts)와 빠른 롤백: 변경 사항을 한꺼번에 적용하지 않고 범위를 점진적으로 확대하며, 회귀 장애 감지 시 즉시 알림을 보내고 신속하게 이전 상태로 되돌립니다.
- 제어 및 데이터 평면의 분리: '결정'하는 로직과 '전달'하는 메커니즘을 분리하여, 배포 전략을 수정하더라도 실제 데이터 저장 및 배포 인프라에 영향을 주지 않도록 설계했습니다.
- 로컬 캐싱을 통한 회복 탄력성: 사이드카 에이전트가 설정을 로컬에 저장하므로, 백엔드 시스템에 일시적인 장애가 발생하더라도 서비스는 마지막으로 확인된 정상 설정(Last known good config)으로 중단 없이 동작할 수 있습니다.
대규모 시스템에서 동적 설정을 안전하게 운영하기 위해서는 단순한 키-값 저장소를 넘어, 자동화된 스키마 검증, 단계별 배포, 그리고 인프라 장애 시에도 동작할 수 있는 로컬 캐싱 전략이 필수적입니다. 설정을 코드와 동일한 수준의 엄격한 프로세스로 관리할 때, 비로소 유연성과 안정성이라는 두 마리 토끼를 잡을 수 있습니다.