You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
버전 이력: name · price · image · currency · extracted_at (상품의 사실)
작업 상태: status(PENDING/PROCESSING) · attempt_count · heartbeat (파싱 잡의 사실)
PENDING 은 "아직 상품의 사실이 없는 행"인데 버전 테이블에 산다. #825 정체성 설계 논의(2026-07-30)에서 이 겸직이 어색함의 뿌리라는 결론이 났고, "요청(작업)을 표현하는 테이블"로 분리하는 것이 올바른 목표 구조라는 데 합의했다.
다만 시점은 정체성 공유(#825) 뒤로 미룬다 — 분리는 갓 안정화한 작업 큐 기계(#770 SKIP LOCKED, #803 heartbeat)와 갓 정규화한 참조 구조(4b #514, wish·tournament_item → snapshot_id NOT NULL)를 다시 열고 등록 응답 계약(클라 조율)까지 묶이는 에픽급 작업이라, 회의가 승인한 가격 추적을 먼저 세운다. #825 의 산출물(정규화 · canonical · 별칭 · 출처)은 이 분리 후에도 전부 그대로 살아남으며, 축소되는 것은 병합 연산과 item 단위 락 일부뿐이다.
무엇을
요청 테이블 신설 (예: parse_requests): 입력(정규화 URL 또는 image key) · status · attempt_count · heartbeat · 요청 시각. 작업 큐의 claim(SKIP LOCKED) · recover · 상한 판정이 이 테이블로 이동한다.
item_snapshots 는 순수 버전 이력으로: 파싱 성공 시에만 행이 생기고, PENDING/PROCESSING 상태가 사라진다.
참조 재배선: 파싱 중인 wish · tournament_item 이 요청을 가리키는 구조(스키마 변경 + 조회 경로 수정).
등록 응답 계약 조정: 파싱 완료 전에는 item · snapshot 이 없는 응답 모양 — 클라이언트와 조율 필수.
단계 배포: 장기 브랜치 금지. 테이블 추가 → 잡 상태 이중 기록 → 참조 전환 → 옛 컬럼 정리 순의 additive 단계로 dev 에 흘린다.
상위 Epic
#824
왜
item_snapshots가 성격이 다른 두 역할을 겸직하고 있다.PENDING 은 "아직 상품의 사실이 없는 행"인데 버전 테이블에 산다. #825 정체성 설계 논의(2026-07-30)에서 이 겸직이 어색함의 뿌리라는 결론이 났고, "요청(작업)을 표현하는 테이블"로 분리하는 것이 올바른 목표 구조라는 데 합의했다.
다만 시점은 정체성 공유(#825) 뒤로 미룬다 — 분리는 갓 안정화한 작업 큐 기계(#770 SKIP LOCKED, #803 heartbeat)와 갓 정규화한 참조 구조(4b #514, wish·tournament_item → snapshot_id NOT NULL)를 다시 열고 등록 응답 계약(클라 조율)까지 묶이는 에픽급 작업이라, 회의가 승인한 가격 추적을 먼저 세운다. #825 의 산출물(정규화 · canonical · 별칭 · 출처)은 이 분리 후에도 전부 그대로 살아남으며, 축소되는 것은 병합 연산과 item 단위 락 일부뿐이다.
무엇을
parse_requests): 입력(정규화 URL 또는 image key) · status · attempt_count · heartbeat · 요청 시각. 작업 큐의 claim(SKIP LOCKED) · recover · 상한 판정이 이 테이블로 이동한다.이행을 쉽게 만드는 선행 조치 (#825 쪽에 반영)
의존