균일 3,000원 × 33,334칸 → 자릿수 사다리 46칸. 폭 = 구간 상한의 10% (선행 자릿수 밴드): [0, 1,000) 통일 1칸 + 자릿수(1천~1억, 5개)당 9칸 — "1천 원대·2천 원대 … 9천만 원대". 1억 초과는 마지막 인덱스(45) 클램프. - 고가 구간의 무의미한 3,000원 해상도 제거 → 칸당 표본 밀도 대폭 개선 (희소 칸 이월 문제 구조적 완화), 정적 테이블 2MB → 3KB - 사다리 단일 소스 = constants.UPPER_BOUNDS(생성식), json 은 기동 시 대조 검증 - calc_bracket_index: // 3000 → bisect_right (좌폐우개 경계 규약 동일 유지) - 조정 이력 0건 시점 적용 — 인덱스 재매핑/마이그레이션 없음. DB 스키마 무변경 - 골든 테스트 재작성(경계·자릿수 진입·클램프) + 사다리 형태 검증 추가 — 16 passed - 문서 5종·인수인계·README·스키마 주석 동기화, TODO 과제 1 완료 처리 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
3.0 KiB
3.0 KiB
TODO — 앵커링 모듈 후속 과제
남은 과제는 정책 재확정 + 스펙(v1.3) 개정 사안이다. 현재 규범(
docs/개발용.md§12)은 정적 테이블 변경·파라미터 조정을 봉인하고 있으므로, 착수 전 정책 확정 → 문서 개정 → 구현 순서를 지킨다. 운영 데이터(조정 이력)가 쌓이기 전에 확정하는 것이 가장 저렴하다 — negodata 적용 전이 적기.
1. 정적 기본 테이블의 가격구간을 계단식으로 재설계 ✅ 완료 (2026-07-02)
자릿수 계단식 사다리(46칸)로 확정·구현 완료. 폭 = 구간 상한의 10%(선행 자릿수 밴드):
[0, 1,000) 통일 1칸 + 자릿수(1천~1억, 5개)당 9칸 — "1천 원대·2천 원대 … 9천만 원대".
1억 초과는 마지막 인덱스(45) 클램프. 사다리 단일 소스 = constants.UPPER_BOUNDS,
산식 = bisect_right. 조정 이력 0건 시점에 적용해 마이그레이션 없음.
상세: docs/개발용.md §2·§4.1.
2. anchoring_records — 회사별 앵커링 값 전체 조회 테이블
배경
현재 anchoring.rate_adjustments 는 "조정 사건" 로그다 — 값이 바뀐 칸만 행이 생긴다.
"A사의 모든 칸(또는 운영 중 사용된 칸)의 앵커링 값이 지금/과거에 얼마였나"를 한 번에
조회하려면, 조정 이력 + 정적 테이블 시작값을 합성해야 해서 조회(대시보드·관리 화면)에
불편하다. 회사별로 운영되며 업데이트된 모든 앵커링 값을 바로 조회할 수 있는 테이블이 필요하다.
설계 시 결정해야 할 것 (구현이 크게 바뀔 수 있음)
- 성격 확정: ① 칸별 "현재값" 스냅샷(UPSERT — 조회 최적) ② 값 변경 시계열의 조회 친화 사본(append) ③ 둘 다 — 무엇이 필요한지 조회 요구사항(대시보드/API 화면)부터 정의
- rate_adjustments 와의 역할 분리: records 는 파생(조회용) 테이블로 두고 진실 원천은 rate_adjustments 유지가 안전 — records 는 언제든 이력에서 재구축 가능해야 하며, append-only 보호 대상(§12)에는 포함하지 않는다
- 쓰기 주체·시점: 배치가 조정 트랜잭션에 함께 기록할지(정합 우선), 커밋 후 best-effort 로 기록할지(조정 경로 무손대 우선 — 재구축 가능하므로 후자도 충분)
- 무조정 칸 표현: 시작값(10‰) 그대로인 칸을 행으로 둘지(회사 온보딩 시 46행 선생성 — 사다리 개편으로 부담 미미), 조회 시 정적 테이블과 합성할지
과제 1(구간 개편)과 순서 조율— 구간 개편 완료(46칸 사다리), records 는 새 인덱스 기준으로 설계하면 됨
참고
- 임시로는 현행 SQL 조회로 동일 정보를 얻을 수 있다:
docs/운영및유지보수.md§8 (값 변천사 = ①, 현재값 = 칸별 최신 행 + 없으면 시작값 10‰) - 스펙 반영 위치:
docs/개발용.md§6(스키마)·§8(배치 절차에 기록 단계 추가)