o2o-negosium-original/schedules/anchoring/TODO.md
민헌 e1940c69aa feat(anchoring): 가격구간을 자릿수 계단식 사다리(46칸)로 재설계 (TODO 1)
균일 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>
2026-07-02 20:08:23 +09:00

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(배치 절차에 기록 단계 추가)