피처 플래그 한계 극복! 코드처럼 관리되는 원격 설정 시스템
기존 피처 플래그(Feature Flag) 시스템은 수천 개 레스토랑의 복잡한 설정 관리에 한계가 있었음
코드처럼 관리되는 원격 설정 시스템을 재구축하여 버전 관리, CI 검증, 실시간 배포 기능 강화
팀은 이제 예외 기반 설정 관리로 실시간 변경을 안전하게 배포하고 운영 제어력을 높임
피처 플래그(Feature Flag)의 한계점
기존 피처 플래그(Feature Flag) 플랫폼은 토글(Toggle) 및 타겟팅 규칙(Targeting Rule) 중심의 기능만 제공하여, 레스토랑별 복잡한 계층 구조 설정이나 실시간 배포 요구사항을 충족시키기 어려웠다.
구조화된 설정(Structured Configuration) 관리의 어려움: 계층적 기본값(Hierarchical Defaults), 레스토랑별 재정의(Per-restaurant Overrides) 등을 적용하기 위한 불편한 우회 방법(Awkward Workarounds) 발생
운영 비용 증가(Increased Operational Cost): 단순 변경에도 추가적인 운영 단계가 필요하여 일상적인 변경(Routine Changes)의 복잡성 증대
결과적으로, 문제의 본질과 맞지 않는 도구를 사용하면서 마찰(Friction)과 비효율(Inefficiency)이 발생했다.
코드형(Code-like) 원격 설정 시스템 아키텍처
새로운 시스템은 설정을 프로덕션 코드(Production Code)와 동일한 수준의 엄격함으로 관리한다. 설정 변경은 풀 리퀘스트(Pull Request)를 통해 버전 관리되며, CI 단계에서 자동화된 검증(Automated Validation)을 거친다.
실시간 문서 저장소(Real-time Document Store): 승인된 설정은 클라우드 기반 저장소에 게시되고, 실행 중인 서비스는 재배포(Redeploy) 없이 실시간으로 업데이트를 구독(Subscribe)한다.
데이터 모델(Data Model): 레스토랑 그룹별 기본 설정(Default Configuration)을 정의하고, 특정 레스토랑에 대해서만 재정의(Override)를 적용하는 상속(Inheritance) 기반 모델을 채택하여 예외 기반 관리(Management by Exception)를 가능하게 함.
변경 사항 적용: 서비스는 초기 설정을 로드한 후 지속적인 리스너(Listener)를 통해 업데이트를 감지하고, 변경된 부분만 실시간으로 병합(Merge) 및 적용한다.
설정 변경의 버전 관리 및 안전한 배포
설정 변경의 안전성과 제어력을 높이기 위해 세 가지 수준의 버전 관리를 도입했다.
리포지토리 버전 관리(Repository Versioning): 커밋(Commit) 및 풀 리퀘스트(Pull Request) 기록을 통해 각 환경별 변경 이력을 불변(Immutable)하게 추적한다.
계약 버전 관리(Contract Versioning): 점진적 변경(Additive-first Changes)과 명시적인 키 마이그레이션 패턴을 사용하여, 전환 과정에서 소비자(Consumer)와의 호환성을 유지한다.
롤아웃 버전 관리(Rollout Versioning): 개발(Dev) → QA → 프로덕션(Prod)으로 이어지는 검증 체크포인트(Verification Checkpoints)를 거쳐 배포를 관리하며, 이는 구조적뿐만 아니라 운영 측면에서도 버전화된 접근을 보장한다.
이러한 다층적 버전 관리는 실시간 변경(Real-time Changes)의 안전한 배포를 가능하게 한다.
상속 기반 데이터 모델의 이점
새로운 설정 시스템의 핵심은 상속(Inheritance)을 중심으로 설계된 데이터 모델이다. 이를 통해 설정 중복(Duplication)을 최소화하고 효율적인 관리를 가능하게 한다.
그룹 기본값(Group Defaults): 특정 그룹에 속한 모든 레스토랑에 적용될 기본 설정을 정의한다.
레스토랑별 재정의(Restaurant-specific Overrides): 필요한 경우, 개별 레스토랑에만 적용될 설정을 추가하여 기본값을 재정의한다.
최상위 병합(Top-level Merge): 재정의는 최상위 레벨에서만 이루어지며, 예를 들어 'Alerts' 섹션 전체가 대체되므로 값의 우선순위(Value Precedence)가 명확하다.
이 모델은 예외 기반 관리(Management by Exception)를 가능하게 하여, 모든 레스토랑의 설정을 일일이 관리할 필요 없이 필요한 부분만 수정하면 되므로 운영 효율성이 크게 향상된다.
실시간 업데이트 및 재배포 없는 변경 적용
서비스 시작 시 초기 설정을 로드하고, 실시간 문서 저장소(Real-time Document Store)에 대한 지속적인 리스너(Persistent Listener)를 유지한다. 설정 변경이 발생하면 시스템은 업데이트를 푸시(Push)하고, 상속된 데이터를 병합한 후 변경된 부분만 차등적으로(Diff-based) 적용한다.
서비스 재시작 불필요(No Restarts Needed): 운영자는 임계값(Threshold)이나 지역별 규칙(Location-specific Rule)을 조정하기 위해 단순히 서비스를 재배포할 필요가 없다.
폴링(Polling) 최소화: 서비스는 문서 존재 여부 변경(예: 매핑 문서 생성/삭제)만 폴링하여 리소스 사용량(Resource Usage)을 최적화한다.
이러한 실시간 업데이트 메커니즘은 운영의 민첩성(Operational Agility)을 크게 향상시킨다.