권한 있는 데이터(authoritative data)는 어떤 값이 맞는지 판단할 때 최종 기준으로 삼기로 정한 데이터의 원천이다. 여러 곳에 같은 정보가 있고 값이 서로 다르면 권한 있는 쪽을 따르고, 나머지는 사본으로 다룬다. 데이터 관리에서는 이런 저장 시스템을 기록 시스템(System of Record, SoR)이라 부른다.
사본과 기준
서버 DB = 기준
CDN·브라우저 캐시 = 사본 (만료·무효화 대상)
클라이언트 캐시 = 사본 (다시 가져와 맞춤)
낙관적 UI 상태 = 요청이 끝날 때까지만 보이는 임시값- 캐시는 기준을 빠르게 읽으려고 둔 사본이다. 사본이 기준과 어긋나면 사본을 버리고 다시 읽는다(브라우저 캐시, 읽기 캐시 전략, TanStack Query)
- 낙관적 업데이트는 서버 응답 전에 화면을 먼저 바꾼다. React의
useOptimistic은 액션이 진행되는 동안만 낙관적 값을 보여 주고, 액션이 실패하면 바뀌지 않은 실제 값이 다시 렌더링된다 - 기준이 꼭 DB일 필요는 없다. 외부 기관의 공식 API, 복제 구성의 리더 노드(데이터베이스 다중화), 이벤트 로그가 기준일 수도 있다. 중요한 것은 기준이 어디인지 팀이 합의하는 것이다
- 시스템이 크면 데이터 항목마다 기준이 다를 수 있다. 회원 정보는 계정 서비스, 재고는 재고 서비스가 기준인 식이다(바운디드 컨텍스트)
단일 진실 공급원과의 관계
단일 진실 공급원(Single Source of Truth, SSOT)은 데이터 요소마다 고치는(mastering) 곳을 한 군데로 정하는 설계 원칙이다. 다른 곳은 사본을 두지 않고 참조하거나, 읽기 전용 사본만 둔다. 즉 SSOT는 "각 데이터에 권한 있는 원천이 하나만 있도록 구조를 짜라"는 원칙이고, 권한 있는 데이터는 그렇게 정해진 원천 자체를 가리킨다. 인프라 설정을 git 한곳에 두는 GitOps가 SSOT의 한 예다. 사본도 수정을 허용하면 충돌을 맞추는 장치가 필요해지는데, 이 문제는 최종 일관성와 CRDT가 다룬다.
DNS의 권한 서버
DNS(Domain Name System)에서 권한 서버(authoritative server)는 한 영역(zone)의 레코드를 직접 알고 있어서 다른 서버에 묻지 않고 답할 수 있는 서버다. 재귀 리졸버(recursive resolver)는 대개 권한 서버에 물어 받은 답을 캐시해 둔다. 레코드의 TTL(Time To Live)이 지나기 전까지는 원천에 다시 묻지 않고 이 사본으로 답할 수 있다. 같은 "기준과 사본" 구조다(DNS와 CNAME).
명세: RFC 9499 §6 — DNS Servers and Clients · RFC 1035 §3.2.1 — Format (TTL)
참고: Wikipedia — System of record · Wikipedia — Single source of truth