홈·검색·상세·회원·결제·게시판·도움말의 화면·권한 기준선을 확인하고 개인값·쿠키·세션은 보존하지 않음
PRODUCTION MASTER PLAN · REVISION 22
GF·두인은 화면 참고
대법원은 운영 데이터
로그인 세션에서 확인한 두인경매와 GF Auction은 화면·검색·상세·회원 기능의 구현 기준으로 사용합니다. 출시 후 신건·사건·물건·기일·상태·결과는 대법원경매 파싱만 지속 갱신하며,제이옥션 PostgreSQL은 출처가 아니라 독립 저장·검색 원장으로 사용합니다.
LIVE EVIDENCE BASELINE
확인한 사실과 아직 닫히지 않은 조건
공개 기준 35건에 same-origin 210 URL·22 JS·22 source map·29 form·84 호출 후보를 대조해 구현 관련 표면 75개로 정규화
PostgreSQL/PostGIS를 제이옥션 내부 canonical·projection·enrichment 실행면으로 사용하되 Sites는 service auth·same-origin BFF만 소비
2026-07-17 20:30 기준 마지막 관찰 21.97분·pending event 0; 제이옥션은 버전된 outbox·cursor 피드만 멱등 소비
관리비·관공서·비교사례·배당과 건축물·토지·학군·학교 API는 상위 실행 증거가 있으나 현재 Sites BFF·제품 UI에는 미접목
실검색·결과·상세는 390·768·1440px overflow 0을 확인했고, 17 desktop·6 mobile·1 board 시안은 구조 기준으로만 사용
RELEASE BLOCKERS
연결보다 먼저 닫아야 할 운영 위험
- 01Court·공공보강의 AuctionHub 생산면은 동작하지만 제이옥션 Sites의 9개 same-origin BFF·상세 소비자·source freshness UI가 미접목이므로 상위 API 200을 제품 완료로 표시하면 안 됨
- 02실행 중인 대법원 파서의 raw 원장은 payload_hash·raw_path·raw_json을 보존하지만 source_url·fetched_at·parser_version·schema_version의 명시 열은 아직 없어 outbox 공개 전 migration이 필요함
- 03제이옥션 소비자의 versioned outbox 계약·cursor feed client·service auth·inbox·DLQ ledger·고정 판본 projection은 구현됐지만, 운영 producer 실증거·DLQ replay 실행기·projection outbox 전달과 authoritative 승격은 아직 차단 상태임
- 04최신 freshness guard가 GF를 required로 판정하고 두인 watch를 유지하며 일부 관리비·배당 staging도 민간 원천을 포함하므로 source allowlist·required 제거·신규 canonical write 0을 공개 전 증명해야 함
- 05학교알리미 credential은 재발급·회전 후 CT104 0600 secret 한 곳 외 저장·URL·로그·보고서 잔존 0을 확인하기 전 운영 인수를 완료로 판정하지 않음
- 064대 API의 당시 검증 공개 도메인은 제이옥션 제품 의존 경로가 아니며 내부 service origin과 same-origin BFF로 재구현하기 전 브라우저 직접 호출·공개 링크·fallback을 금지함
- 07API·학교·학구·K-apt 수치는 실행 중 계속 변하므로 확인시각·source run·checkpoint·projection revision 없는 정적 총계를 서로 합쳐 표시하면 안 됨
- 08추가 API capability inventory는 완료됐지만 후속 후보 9개 중 즉시 계약 가능한 4개도 제이옥션 계약·projection·권한·E2E 전에는 제품 구현 완료로 승격하면 안 됨
- 09전용 도메인은 사용자 제공 소유정보 기준 jauc.co.kr로 확정했지만 DNS·private→public 전환은 아직 실행하지 않았으며 PointAuction 도메인으로 우회하면 안 됨
- 10두인 조사 인벤토리 완료와 제이옥션 제품 구현 완료는 별도 판정이며 A/H/S/R 근거와 E2E 결과를 혼합하면 안 됨
- 11Court-only 30일 인수는 파서·API 구현 통과와 별개인 시간 증거이며, 최근 freshness의 GF-required 충돌을 제거한 뒤 새 기준선으로 연속 관측해야 함
- 12공매는 법원 자료나 두인 화면 복제로 채우지 않으며 15121030 코드 snapshot, 15157768 일간 코드·주소, 물건 API를 별도 활용승인·계약·quota·논리 secret으로 운영해야 함
- 13현재 Sites 배포는 소유자 전용 custom 접근이라 검색로봇이 들어올 수 없음; 공개 도메인·접근모드를 승인하기 전에는 robots·sitemap이 있어도 실제 색인되지 않음
- 14상담 관리자 화면은 Sites 로그인+운영자 허용목록으로 보호되지만, 나머지 회원·관리자 시안은 서버 인증이 연결되지 않았으므로 noindex를 데이터 보호 수단으로 오해하면 안 됨
- 15상담함 목록·상세의 허용계정 운영 렌더 E2E가 남아 있으며 Codex가 승인 세션에서 수행하고 세션 잠금 시 AUTH_UNLOCK만 1회 요청
LIVING PROJECT REGISTRY
계획·구현·검증·배포를
한 곳에서 계속 누적
앞으로 제이옥션의 계획·구현·검증·배포 작업은 이 페이지에 작업 ID, 상태, 공개 경로, 검증 근거와 남은 위험을 함께 기록합니다. 계획만 세운 항목과 실제 구현·공개된 항목을 분리하고, 같은 Sites 판본에서 화면과 원장을 함께 갱신합니다.
- 작업 ID
- 상태
- 공개 경로
- 검증 근거
- 남은 위험
JAUC-WORK-20260714-01회사소개 임시 안내 화면 교체
회사 원칙과 상담 철학을 중심으로 인사말을 재구성하고 오시는길을 독립 화면으로 연결했습니다. 반복되는 법인정보 카드는 본문에서 제외했습니다.
- 소스
- 구현 완료
- 런타임
- 정적 경로 정상
- 공개판
- 이번 판본 배포
- 검증 근거
- 회사정보·구조화 데이터·canonical·모바일/데스크톱 가로 넘침 0 확인
- 남은 위험
- 카카오 지도 외부 로더 장애 시 주소·외부 지도 링크 대체 화면을 유지
JAUC-WORK-20260714-02경매컨설팅 절차·수수료·신청 완성
기존 9단계 업무, 멤버십과 물건별 수수료, 법원·물건·사건번호가 연결되는 신청서를 제이옥션 디자인과 반응형 표로 구현했습니다.
- 소스
- 구현 완료
- 런타임
- 정적 경로 정상
- 공개판
- 이번 판본 배포
- 검증 근거
- 기존 GF 근거 화면과 항목 대조, 신청 오류 시 입력 유지, 공개 안내/비공개 신청 색인 분리
- 남은 위험
- 수수료·계약·개인정보 문구는 운영자와 법률 검토 후 확정본으로 승격
JAUC-WORK-20260714-03상담 접수 API와 비공개 상담함 기반
CSRF·Origin·멱등키·속도제한을 적용하고 상담 원문을 AES-GCM으로 암호화해 D1 원자적 batch와 관리자 열람감사로 연결했습니다.
- 소스
- 구현 완료
- 런타임
- D1·암호키 적용
- 공개판
- 관리자 전용 · 허용 계정 로그인 필요
- 검증 근거
- 운영 합성 접수 JAC-20260714-5E6B의 HTTP 201·PII 없는 응답과 정상 경로 8개 statement 확인
- 남은 위험
- Codex가 허용 세션으로 마스킹 목록·복호화 상세·PII_VIEWED 감사기록 E2E를 수행하고, 세션이 잠길 때만 AUTH_UNLOCK 1회 요청
JAUC-WORK-20260714-04대법원 증분 파서 결과 연계 계약
신건·사건·물건·기일·상태·결과 이벤트와 원문 URL·조회시각·SHA-256·파서 버전을 보존해 검색·상세·상담에 투영하는 경계를 고정했습니다.
- 소스
- 계약 확정
- 런타임
- 전송로 미연결
- 공개판
- 계획 원장 공개
- 검증 근거
- 세션 019eea6e-17ee-7340-83dd-c070dc83396c 생산자 기준선과 outbox·cursor·DLQ·replay 계약 반영
- 남은 위험
- producer manifest/hash 검증 전송로와 canonical DB 소비자 E2E 연결 필요
JAUC-WORK-20260714-05공개 색인과 회원 상세·상담 전환 분리
검색과 비회원 상세에는 색인 가능한 사건 고유 요약만 제공하고, 문서·분석 등 확장 상세는 HttpOnly 회원 세션을 확인하는 별도 API에서만 반환하도록 공개·회원 projection을 분리했습니다.
- 소스
- 요약 projection·회원 세션 게이트 구현
- 런타임
- 로컬 BFF 검증 완료 · 운영 내부 origin 연결 대기
- 공개판
- 현재 운영판 미반영
- 검증 근거
- 비회원 상세 응답 detail_level=summary·당사자/확장필드 미포함, 무세션 회원 상세 HTTP 401, 안전한 return_to와 공개·회원 projection 분리 테스트
- 남은 위험
- 기존 Sites 프로젝트에 배포한 뒤 내부 AuctionHub origin의 회원 확장 상세와 로그인·가입·색인 E2E를 검증
JAUC-WORK-20260714-06회사·컨설팅·작업 원장 운영 배포와 접근 검증
회사소개 임시 안내 교체, 컨설팅 4개 경로, D1 상담 접수와 통합 작업 원장을 같은 Sites 운영판에 배포하고 실제 경로·접수·접근 정책을 대조했습니다.
- 소스
- 커밋·패키지 검증 완료
- 런타임
- Sites 운영판·D1 migration 적용
- 공개판
- 소유자 전용 custom · 익명 401
- 검증 근거
- 운영 8개 경로 HTTP 200, 회사 임시 안내 문구 0건, 상담 HTTP 201, 자동화 테스트 35건 통과
- 남은 위험
- Codex가 기존 허용 계정 세션으로 관리자 상담 상세를 확인하며 비밀번호·2FA가 나타날 때만 AUTH_UNLOCK 1회 요청
JAUC-WORK-20260714-07회사소개 본문 법인정보 카드 제거
회사소개 인사말 아래에 반복 노출되던 상호·대표·사업자등록번호·주소·대표전화·개인정보 보호책임자 6개 항목 카드를 제거했습니다.
- 소스
- 본문 카드 제거 완료
- 런타임
- 정적 경로 정상
- 공개판
- 회사소개 본문에서 제거
- 검증 근거
- 회사소개 HTML의 회사 정보 aria-label 0건, CTA 유지, 공통 푸터·오시는길 정보 유지 테스트
- 남은 위험
- 공통 푸터와 오시는길의 필수 회사정보는 이번 요청 범위대로 유지
JAUC-WORK-20260715-01일정별 검색 월간 법원 일정표 구현
일정별 검색을 6주·42칸 월간 달력으로 구현하고 같은 origin의 /api/v1/sale-events 응답에서 날짜별 법원 일정과 물건 수를 구성합니다. API 실패 시 임의 건수를 채우지 않고 오류·빈 상태를 구분합니다.
- 소스
- 월간 달력·sale-events BFF 구현 완료
- 런타임
- 로컬 AuctionHub 응답 연결 검증
- 공개판
- 현재 운영판 미반영 · 고정 가상 건수 없음
- 검증 근거
- 유효 ISO 날짜 42칸, /api/v1/sale-events 실응답 3건 로컬 연결, 고정 일정·법원 수 미사용, 로딩·빈 결과·연결 오류 상태 렌더 테스트
- 남은 위험
- 운영 배포와 브라우저 회귀 후 Court SCHEDULE_CHANGED projection의 원문 조회시각·파서 버전·변경 상태를 달력 응답에 확장
JAUC-WORK-20260715-02지도검색 예정 영역과 종합 구현계획 확정
지도검색은 아직 제품 기능으로 열지 않고 기존 두인 구현계약과 일치하는 /map 경로와 화면·데이터·API·품질 계약만 예약했습니다. 전체 사이트를 구현·검증용 표본·계획·미연결로 재분류하고 우선순위 제안과 단계별 활성화 게이트를 한 원장에 묶었습니다.
- 소스
- Court 좌표 계보·PNU·품질 계약 예정
- 런타임
- route·API·지도 SDK 없음
- 공개판
- 계획 원장만 공개 · 제품 route 없음
- 검증 근거
- 지도검색 예정 문구·비활성 상태·단계별 게이트 렌더, sitemap 제외, /map·/map-search·/search/map 링크와 활성 라우트 0건 자동검사
- 남은 위험
- Codex가 좌표 품질 표본 1,000건·키 제한·API shadow를 처리하고 유료 provider·상업 약관만 LEGAL_ACCEPTANCE/PAID_CONTRACT_KYC 요청
JAUC-WORK-20260715-03공공데이터포털 온비드 용도코드 API 연계계획 확정
15121030을 2023-12-31 기준 388행 bootstrap·회귀 스냅샷으로, 일간 15157768을 운영 용도코드·주소 정본 후보로 분리했습니다. 물건상세 15157247과도 별도 계약으로 유지하고 서버 전용 인증·버전 저장·검증·LKG 복구·공개 승격 게이트를 고정했습니다.
- 소스
- 공식 페이지·OAS·첨부 가이드 검증
- 런타임
- adapter 계약·검증 테스트 구현 · upstream 미호출
- 공개판
- /onbid SAMPLE·NOINDEX · 실데이터 승격 전
- 검증 근거
- 15121030 최신 UDDI·388행·5개 필드와 15157768 일간 코드/주소 2개 operation, header/query 인증 분리, 키 URL·HTML 비노출 테스트
- 남은 위험
- 후속 JAUC-WORK-20260715-05에서 15157768 HTTP 200·resultCode 00·420행 연결 완료; Proxmox 일간 runner는 Codex 실행대상
JAUC-WORK-20260715-04기존 자동연결 이력 재사용과 온비드 기준코드 실제 연결
기존 auctionhub의 공공데이터 키 선택·URL 마스킹·원문 hash·실행원장 패턴을 확인해 재사용했습니다. 로그인 없이 제공되는 15121030 공식 CSV를 CP949 원문 그대로 보존하고 388행을 정규화·계층검증해 공개 reference API와 /onbid 기준코드 패널에 실제 연결했습니다.
- 소스
- 15121030 원문·SHA-256·388행·22/50/316 검증
- 런타임
- bootstrap sync·safe probe·reference API·ETag 구현
- 공개판
- /onbid 기준코드 연결 · 물건 SAMPLE·NOINDEX 유지
- 검증 근거
- 기존 키는 기존 공공데이터 배치에 사용됐으나 당시 온비드 probe는 15121030 HTTP 401·15157768 HTTP 403. 원문 b6c7655f…·semantic e6c3f093…와 388행 계층 검증 후 공식 파일 bootstrap 연결
- 남은 위험
- 후속 JAUC-WORK-20260715-05에서 전용 secret·HTTP 200·resultCode 00·전체 420행 대사 완료; 일간 runner만 남음
JAUC-WORK-20260715-0515157768 승인 확인과 일간 full-sync/LKG 구현
공공데이터포털 활용신청 현황에서 차세대 온비드 코드 및 주소 조회서비스 개발계정 승인을 확인했습니다. 공식 Swagger·활용가이드에 맞춰 top-level header/body, singleton/array, 문자열 pagination, 부모 edge 레벨 파생, totalCount 대사, 원문·조회시각·SHA-256·파서 버전 보존과 검증 성공본만 원자 승격하는 일간 수집기를 구현했습니다.
- 소스
- 15157768 승인 · HTTP 200/resultCode 00 · 420행
- 런타임
- 1 page 전체수집·23/50/347 계층·versioned raw/normalized/manifest·Sites secret rev 2
- 공개판
- Sites v13 · 15157768 live reference 연결 · 물건 SAMPLE·NOINDEX 유지
- 검증 근거
- snapshot 15157768:20260715T030641Z:e00689b5e9207893 · raw 3e2860f0… · semantic e00689b5… · parser onbid-usage-code-live-v1 · 키 비저장
- 남은 위험
- Proxmox 일간 runner와 versioned reference 저장소 연결. 주소 API와 물건 API는 별도 게이트 유지
JAUC-WORK-20260715-06Wonsns·Busyman·Auctioning 전수조사 WON-SEO-01~10 병합
작업 019f639b-070a-7c42-aa37-87ebcf43f867의 1차 2개·2차 6개 상세 URL 조사 결과를 기존 P0·P1·P2·P3·P7·P8에 한 작업으로 병합했습니다. SSR 사실표, 공식 기일 이벤트 정규화, 단일 반응형 URL, 상태변경 IndexNow와 금지 회귀 fixture를 Court PUBLIC_INDEX 계약에 고정했습니다.
- 소스
- 공개 HTTP·HTML·검색 표본 조사 완료
- 런타임
- WON-SEO-01~10 구현 대기 · 색인 차단 유지
- 공개판
- 계획판 공개 · 실제 검색색인 미활성
- 검증 근거
- 2차 6개 URL 중 현재 noindex 4개를 과거 색인 잔존으로 분리하고 SSR 표·alias·lifecycle·피드·soft-404 조사 결과를 10개 계약과 자동검증 행렬로 전환
- 남은 위험
- Court event 정규화와 PUBLIC_INDEX projection 100건 대사를 통과한 뒤에만 대표 공개 URL·sitemap·IndexNow를 단계 활성화
JAUC-WORK-20260715-07사용자 직접 실행 0건 기본의 Codex 구현 운영모델
조사·설계·코드·DB migration·외부 API·Proxmox·Cloudflare·Sites·DNS·테스트·배포·모니터링·롤백은 Codex가 끝까지 처리하도록 책임을 재배치했습니다. 사용자는 대리할 수 없는 본인확인·비밀번호·2FA·유료결제·법적 동의·최종 공개 승인만 1회 행동으로 수행합니다.
- 소스
- 저장소·문서·미연결 운영단계 전수 대조
- 런타임
- Codex 실행 우선 · 비가역 권한경계만 승인 요청
- 공개판
- 계획판 공개 · 실제 권한 변경 없음
- 검증 근거
- 14개 책임영역·6단계 실행루프·6개 사용자 권한경계·10개 현재 실행대상을 렌더링하고 사용자 수동 명령·파일복사·배포 절차를 기본값에서 제거
- 남은 위험
- 외부 서비스가 비밀번호·2FA·결제·법적 동의 또는 private→public 최종 승인을 요구할 때만 한 번에 한 행동을 요청하고 나머지는 계속 진행
JAUC-WORK-20260715-08AuctionHub same-origin BFF와 공개·회원 상세 분리
브라우저가 AuctionHub origin을 직접 호출하지 않도록 목록·검색옵션·facets·법원·기일·상세를 Sites same-origin BFF로 통합했습니다. 공개 상세는 요약 projection만 반환하고 회원 상세는 HttpOnly 세션과 upstream 인증을 모두 통과해야 전체 projection을 요청합니다.
- 소스
- 계약·서버 클라이언트·8개 BFF 경로 구현
- 런타임
- allowlist·timeout·retry·redirect 거부·표준 오류 적용
- 공개판
- 현재 운영판 미반영
- 검증 근거
- 실목록 3건 HTTP 200, 공개 상세 summary projection·확장필드 0건, 무세션 회원 상세 HTTP 401, canonical slug fallback과 오류 응답 자동검증
- 남은 위험
- 기존 Sites 프로젝트에 server-only AuctionHub 내부 origin을 설정하고 운영 목록·상세·회원 세션 E2E를 통과시킨 뒤 공개
JAUC-WORK-20260715-09실데이터 핵심 화면과 회원 워크벤치 전면 구현
홈·검색·결과·물건상세·월간 일정·법원목록을 실데이터 BFF 기반 화면으로 교체하고 로그인·가입·관심물건·최근 본 물건·프로필을 같은 회원 세션 계약에 연결했습니다. 서울 도심 주거·업무권을 사실적으로 담은 전용 hero 이미지도 제작해 적용했습니다.
- 소스
- SSR 검색·상세·42칸 달력·법원·회원 화면 구현
- 런타임
- 빌드·렌더·실목록 SSR 연결 검증
- 공개판
- 현재 운영판 미반영
- 검증 근거
- 홈 HTTP 200·실제 첫 상세 링크 SSR, 공개 상세 slug 해석, 월간 42칸과 sale-events 연결, 인증 전 내 작업공간 상태 및 전체 렌더 테스트
- 남은 위험
- 데스크톱·모바일 브라우저 QA와 끊어진 링크·금지문구 전수검사 후 동일 Sites 프로젝트에 배포
JAUC-WORK-20260715-10권리·배당·투자 산식 코어와 실계산 UI 구현
금액을 bigint·정수 문자열로 처리하고 최대잉여 방식 배분, 우선순위 waterfall, 명시적 임차인 보호규칙, NOI·cap rate·CoC·ROI·XIRR을 순수 함수 패키지로 구현했습니다. 같은 산식을 strict allowlist API와 직접입력 계산기에 연결했으며 세금·비용·법적 기준값은 추정하지 않습니다.
- 소스
- formula-core·strict POST API·반응형 계산기 구현
- 런타임
- 산식 17건+API/UI 4건 자동검증 통과
- 공개판
- /mypage/calculator NOINDEX · 현재 운영판 미반영
- 검증 근거
- largest-remainder·waterfall 불변식, NOI·수익률·XIRR, 8KB·필드 allowlist·정수문자열·기간검증, 입력 SHA-256과 formulaVersion 표시 21건 자동검증
- 남은 위험
- 운영 배포·브라우저 회귀 뒤 canonical 물건·임차인·권리 projection과 규칙 버전 원장을 회원 분석 화면에 연결
JAUC-WORK-20260715-11정본 식별자·검색 projection·release fingerprint 통합 후보 완료
법원·사건·물건의 안정 식별자와 alias, HMAC cursor v2, 6종 정렬, facets·검색 projection, 원문·조회시각·hash·파서 버전·revision 계보를 기존 AuctionHub에 병합할 수 있도록 격리 스크래치에 계약·migration·통합지침·회귀검증 묶음으로 완성했습니다.
- 소스
- contract v2·migration 143·integration guide 구현
- 런타임
- Python 34건·PostgreSQL 53문장 파싱 통과 · 운영 DB·서비스 미변경
- 공개판
- 계획 원장만 공개 · API·DB 미반영
- 검증 근거
- 기존+신규 Python 34건, py_compile, pglast PostgreSQL 53 statements 통과; N 정본 main.py SHA 불변·live DB/runtime/DNS 무변경
- 남은 위험
- staging DB preflight로 실제 중복·FK guard·projection 부하를 확인하고 signing key 설정·main.py wiring·N 정본 병합 검토 후 별도 승인된 운영 배포 수행
JAUC-WORK-20260715-12완성형 제품 통합검수와 기존 Sites 운영판 갱신
실데이터 홈·검색·상세·월간 일정·법원목록, 공개·회원 분리 BFF, 회원 워크벤치, 투자수익 산식, 상담·관리자 경계, 온비드 기준정보와 동적 sitemap을 한 판본으로 묶어 기존 소유자 전용 Sites 운영판에 배포했습니다.
- 소스
- 핵심 UI·BFF·회원·산식·관리·온비드·SEO 통합 완료
- 런타임
- build·Node 90건·Python 34건·PostgreSQL 53문장·lint 오류 0
- 공개판
- 기존 소유자 전용 Sites 운영판 갱신 · jauc.co.kr DNS·Tunnel·운영 런타임 무변경
- 검증 근거
- 운영 14개 화면 HTTP 200·죽은 링크 0, 실목록 API 200, 공개 상세 summary·회원 필드 0, 산식 POST 200, sitemap 109 URL 중 물건 100 URL, 375px·1265px 가로 넘침 0
- 남은 위험
- contract v2를 staging DB와 내부 AuctionHub origin에 연결해 실제 6종 정렬·facet revision·rich member detail을 운영 승격
JAUC-WORK-20260715-136종 정렬·cursor·총건수·filter-aware facet 소비자 완성
검색 결과에 6종 서버 정렬, 24·48·72·100 표시개수, opaque cursor 더보기, 동일 URL 조건 보존, 정확한 total_count 표시를 구현했습니다. BFF는 sort enum과 revision 메타를 엄격히 검증하고 facet 요청에도 동일 필터를 전달합니다. 현재 운영 API가 sort를 200으로 받지만 실제 순서를 바꾸지 않는 것도 실응답으로 확인해 snapshot·revision·query hash·sort 네 값이 모두 일치할 때만 정렬 선택을 자동 활성화하도록 막았습니다.
- 소스
- 검색 UI·SSR/BFF·facet·pagination contract 보강
- 런타임
- 6개 sort 실호출은 모두 200이나 동일 순서·동일 legacy cursor임을 확인
- 공개판
- 거짓 정렬 표시 차단 · legacy에서는 최신 갱신순만 표시
- 검증 근거
- sort allowlist·중복값 차단·pagination meta allowlist·SSR total·cursor query 보존·revision capability gate 자동검증
- 남은 위험
- contract v2 projection을 내부 origin에 승격한 뒤 6개 sort의 서로 다른 첫/끝 행, 전체 페이지 중복·누락 0, facet 합계를 실데이터로 대사
JAUC-WORK-20260715-14회원 전체 상세 projection·증거 계보 화면 완성
회원 상세 BFF가 detail-projection-v3를 우선 조회하고 구형 endpoint만 있는 환경에서는 안전하게 legacy로 되돌아가도록 연결했습니다. 화면은 사건·매각·자산·토지건물·차량·임차점유·권리·위험·기일·문서·사진·증거계보를 모두 분리하며, 누락값은 명시적 빈 상태로 표시합니다.
- 소스
- 회원 BFF allowlist·v3 projection UI·즐겨찾기 멱등 UX 구현
- 런타임
- 현재 public jauc.co.kr 상세와 v3가 410으로 차단됨을 실확인
- 공개판
- 비회원은 가입/로그인 게이트만 노출 · 원문 URL·내부 경로·secret 비노출
- 검증 근거
- v3/legacy 렌더·11개 상세 섹션·모든 빈 상태·위험 URL/내부 감사필드 제거·해시 요약·favorite 중복 제출 방지 테스트
- 남은 위험
- 내부 AuctionHub origin에서 회원 세션으로 v3 200을 허용하고 실제 임차·권리·문서·사진 표본의 필드 대사와 객체 소유권 E2E를 통과
JAUC-WORK-20260715-15동일 revision cursor sitemap과 실제 lastmod 게이트 구현
기존 /sitemap.xml을 유지하면서 첫 목록 이후에는 snapshot_at·projection_revision·query_hash·sort가 모두 동일한 contract v2 cursor만 최대 5페이지·500건까지 합치도록 보강했습니다. revision 변경, 메타 누락, 반복 cursor, API 장애 시 검증된 페이지까지만 보존하고 정적 핵심 경로는 항상 유지합니다.
- 소스
- bounded cursor collector·canonical 중복 제거·실제 updated_at lastmod
- 런타임
- legacy 응답에서는 첫 100건만 사용 · 잘못된 혼합 revision 0
- 공개판
- 비공개·회원·관리·검토·지도 예정 route sitemap 제외
- 검증 근거
- 동일 revision 누적·revision 변경 중단·legacy 1페이지·부분 장애 축소·정적 route allowlist 자동검증
- 남은 위험
- 전체 공개 전 projection export 또는 cursor ledger를 연결해 50,000 URL 이하 파일로 분할하고 alias·삭제 lifecycle과 함께 Search Advisor에 제출
JAUC-WORK-20260715-16migration 143 실제 PostgreSQL 격리 실행과 fail-closed 승격 게이트 완성
실 staging 접속정보가 없는 상태에서 계획만 통과시키지 않고, X: scratch의 PGlite 0.5.4 PostgreSQL WASM 18.3 엔진에 migration 143 전체를 실제 실행했습니다. dirty fixture는 preflight와 index 적용을 차단하고 clean fixture는 alias·승인 merge·projection·facet 제약을 적용한 뒤 promote·rollback audit까지 재현했습니다.
- 소스
- migration·immutable ready trigger·activation audit·promote/rollback·release-check 보강
- 런타임
- pytest 35건·PG rehearsal·release-check·6 sort×73행 keyset·HMAC tamper 차단 통과
- 공개판
- 운영 DB·N 정본·runtime·DNS 무변경
- 검증 근거
- dirty SQLSTATE 23514 차단, clean 2 indexes·5 constraints, bad-count 승격 원자 차단, 32-byte 미만 key 거부, 증거 미비 promotion fail-closed
- 남은 위험
- 실 staging PostgreSQL의 전체 기존 schema·실데이터 cardinality·lock time·worker release ID를 release-check에 넣어 통과한 뒤 승인된 cutover에서만 current revision을 승격
JAUC-WORK-20260715-17홈 글로벌 헤더를 모든 상단 섹션의 단일 셸로 고정
회사소개·오시는길·경매컨설팅·절차·수수료·신청·완료 화면에 따로 존재하던 보조 헤더와 푸터를 제거하고, 홈과 같은 로고·상단 유틸리티·통합검색·회원메뉴·공통 주메뉴를 제공하는 AuctionShell 하나로 통합했습니다. 각 페이지의 breadcrumb·좌측 하위메뉴·업무 본문은 그대로 유지합니다.
- 소스
- BusinessShell을 공통 AuctionShell 내부 콘텐츠 레이아웃으로 축소
- 런타임
- 공개 14개 경로의 헤더 DOM 동일성·단일 main/skip link·활성 메뉴 자동검증
- 공개판
- 상단 메뉴 이동 시 로고·검색창·메뉴 높이·순서·푸터가 홈 기준으로 유지
- 검증 근거
- data-site-header 계약으로 홈 헤더와 aria-current 외 DOM 완전일치, 구형 JA·WORKBENCH·경매자료실 헤더 제거, 데스크톱·태블릿·모바일 overflow 검수
- 남은 위험
- 신규 공개 route는 AuctionShell 외 별도 글로벌 헤더 생성을 금지하고 동일성 회귀검사를 필수 유지
JAUC-WORK-20260715-185개 상단 메뉴와 경매검색 하위 탐색 구조 확정
상단 메뉴를 경매검색·공매검색·지도검색(예정)·경매컨설팅·회사소개 5개로 정리하고, 경매물건검색·매각기일·법원별검색을 경매검색 하위 메뉴에 묶었습니다. 하위 메뉴는 클릭·Enter·Space로 열리고 Escape·바깥 클릭·링크 선택으로 닫히며, 지도검색은 실제 경로가 생기기 전까지 링크 없는 비활성 버튼으로 유지합니다.
- 소스
- PrimaryNavigation 클라이언트 disclosure 분리·단일 활성 링크·비활성 지도검색 계약 적용
- 런타임
- 14개 공개 경로 공통 DOM·하위 링크 3개·상위 순서 5개·현재 경로·dead link 방지 자동검증
- 공개판
- 매각기일과 법원별검색은 경매검색 안에서 접근하고 모든 상단 섹션에서 같은 헤더 구도를 유지
- 검증 근거
- data-primary-item 5개와 data-auction-search-item 3개 계약, aria-expanded·aria-controls·Escape·outside click, 1440·1024·760·375px 잘림·본문 밀림 검수
- 남은 위험
- 지도검색은 좌표·목록 동기화·provider·접근성·오류복구 게이트를 모두 통과한 뒤에만 같은 자리를 실제 링크로 승격
JAUC-WORK-20260716-01카카오맵 API 전수조사 실증을 지도검색 완성형 계획에 병합
참조 작업 019f639b-070a-7c42-aa37-87ebcf43f867의 초기 설정·실호출·브라우저 렌더 증거를 대조해 Kakao provider와 제이옥션 제품 준비도를 분리한 선행 감사입니다. 이후 JAUC-WORK-20260716-02에서 M1 교차측정, PostGIS·same-origin BFF·/admin/map-shadow 구현과 보안 재검토를 완료했으며, 이 항목의 초기 PENDING 판정은 후속 원장으로 대체합니다.
- 소스
- 감사 보고서·evidence JSON·실렌더 결과 대조 완료; 키·토큰은 원장과 화면에 보존하지 않음
- 런타임
- 선행 감사 이후 M2B code/schema와 M3 owner-only Shadow가 구현됨; 공개 /map·별칭 404와 제품면 SDK 0건은 유지
- 공개판
- 현재 구현 상태·검증 수치·남은 승격 조건은 JAUC-WORK-20260716-02와 지도검색 계획판에서 확인
- 검증 근거
- 앱 1514962·등록 origin SDK 200·미등록 origin 401·Local 200·marker/clusterer/attribution PASS를 선행 확인; 후속 구현·보안·배포 증거는 -02에 귀속
- 남은 위험
- 후속 JAUC-WORK-20260716-02에서 /admin/map-shadow·BFF·PostGIS DDL·보안 보완을 비공개 배포했고, PUBLIC live gate와 owner 운영 UI E2E는 계속 차단 상태로 관리
JAUC-WORK-20260716-02카카오맵 M0–M3 구현·보안 재검토·비공개 Shadow 배포 상태 반영
참조 작업 019f639b-070a-7c42-aa37-87ebcf43f867에서 완료한 M0–M3 구현과 독립 보안 재검토를 정본 보고서·runbook·좌표 감사·PostGIS migration·소스 커밋·Sites 판본으로 다시 대조했습니다. M2A만 PASS이며 M0·M1·M2B·M3는 측정·코드·스키마·비공개 배포까지 진척된 PARTIAL입니다. 내부 화면은 /admin/map-shadow로 고정하고 공개 /map·sitemap·전역 메뉴 SDK는 계속 닫았습니다.
- 소스
- 62b9bc5 구현 → 94461b6 보안 보완 → 2b9b5daf 전역 revision 역행 차단; 최종 독립 재검토 PASS
- 런타임
- Sites v23 · env revision 4 · /admin/map-shadow 비공개 배포 · PUBLIC projection revision 0/serving false/publication metadata 0/view 0
- 공개판
- root 200 · 공개 /map 404 · cross-site BFF 403 · identity-less admin API 401 · 공개 메뉴·sitemap SDK 0
- 검증 근거
- M1 20개 균등 offset·1,000건 교차측정, PostGIS 테이블2/뷰1/함수3/트리거2/제약14/인덱스4, 지도 11/11·전체 125/125, tile16·feature/list/detail public_id 각100·aria/focus PASS
- 남은 위험
- M0 소유 원장, M1 ground-truth 승인, M2B PUBLIC metadata·양수 revision·serving·service auth·fixed egress/IP·REST secret·durable rate limit, M3 owner live UI E2E·CT104 통합·7일 관측
JAUC-WORK-20260716-03경매마당 지도검색 전수조사를 MAP UX PARITY 계획·완료·회귀 기준으로 병합
로그인 데스크톱·390px·공개 번들·무쿠키 API 경계를 전수조사한 정본을 기능 구현이 아닌 계획 계약으로 반영했습니다. 정보형 overlay, 동일 위치 sheet, 상세 전환·상태 복원, 공통 filter codec, owner-only 좌표 진단, 공개 API·좌표 보호를 P0로 고정하고 20개 회귀 기준을 별도 원장으로 만들었습니다.
- 소스
- 경매마당_지도검색_전수조사_2026-07-16.md의 2차 잔여위험 재검증까지 실측·금지 사례·PublicMapLot 권장 계약·20개 회귀·15개 추가 게이트로 구조화
- 런타임
- owner-only /admin/map-shadow와 기존 v23 구현 기준은 유지하며 MAP UX 패키지는 모두 PLANNED
- 공개판
- 공개 /map·별칭 404 · sitemap·전역 메뉴·공개 제품면 SDK 0건 계약 유지
- 검증 근거
- 전국 bbox 25,515건·11,749,307 bytes·약 15.7초 복제 금지 사례, bbox 누락 cluster 273/합 35,800 정정, P0 7개·P1 5개, PublicMapLot, 회귀 20개·추가 게이트 15개
- 남은 위험
- M2B schema·codec·guard·service auth를 먼저 고정하고 serving=false owner-only MAP UX PARITY 구현·20개 회귀·잔여위험 15개 게이트·8개 상태 해소·운영 E2E를 완료한 뒤, 양수 revision·serving과 M5 공개 승인을 별도로 검토
JAUC-WORK-20260716-04카드 전체 상세 이동과 두인급 검색 적용성 재분류
물건 카드의 상세정보·상담신청 하단 버튼을 제거하고 카드 전체를 단일 상세 링크로 만들었습니다. 두인 전수조사 65개 기능계약과 75개 화면표면은 조사 완료와 제품 구현 완료를 분리해 4개 적용상태로 전수 분류했고, 검색은 실제 Court canonical taxonomy 11종·법원·지역·가격·유찰·기일 조건과 작동하는 하위 진입만 노출합니다.
- 소스
- 카드 단일 링크·검색 mode/preset·조건 chip·canonical taxonomy·적용성 matrix 구현
- 런타임
- 두인 계약 65개·표면 75개 분류와 실제 BFF query 계약 회귀검증
- 공개판
- 소유자 전용 Sites 데모·계획판 반영 · 미구현 기능은 완료로 표시하지 않음
- 검증 근거
- 현재 구현 8·즉시 보강 12·데이터/권한 선행 43·참고만 2 계약, 표면 6·18·49·2를 고유 ID로 대사하고 카드당 상세 링크 1개·하단 CTA 0개를 자동검증
- 남은 위험
- P0 live options/facets·예상건수·3단계 지역/담당계·목록 비교/관심/저장/인쇄/엑셀과 회원 전체상세·저장검색·상담 자동연결을 실제 데이터·인증 계약 순서로 구현
JAUC-WORK-20260716-05카카오맵·경매마당 2차 감사 이후 잔여작업 W0–W11 실행 분해
최신 정본 잔여작업 계획 SHA-256을 검증하고 M5_READY/FULL_RELEASE 두 착수모드와 단일 campaign 원장을 고정했습니다. W0·W1 병렬에서 W2–W9를 거쳐 W10 owner E2E·CT104·168시간 Shadow, 공개 전 1/10/50/100% 미러 canary, W11 M5 atomic 공개와 공개 후 24시간·7일 검증까지 한 캠페인으로 이어집니다.
- 소스
- 정본 SHA-256 547EB70A…56ECD6 검증 · campaign/lock/drift/168h/mirror/atomic 구조와 W0–W11·완료집합 20/15/15/8 반영
- 런타임
- 기존 owner-only /admin/map-shadow 유지 · 본 판본은 계획 반영 전용이며 M5_READY 제품 구현은 후속 작업에서 별도 착수
- 공개판
- MAP UX NOT PASSED · 공개 /map·별칭 404 · 공개 제품면 SDK 0건 유지
- 검증 근거
- node --test tests/map-shadow-runtime.test.mjs tests/map-search-plan.test.mjs 24/24 계획 회귀 기준선; 제품·운영 PASS로 승격 금지
- 남은 위험
- serving=true+positive revision 검증, durable rate rule 배포증거, cluster PUBLIC child 검증, release/upstream/revision cache namespace를 W2–W4의 첫 보완으로 처리
JAUC-WORK-20260716-06지도·마커·동일위치·상세전환·회원 연계를 owner-only 코드로 완결
M5_READY 범위의 same-origin 지도 BFF, PUBLIC v2 fail-closed 계약, 동일 위치 pagination, owner 진단, zoom별 overlay, URL·세션·새 탭 상태복원, 모바일 bottom sheet, 접근성, 현재위치 동의, 관심·저장검색·알림을 구현했습니다. 동시 멱등성·회원 소유권·CAS·exact Origin·공개 좌표 최소화·durable rate 증거를 독립 재검토해 결함도 함께 수정했습니다.
- 소스
- final HEAD 47271250d791e2a286272b110b0b6537c5e57cce · PUBLIC 동일좌표 location_group_id·same_coordinate_count 보존과 group route fail-closed까지 정렬 · 독립 최종 리뷰 P0/P1/P2 0건
- 런타임
- owner-only Sites v35 배포 성공 · env revision 5 · custom allowlist user 1/groups 0 · /admin/map-shadow 200 · 운영 AuctionHub image와 migration 144는 미배포
- 공개판
- MAP UX PARITY · NOT PASSED · 공개 /map·별칭 404 · 공개 제품면 SDK 0건 유지
- 검증 근거
- production build 포함 전체 218/218·지도 49/49·계획/렌더 24/24·lint·secret scan·diff check PASS; 390/1440px overflow 0, 동일좌표 sheet·새 탭·Esc focus·reload 복원과 SDK 장애 목록 유지 PASS
- 남은 위험
- M1 1,000건 승인, migration 144 적용과 AuctionHub image 배포, 전용 token·운영 IP·durable rule 증거, 전국 성능·owner live E2E·CT104 168시간 Shadow를 닫은 뒤에만 M5 공개 승인 검토
JAUC-WORK-20260717-0143개 선행조건 재분류와 회원·결제 fail-closed 기반 처리
기존 ‘데이터·권한 선행 43개’를 가능성 5·23·14·1, 실행 원천 11·17·15로 중복·누락 없이 재분류했습니다. 이는 구현 진척도가 아닙니다. 현재 상태는 기존 내부 구현 1, 스키마·계약 기반 7, 구현·승인·권리 확인이 남은 항목 35입니다. 표시 정본 기반 법률 hash와 동의 최신상태/철회시각, 회원탈퇴 gate, provider-neutral 결제 스키마·runtime trigger, 목적별 OFF인 DirectSend adapter 기반을 만들었고 두인 개인 결제자료는 0건 반입했습니다.
- 소스
- canonical terms/privacy/marketing·legal_documents/member_consents·billing products/prices/orders/events/entitlements/coupons/refunds·closure event·trigger-free legal migration 0005·owner runtime guard bootstrap과 회귀, /resources/links, /api/v1/legal/current 반영
- 런타임
- FOUNDATION ONLY · v46 owner bootstrap에서 ACTIVE/APPROVED 가격대사와 VERIFIED→PAID→ACTIVE 이용권 D1 trigger 11개를 hosted D1에 설치·exact SQL 대조했고, v47/env revision 10 재빌드에서 bootstrap을 503으로 폐쇄 · PG adapter/checkout/webhook 미연결 · 검토본 가입/OTP 503 · DirectSend live gate OFF · 탈퇴 코드판 DRAFT 503
- 공개판
- 공개 checkout·구매·환불·본인확인 0 · 약관/개인정보는 DRAFT_REVIEW_REQUIRED·noindex · 공식 사이트 링크만 공개
- 검증 근거
- 43개 ID 합계·중복·누락, 표시 정본/notice UTF-8 SHA, fresh·0000~0002·0000~0004 migration, 승인 가격·상태전이·VERIFIED event·PAID·이용권 gate, 가입·탈퇴 fail-closed 회귀로 고정
- 남은 위험
- 법원/공공데이터 23개는 public_id/runtime 수렴→법원·지역→신건·차량·통계·상세→온비드→자료실 순서로 연결; 실결제는 상품·가격·VAT·환불·PG/KYC·법률 승인 후에만 sandbox에서 live로 승격
JAUC-WORK-20260717-02AuctionHub·PostGIS 실DB 지도검색과 마커→상세 흐름 비공개 완결
owner-only /demo/map-search에서 AuctionHub/PostGIS의 실제 물건을 same-origin BFF로 조회하고, 카카오 지도 이동·휠 줌 뒤 280ms 자동조회, stale 요청 취소, cluster→dot→detail 밀도, 동일 공개좌표 sheet, 목록·마커·상세 public_id 동기화, URL·세션·스크롤·선택 복원과 Esc 포커스 복귀를 구현했습니다.
- 소스
- final HEAD 899bd5767825db963d18e0946ef41cec7f41469b · 41732a91 두인 기반과 Sites v41 계보 포함 · ops/ 추적 0건
- 런타임
- owner-only Sites v42 · env revision 6 · custom allowlist user 1/groups 0 · /demo/map-search 200+noindex · 100개 overlay/detail link 실DB 검증
- 공개판
- 공개 /map·/map-search·/search/map 404 · sitemap 제외 · 비소유자 map API 401 · FULL_RELEASE NOT APPROVED
- 검증 근거
- production build 포함 전체 246/246·focused 지도/DB 29/29·lint error 0; bbox total 6,627/first 100/has_more, 휠 zoom10→9 bbox 갱신, 선택 aria-pressed 1, 상세 동일 public_id, Esc dialog 0·focus 복귀, 금지 식별자 HTML 0
- 남은 위험
- raw upstream 정밀좌표·PNU·UUID 무인증 노출 차단, migration 144·PUBLIC v2·location_group_id 실응답, cluster count 302건 차이, owner 실제 Kakao SDK E2E와 168시간 Shadow를 닫기 전에는 공개하지 않음
JAUC-WORK-20260717-03승인 가격·검증결제 DB 강제와 법률 표시 정본 SHA 보강
두인 43개 재분류의 기반 7개를 다시 독립 감사해, TS 함수만 있던 결제 규칙을 hosted D1의 11개 trigger로 승격했습니다. Sites migration 전처리가 trigger 본문을 거부해 법률 정본 migration과 결제 guard 설치를 분리하고, 1회용 owner bootstrap이 D1 prepare·batch 설치 뒤 sqlite_master 이름과 SQL 정의를 exact 대조하도록 보강했습니다. ACTIVE 상품·APPROVED 가격·금액·통화·VAT가 맞아야 DRAFT 주문을 만들 수 있고 VERIFIED 결제 이벤트 없이는 PAID, PAID+VERIFIED 없이는 ACTIVE 이용권을 만들 수 없습니다.
- 소스
- code foundation e7ecba48774a2b3811c3f22d1ea18080b6bbdfc1 · trigger-free legal migration 0005 · owner-only runtime guard bootstrap · canonical legal version draft-2026-07-17-canonical-1
- 런타임
- v43~v45는 D1 trigger migration 전처리에서 운영 미반영 · v46/env revision 8 one-time bootstrap으로 hosted D1 11개를 2회 설치·대조 · revision 9의 key 제거가 같은 저장 판본 runtime을 닫지 못한 사실을 검출 · 무효 secret을 둔 env revision 10으로 v47을 새로 빌드·owner-only 재배포해 bootstrap 503을 확인
- 공개판
- checkout·webhook·환불·실문자·NICE/PASS·APPROVED 약관 0 · 공개 지도 별칭 404와 FULL_RELEASE NOT APPROVED 유지
- 검증 근거
- production build 포함 256/256 PASS · lint 0 · drizzle check PASS · fresh·0000~0002·0000~0004 migration upgrade·runtime guard 11/11 exact SQL 대조 PASS · secret pattern 0 · 지도 runtime·전용 map-* 6파일과 sitemap 공개경계 회귀 diff 0 · member-map-personalization migration journal 기대값 0004→0005 1줄 동기화 · rendered-html 계획 증거 단언 동기화 · ops 추적 0
- 남은 위험
- 상품·환불·쿠폰·법률 승인과 PG/NICE/DirectSend 사업자 계약이 끝난 뒤에만 별도 sandbox E2E를 만들고, 운영 승격은 webhook 대사·delivery callback·hosted D1 경합을 통과한 판본으로 제한
JAUC-WORK-20260717-04두인 전수조사 표 가로 넘침 제거
8열 전수조사 표의 최소 폭은 유지하되 표 컨테이너가 데스크톱 문서 전체를 넓히지 않도록 내부 가로 스크롤 경계를 고정했습니다. 680px 이하에서는 기존 카드형 변환을 그대로 사용합니다.
- 소스
- plan-surface-table의 wide table 계약을 유지하고 681px 이상에서 wrapper width/max-width 100%·overflow-x auto를 회귀검사로 고정
- 런타임
- exact production build의 1440px 로컬 렌더에서 document scrollWidth가 viewport 이하이고 전수조사 표만 내부 스크롤되는 것을 확인
- 공개판
- owner-only 접근정책 유지 · 공개 지도 별칭·SDK·FULL_RELEASE 상태 변경 없음
- 검증 근거
- production build·rendered HTML/CSS 회귀 PASS · 인앱 브라우저 1440px document overflow 0 · 표 container overflow-x auto
- 남은 위험
- Sites owner 허용계정의 운영 UI E2E와 실제 390px viewport 장치 검증은 별도 증거로 남기되 공개 전환 조건에는 포함하지 않음
JAUC-WORK-20260717-05지도 변경 증거 범위를 파일 단위로 정정
지도 runtime과 전용 지도 동작 테스트가 변하지 않았다는 판정은 유지하되, 전체 테스트가 무변경이라는 넓은 표현은 철회했습니다. 결제 migration 0005 추가에 맞춘 회원 지도 개인화 테스트의 journal 마지막 tag 기대값 1줄과 계획판 증거를 동기화한 rendered-html 변경을 별도 기록합니다.
- 소스
- 899bd576..13bde174 대조에서 app/admin/map-shadow·app/api/v1/lots/map·lib/map, 전용 map-* 6파일과 sitemap 공개경계 회귀 diff 0 · tests/member-map-personalization.test.mjs 기대값 1줄 · rendered-html 계획 증거 단언 변경 확인
- 런타임
- 지도 API·렌더·상태복원·보안 계약 변경 0 · migration journal의 최종 tag 검증만 0005_billing_runtime_guards로 동기화
- 공개판
- owner-only 접근정책 유지 · 공개 지도 별칭 404 · 공개 Kakao SDK 0 · FULL_RELEASE NOT APPROVED
- 검증 근거
- git diff 899bd576..13bde174 파일 단위 재대조 · 전체 테스트 무변경이라는 넓은 단정 제거 · corrected evidence 회귀검사 추가
- 남은 위험
- 후속 인수보고는 runtime·핵심 동작과 테스트 보조 동기화를 분리해 기록
JAUC-WORK-20260717-06최근 갱신 8건을 검증 가능한 추천 경매물건으로 교체
홈의 최근 갱신 제목과 현재 8건 문구를 제거하고 아파트 4건·근린주택 2건·공장 2건 우선 배분으로 교체했습니다. 진행중·향후 매각기일·유찰 1~3회를 필수로 하고, 최근 30일 실제 회원 관심등록·고유 열람은 정렬에만 반영하며 원점수와 회원정보는 공개하지 않습니다.
- 소스
- Geo/Court 목록의 정확한 3개 용도를 용도별 최대 100건 조회 · status=진행중·향후 기일·유찰 1~3회 fail-closed · 4/2/2 quota와 결정 정렬 · D1 30일 관심 aggregate 60초 cache · origin별 service token 분리 · LOT public_id 공개요약 detail bridge
- 런타임
- 2026-07-17 실원천 후보 300건에서 아파트4·근린주택2·공장2 총 8건 선별 · 8개 LOT 식별자 모두 일반 상세 공개요약 200 계약 대조 · 일반 원천 410 뒤 전용 Geo 서버 브리지가 좌표·PNU를 폐기하고 공개 allowlist만 반환
- 공개판
- 추천 제목·용도 우선순위·유찰 근거만 공개 · 소수 회원 활동의 원점수·회원식별자·권리 단순 미검증 문구 0 · 공개 지도 별칭 404·Kakao SDK 0·FULL_RELEASE NOT APPROVED 유지
- 검증 근거
- production build 포함 전체 264/264 PASS · 홈 추천 대상 회귀 8/8 PASS · 실원천 3종 300건 조회 및 추천 8건 선별 · 추천 8건 상세 page 8/8 HTTP 200·canonical path PASS · origin credential 교차전송 0 · 원좌표·PNU·정확한 관심점수 공개 0
- 남은 위험
- 권리분석 ready·confidence≥0.75·특수권리 0·임차인 수동검토 0·말소기준권리 존재를 함께 만족하는 전용 추천 projection을 구축합니다. 현재 실측은 아파트 69건·근린주택 0건·공장 0건이며 여기에 실제 회원활동까지 겹친 건은 0건이므로, 충족 전에는 권리관계 단순·고관심 배지를 만들지 않습니다.
JAUC-WORK-20260717-07고객관리 중심 운영허브와 개인정보 최소 접속분석 구현
운영허브의 첫 화면을 고객관리로 교체하고 가입 고객·로그인 활동·관심·최근열람·저장검색·알림·상담 전체 집계와 방문 세션·페이지뷰·최초 유입·랜딩·7일 추세를 한 화면에 연결했습니다. 방문 세션은 사람 수로 표현하지 않고 수집 전·실측 0·DB 장애를 구분하며, 고객 연락처는 목록과 상세 모두 마스킹합니다. 가입 고객이 0명일 때는 실제 데이터·검색·KPI와 분리된 표시용 테스트 예시 1건만 제공합니다.
- 소스
- 공통 sticky 관리자 헤더 8개 카테고리 · /admin 고객관리 기본화면 · /admin/analytics · /admin/customers/{id} · analytics_sessions/page_views · 0006 D1 migration · same-origin 4KiB 수집 API · 탭 세션 SHA-256·30분 회전·500뷰 cap
- 런타임
- owner-only Sites v52 · custom allowlist user 1/groups 0 · 기존 회원·활동·상담은 D1 사실값으로 조회 · 방문·유입은 배포 이후 신규 수집만 표시 · 고객 0명 상태의 예시 1건은 D1·KPI·검색·상세 링크에 들어가지 않는 display-only 행 · 과거 backfill 0
- 공개판
- 현재 접속 통계는 운영자·검수 트래픽일 수 있어 운영지표가 아님을 화면에 고정 · IP·원 UA·전체 referrer·검색어·PNU·좌표·원 세션·비밀번호 저장/표시 0 · 관리자 noindex·robots 차단·sitemap 0 · 공개 지도 별칭 404와 FULL_RELEASE NOT APPROVED 유지
- 검증 근거
- production build 포함 전체 277/277 PASS · 고객 0명 예시 1건·KPI 0 유지·검색 혼입 0·가짜 상세 링크 0 회귀 PASS · 실제 SQLite migration과 세션1·페이지뷰3·중복 event 1회 대사 · 상담 KPI LIMIT 100과 무관한 전체 COUNT · 전화/이메일 q 검색 0 · 추정 상담 연결 0 · 마스킹 HTML/RSC 회귀 · lint·drizzle check·diff-check PASS · ops 추적 0
- 남은 위험
- 공개 전 개인정보 처리방침에 분석 항목·보존기간을 승인하고 daily rollup/retention을 운영화합니다. 회원-상담 연결은 consultation_requests.member_id를 명시 저장하는 후속 migration 이후에만 열며, 전체 사이트를 public으로 전환하기 전 /admin 전용 edge access를 별도 유지합니다.
JAUC-WORK-20260717-08추가 생산면 전수대조와 종합 완성본 통합계획 확정
세션 019eea6e-17ee-7340-83dd-c070dc83396c의 Court 최신성·문서 보강·관리비·관공서·비교사례·배당·건축물대장·토지대장·공시가격·학군·학교알리미·관리사무소 자동화·계약 자가복구를 현재 제품계획과 대조했습니다. 검증된 상위 생산면과 아직 없는 제이옥션 소비면을 분리하고, 공식 원천→raw→normalized→canonical→publication→same-origin BFF→화면의 단일 이관 캠페인과 완료 게이트를 REV 20에 고정했습니다.
- 소스
- Court master·4대 canonical API·공공 ledger 5개 route·K-apt 연락처·15개 공공 timer·5분 contract guard의 외부 실행 증거 확인 · OpenAPI 136 path/기존 domain route 11개와 후속 후보 9개 capability inventory 완료
- 런타임
- 20:30 freshness guard는 OK지만 GF required=true와 두인 watch active가 source-policy debt로 잔존 · K-apt 월 관리비 3개월 실호출은 HTTP 403 · 제이옥션 전용 outbox·service auth·9개 same-origin BFF·화면 소비자는 미접목
- 공개판
- owner-only Sites 계획판만 갱신 · 외부 검증 도메인은 source evidence일 뿐 제이옥션 제품 의존 0 · 공개 지도 별칭 404와 FULL_RELEASE NOT APPROVED 유지
- 검증 근거
- 추가 세션 산출물·현재 통합 계약 4+5 route·OpenAPI 136 path/기존 11 route/후속 후보 9개·2026-07-17 20:30 freshness·K-apt 403·timer/자가복구·금지필드를 독립 대조하고 전용 계획 회귀검사에 고정
- 남은 위험
- C0 증거 동결→C1 경계 정정→C2 GF·두인 신규 write/required 종료→C3 schema bridge→C4 service auth→C5 same-origin BFF→C6 UI→C8 7일 shadow→C9 별도 공개 승인 순서로 실행
JAUC-WORK-20260718-01실데이터 검색에서 물건 상세까지 단일 데모 연결
내부 제품투어보다 실제 검색을 먼저 볼 수 있도록 /demo 첫 화면에 기존 Court 상세검색 모듈을 그대로 배치했습니다. 사건번호·주소·법원·지역·용도·가격·유찰횟수·매각기일을 조합해 same-origin BFF로 조회하고, 실데이터 카드 전체를 클릭하면 응답의 detail_path로 공개요약 상세에 진입합니다.
- 소스
- SearchPanel·LotResultsServer·LotResultsClient·LotDetailView 기존 계약 재사용 · 검색폼을 데모 최상단으로 이동 · 3단계 사용 안내 · synthetic LOT ID·fixture·prototype 주입 0 · 카드 하단 중복 버튼 0
- 런타임
- 2026-07-18 Court BFF 목록 200·/demo 실카드 4건·진행물건 검색 20건·첫 detail_path 상세 200 대조 · 일반 Court의 public_id 부재는 검증된 detail_path_slug canonical_id와 사건번호 fallback으로 복구
- 공개판
- Sites custom allowlist user 1/groups 0 유지 · /demo noindex · 공개 지도 별칭 404 · Kakao SDK 공개면 0 · FULL_RELEASE NOT APPROVED
- 검증 근거
- production build 포함 전체 288/288 PASS · 검색·결과·상세 대상 21/21 PASS · 390·768·1440px document overflow 0 · 실데이터 목록→detail_path→상세 HTTP 200 · 공개 지도 별칭 3개 404
- 남은 위험
- 동적 facet의 regions·sigungu·taxonomy 명칭을 공개 계약에 정렬하고, fixed revision·snapshot·query_hash가 갖춰진 뒤에만 전체 pagination과 6종 서버 정렬을 활성화합니다.
JAUC-WORK-20260718-02경매마당 전수조사 기반 입찰가 분석과 회원 시나리오 원장 확장
경매마당의 검색·지도·상세·분석·저장·알림 흐름과 공개 안내에 드러난 입력 항목을 사실·추론·미검증으로 분리해 조사했습니다. 제이옥션에는 공개 물건 상세에서 입찰가 분석으로 이어지는 연결, 원 단위 BigInt 결정 산식, 목표수익·목표 ROI 동시 상한, 서버 재계산, 입력·결과·면책 버전과 해시를 보존하는 회원별 D1 시나리오 원장을 독립 구현했습니다.
- 소스
- formula-core bid-analysis v1 · strict same-origin API · /mypage/bid-analysis · member_calculation_scenarios migration 0007 · 한국어 전수조사 보고서
- 런타임
- 분석은 로그인 없이 서버 산식으로 실행 · 회원 저장은 서버 재계산과 멱등키·회원 소유권을 강제 · 현행 약관·개인정보처리방침이 DRAFT_REVIEW_REQUIRED이므로 신규 저장은 503으로 차단하고 기존 기록 조회·삭제 경로는 분리
- 공개판
- owner-only Sites 정책 유지 · 계산 화면 noindex · 공개 지도 별칭 404 · 공개 Kakao SDK 0 · FULL_RELEASE NOT APPROVED
- 검증 근거
- 기준 벡터·1원 ROI 경계·보수적 반올림·무해시 위조 무시·회원별 목록/삭제 격리·origin 403·비인증 401·법률 미승인 503·migration CHECK/FK·SSR noindex 회귀와 production build 검증
- 남은 위험
- 법률 정본 APPROVED와 회원 동의 원장이 갖춰진 뒤에만 신규 저장을 활성화하고, 세후·복리·대출상환표·권리/배당 자동 입력은 별도 공식 기준일·근거·산식 버전 승인을 거쳐 확장합니다.
JAUC-WORK-20260718-03기존 전수조사와 최신 구현을 단일 최종 제작계획으로 재정렬
REV20 이후의 실데이터 검색→상세, 추천 8건, 고객관리 운영허브, owner 실DB 지도 데모, 입찰가 분석과 회원 시나리오까지 다시 대조했습니다. 구현 완료·owner 검증·부분 구현·외부 권한 게이트를 분리하고, 38개 화면과 Court 증분·식별자·9개 보강 BFF·회원·결제·상담·SEO·CT104 도메인 전환을 C0–C9 한 캠페인으로 고정한 REV21 제작 정본을 작성했습니다.
- 소스
- docs/JAUCTION_FINAL_PRODUCTION_MASTER_PLAN_REV21_2026-07-18.md · Court/official/GF·두인·경매마당 역할 분리 · 공개 canonical_id는 public_id 우선/검증된 detail_path_slug 임시 호환 · LOT-*는 검색·상세·지도 공통이며 Geo는 별도 위치 projection
- 런타임
- 실검색·상세·추천·달력·입찰분석·운영허브·owner 지도 데모는 재사용 · 일반 Court public_id/facet/revision·상세 보강 BFF 0/9·hosted D1 0007·법률/결제/SMS·CT104 공개·지도 PUBLIC은 잔여 게이트
- 공개판
- Sites owner-only 유지 · 공개 지도 별칭 404 · 공매 lotSearch NOT_CONNECTED · 결제 disabled · DRAFT 법률 시 가입/회원 저장 fail-closed · FULL_RELEASE NOT APPROVED
- 검증 근거
- 비-API 화면 38개 전수분류 · 실 Court 목록→detail_path→상세 200 · production build 포함 전체 306/306 PASS · lint·Drizzle check PASS · screen examples 24 PNG와 SHA-256 manifest · REV21 상태·단계·완료정의 전용 회귀 4/4 PASS
- 남은 위험
- C0 재현 기준선→C2 민간 원천 종료→C3 public_id/projection→C4 outbox/service auth→C5 9개 BFF→C6 화면완성→C8 168시간 Shadow→C9 FULL_RELEASE_READY와 PUBLIC_GO_LIVE 순서로 제작합니다.
JAUC-WORK-20260718-0443개 선행조건을 사용자 7개 권한 결정으로 압축
저장소·D1 migration·Sites env revision 10·외부 provider gate·REV21을 다시 대조해 지금 제출해야 할 기술자료는 0건으로 판정했습니다. 43개 기능 선행조건 중 구현·공공자료 연결·테스트·배포·DNS·복구는 Codex 실행으로 유지하고, 대리할 수 없는 법률·가격·PG KYC·문자 과금·운영자 신원·지도 상업이용·전체 공개만 7개 시점별 결정으로 묶었습니다.
- 소스
- docs/JAUCTION_USER_AUTHORITY_MINIMUM_HANDOFF_REV22_2026-07-18.md · dooin prerequisite 43건=현재기반 5+공공자료 23+사용자/사업자 14+보류 1 · 사용자/사업자 14건은 중복 권한을 합쳐 7개 결정으로 정규화
- 런타임
- Sites v56/env revision 10 · billing/SMS/account-closure OFF · Kakao shadow · intranet disabled · secret 값은 채팅·HTML·Git에 노출하지 않고 key inventory와 E2E 결과만 대사
- 공개판
- owner-only 유지 · 기술 구현은 사용자 입력 없이 계속 · 법률/가격/PG/SMS/지도/공개 게이트가 승인되기 전 해당 기능만 fail-closed · FULL_RELEASE NOT APPROVED
- 검증 근거
- 현재 저장소·REV21·43개 선행조건·법률/결제/SMS/지도/회원/인트라넷 환경키 전수대조 · 사용자 즉시 입력 0 · 사전결정 7 · 조건부 잠금해제 5 · Codex 전담영역 14
- 남은 위험
- 사용자에게는 해당 기능 활성화 직전에만 한 화면의 한 결정을 요청하고, 그 전까지 Court·BFF·UI·D1·보안·SEO·배포 준비를 중단 없이 진행합니다.
JAUC-WORK-20260719-01Court 증분 피드와 고정 판본 검색·상세 소비 경계 구현
기존 LOT-* 공개 ID를 재발급하지 않고 동결한 채, 8종 REV21 event 계약, 전용 service-auth feed, D1 inbox·cursor·DLQ·projection, bounded drain, 서명 cursor, 고정 판본 목록·상세와 alias 301·withdrawn 410을 구현했습니다. release triple 변이·미해결/ABANDONED DLQ·암묵적 비공개 전환은 공개 승격하지 않고 fail-closed로 차단합니다.
- 소스
- LOT-[A-F0-9]{20} 기존 공개 ID 동결 · producer migration/feed/publisher 보강 중 · 실제 계보·aggregate version·append-only 교차검수 진행
- 런타임
- D1 migration 0008 · Court service-auth consumer · 최대 25페이지/1MiB stream bounded drain · body 포함 8초 timeout · BUILDING/ERROR/ABANDONED 공개 차단 · immutable release triple · HMAC 검색 cursor · fixed revision 목록/상세 409 · DLQ 0 승격 게이트
- 공개판
- 기존 공개 검색·상세 유지 · owner-only 배포에서 shadow/off만 허용 · 달력·facet·법원·9개 보강 BFF와 replay/outbox delivery는 잔여 게이트 · FULL_RELEASE NOT APPROVED
- 검증 근거
- Court 계약·migration·멱등·충돌·DLQ·BUILDING·고정 판본·서명 cursor·stream byte/timeout·taxonomy·명시 withdrawal·301/410/409 회귀와 production build 검증 · 운영 producer/D1/Sites 최종 수치는 구현검수 보고서에 별도 기록
- 남은 위험
- producer 실증거와 append-only/aggregate version을 닫고 전체 D1 bootstrap·DLQ 0·건수 대사·p95를 통과한 뒤에만 authoritative를 검토합니다. replay·projection outbox 전달과 나머지 BFF는 완료 전 상태로 유지합니다.
AUTONOMOUS DELIVERY OPERATING MODEL
사용자는 실행하지 않고
Codex가 끝까지 처리
정상 구현·운영 작업은 사용자 직접 실행 0건 · Codex가 현재 상태 확인부터 구현, 데이터 연결, 테스트, 배포, 운영 검증, 증거 보존과 복구까지 한 흐름으로 처리합니다. 사용자에게 명령 실행·파일 복사·환경변수 편집·DNS 레코드 입력·수동 배포를 넘기지 않습니다.
A/B는 사용자 행동 0 · C만 한 화면의 한 행동
저장소·코드·스키마·테스트·문서·보고서·주기 작업을 Codex와 자동화가 처리
이미 허용된 계정·세션·secret·SSH 범위에서 Codex가 외부 설정·배포·검증까지 처리
대리할 수 없는 신원·법률·비용·민감 접근·파괴 작업·전체 공개만 한 화면의 한 행동으로 요청
14개 전 영역 실행 책임표
기술 실행은 Codex · 신규 권한과 최종 사업판단만 사용자| 영역 | Codex가 처리 | 완료 증거 | 사용자 개입 경계 |
|---|---|---|---|
| 조사·요구사항·원장 | 참조 작업·공개면·승인 세션·현재 소스·런타임을 대조하고 누락 없는 요구사항과 작업 ID를 유지 | 보고서·증거 JSON·계획판·변경이력 | 없음 |
| 두인·GF 참고 조사 | 이미 승인된 세션에서 누락 화면을 확인하고 65개 기능계약·75개 표면·210 URL과 SEO benchmark를 동결 | 기능 계약·증거등급·REFERENCE_SNAPSHOT | 세션 잠금의 비밀번호·2FA만 직접 해제 |
| UI·페이지·접근성 | 화면·반응형·표·문단 간격·키보드·모바일을 구현하고 빌드·브라우저 회귀까지 수정 | 320~1440px·의미구조·링크·폼 E2E | 브랜드 문안의 최종 사업 판단만 필요할 때 승인 |
| Court 파서·소비자 | 생산자 상태를 보존한 채 schema/outbox/cursor/inbox/DLQ/replay와 검색·상세·달력 projection을 구현 | 원문→hash→event→projection 100% 계보 | 운영 중 프로세스의 파괴적 재시작이 불가피할 때만 승인 |
| DB·migration·백필 | migration·rollback·hash ledger·백필·정합성 대사·복구 rehearsal을 작성하고 실행 | 전후 row/hash·rollback·오병합 0 | 데이터 영구삭제나 되돌릴 수 없는 변경만 승인 |
| 공공데이터·온비드 | 활용현황 확인, secret 반영, 전체 pagination, LKG 승격, 일간 동기화와 quota 차단을 운영 | resultCode·합계·계층·비밀노출 0 | 신규 활용신청의 본인/KYC·약관 동의만 직접 수행 |
| Proxmox·작업 런타임 | timer/service/container·경로·권한·보관주기·상태점검·로그·경보·롤백을 구성 | 실행원장·timer 상태·재부팅 후 복구 | 호스트 파괴작업·유료 증설만 승인 |
| Cloudflare·Sites·DNS | 기존 승인 세션과 정해진 대상에서 zone·secret·tunnel·Sites 판본·DNS·TLS·공개 검증을 처리 | commit→version→deployment→HTTP 증거 | 대상 도메인 변경 또는 private→public 최종 전환만 승인 |
| 회원·관리자·보안 | 인증·객체 소유권·CSRF·암호화·감사·보존·키 회전·권한 우회 E2E를 구현 | 익명·회원·운영자 권한 행렬과 PII 노출 0 | 비밀번호·2FA·CAPTCHA·본인확인만 화면에서 직접 수행 |
| 결제·알림·외부사업자 | sandbox 연동·webhook 멱등·환불·이용권·알림 실패복구와 운영 대사를 구현 | sandbox 전 과정·중복과 누락 0 | PG 계약·정산계좌·유료결제·요금제 선택은 승인 |
| SEO·공개 전환 | canonical·robots·sitemap·RSS·IndexNow·Search Advisor·SERP 코호트와 서버로그를 분리 검증 | UA/alias/lifecycle 행렬·4주/8주 증거 | 대표 공개도메인과 전체 공개 시점의 최종 승인만 필요 |
| 지도·외부 provider | 공급자 비교·키 제한·BFF·PostGIS·좌표 품질·접근성·비용 차단·fallback을 구현 | 1,000건 품질표본·비용/SLO·약관 체크리스트 | 유료요금·상업이용 약관·제3자 제공의 사업/법적 승인 |
| 배포·운영·복구 | 테스트·commit·Sites 배포·공개 URL 검사·관측·backup·롤백·장애복구와 결과 artifact를 완료 | 배포판 SHA·운영 HTTP·복구시점·남은 위험 | 서비스 중단을 동반한 비가역 cutover만 승인 |
| 법률·출처·정책 | 원문 URL·조회시각·hash·parser/contract version·권리상태·출처표시와 수수료·약관·개인정보 정책 초안/버전원장을 유지 | 정책 diff·승인판·시행일·공개 출처 계보 | 대표 또는 법률전문가의 최종 사업·법률 판단만 승인 |
확인→구현→검증→배포→운영→복구의 단일 실행루프
현재 파일·런타임·외부 승인상태를 먼저 읽고 증거면을 섞지 않음
가장 중요한 계약부터 작은 단위로 구현하고 즉시 정적·동적 결과 확인
단위·통합·렌더링·권한·데이터 계보·회귀를 실행하고 실패를 같은 턴에 수정
정확히 검증한 소스를 commit·패키지·Sites 판본으로 배포하고 운영 URL을 확인
timer·queue·freshness·quota·로그·알림과 공개 상태를 증거 원장으로 지속 대사
LKG·rollback·DLQ replay·backup 복원으로 복구하고 원인·범위·재발방지를 기록
사용자에게만 남는 6개 권한 게이트
사용자가 해당 화면에서 1회 해제하면 Codex가 이후 설정·검증을 계속 수행
검토 초안·차이표·시행판은 Codex가 만들고 최종 의사결정만 요청
금액·기간·해지조건을 정리해 승인받고 기술 설정은 Codex가 처리
권한 모델·최소권한 후보·감사계약은 Codex가 만들고 실제 신원 지정만 요청
백업·dry-run·rollback 증거를 먼저 만들고 정확한 대상과 영향에 한해 승인 요청
이미 승인된 대상 안의 routine 배포는 Codex가 처리하고 공개 범위가 바뀔 때만 최종 확인
실제 현재 사용자 제공 최소목록
TECHNICAL IMPLEMENTATION CONTINUES WITHOUT USER INPUT기술 구현은 지금 바로 계속합니다. 43개 기능 선행조건은 사용자 43개 요청이 아니며, 실제 대리 불가 항목은 활성화 시점별 7개 결정입니다.
코드·데이터·테스트·비공개 배포 준비를 막는 입력 없음
법률·가격·PG·문자·운영자·지도·전체 공개
실제로 해당 상황이 발생할 때만 한 번 요청
구현·자료연결·검증·DNS·배포·복구까지 포함
| ID·시점 | 결정 | 이미 준비된 것 | 사용자에게 받을 것 | Codex가 처리 | 대기 중 영향 |
|---|---|---|---|---|---|
U-01회원·결제 공개 전 | 법률 문서 4종 승인 | 이용약관·개인정보·마케팅 선택동의·회원탈퇴정책 초안과 UTF-8 hash·D1 fail-closed 원장이 준비됨 | 내용·시행일·보유기간·위탁사·환불/책임 문구를 최종 승인하거나 수정사항만 전달 | Codex가 redline·승인판·hash·migration·동의원장·화면·회귀·배포를 처리 | 미승인 동안 가입·신규 회원저장·SMS·결제만 닫고 검색·상세 개발은 계속 |
U-02가격·계약 공개 전 | 가격표·VAT·환불·입금정보 확정 | 현재 멤버십·낙찰수수료·최저수수료·VAT·예금주·입금계좌가 기존 제공값으로 사전 입력됨 | 현재 값을 그대로 승인하거나 바꿀 항목만 지정하고 자동갱신·무료체험·쿠폰·부분환불 기준을 선택 | Codex가 서버 가격표·버전·계약서·쿠폰·환불 산식·표시·테스트를 처리 | 승인 전에는 ACTIVE 상품·checkout·계약 확정 문구를 열지 않음 |
U-03유료 이용권 활성화 전 | PG 계약·KYC·정산계좌 | KRW 정수·서버 가격검증·주문 상태전이·웹훅 멱등·이용권 fail-closed 스키마가 준비됨 | Toss 직접 또는 PortOne 경유 PG를 선택하고 사업자 심사·MID·정산계좌 계약을 본인 권한으로 완료 | Codex가 sandbox·checkout·webhook·query-back·환불·영수증·정산대사·secret 등록을 처리 | 계약 전 결제는 disabled이며 무료 검색·상담 구현과 무관 |
U-04OTP·상담문자 활성화 전 | 문자 발신·과금 승인 | DirectSend 계정·API key·발신번호 inventory와 OTP/상담 adapter는 존재하고 live flag는 모두 OFF | 등록 발신번호와 과금 가능한 실발송 1건을 승인하고 provider가 요구할 때만 로그인·2FA를 직접 해제 | Codex가 fixed egress/IP·rate limit·delivery 결과·재시도·수신거부·목적별 flag E2E를 처리 | 승인 전에는 실제 문자와 계정복구만 닫고 in-app 기능은 계속 |
U-05직원 운영계정 추가 전 | 관리자·상담담당자 실명 지정 | Sites owner 1명과 JAUCTION_ADMIN_EMAILS secret inventory가 있으며 현재 owner 검수는 가능 | 현재 관리자 1명 유지 여부만 확인하고 추가 인원이 있으면 회사 이메일과 역할만 지정; 비밀번호는 제공하지 않음 | Codex가 RBAC·최소권한·마스킹·PII_VIEWED·배정·감사로그·초대/회수 절차를 처리 | 미지정 시 현재 owner-only 운영을 유지하고 추가 직원 접근만 보류 |
U-06공개 지도 활성화 전 | 카카오맵 상업이용·비용·좌표 승인 | canonical Kakao app 1514962·등록 도메인·M2A·owner 실DB 데모·1,000건 측정이 준비됨 | 상업이용 조건·월 비용상한을 승인하고 미해결 7건과 1km 초과 41건의 최종 판정 책임자를 지정 | Codex가 이상치 패킷·PUBLIC v2·migration·rate limit·168시간 Shadow·canary·rollback을 처리 | 승인 전 공개 지도 3개 별칭만 404이며 목록·검색·상세는 영향 없음 |
U-07전체 기술 게이트 통과 후 | PUBLIC_GO_LIVE 최종 승인 | jauc.co.kr·Cloudflare·CT104·Sites owner-only·rollback 목표가 확정됨 | FULL_RELEASE_READY 증거 묶음을 확인하고 전체 공개 시점과 허용 점검창을 1회 승인 | Codex가 DNS·TLS·Host/CORS·canonical·robots·sitemap·canary·24시간/7일 관측·복구를 처리 | 승인 전 owner-only를 유지하며 공개로 임의 전환하지 않음 |
이미 받은 정보 · 다시 요청하지 않음
| 영역 | 확인 상태 | 처리 원칙 |
|---|---|---|
| 도메인·호스팅 | jauc.co.kr와 Cloudflare/Hosting.kr 계정 준비 이력 | 재요청하지 않음 · 세션 잠금 때만 C-01 |
| 회사정보 | 법인명·대표·사업자번호·주소·전화·개인정보책임자·이메일 | 현재 제공값으로 화면·문서 사전채움 |
| 컨설팅 | 절차·멤버십·수수료·입금정보 초안 | U-02에서 변경분만 확인 |
| Court 데이터 | 실행 중 producer·AuctionHub 검색/상세/달력·raw/hash 원장 | 사용자 파일 전달 없이 outbox/BFF로 연결 |
| 공공데이터 | 온비드 service key inventory와 용도코드 정상 snapshot | 기존 승인 API는 Codex가 직접 동기화 |
| 카카오맵 | app 1514962·JS 도메인·owner 실DB 데모 | U-06 전까지 shadow에서 Codex가 보강 |
| 문자 | DirectSend credential·sender inventory와 adapter | U-04 전까지 live OFF로 테스트 |
| Sites | 프로젝트·D1·custom owner 1명·env revision 10 | 버전 저장·비공개 배포·운영 검증은 Codex가 수행 |
발생할 때만 요청하는 조건부 5건
사용자가 해당 화면만 1회 해제 · 자격증명은 채팅으로 받지 않음
Codex가 신청서·목적·트래픽을 채우고 최종 본인동의만 요청
대상 시스템과 책임자만 지정하면 endpoint·서명·재시도·감사는 Codex가 구현
Codex가 backup·dry-run·rollback을 먼저 만든 뒤 정확한 대상과 점검창만 승인 요청
저자·권리·공개범위만 확인받고 CMS·R2·버전·철회·출처처리는 Codex가 수행
사용자에게 일을 넘기지 않는 규칙
- 01사용자에게 터미널 실행·파일 편집·env/secret 복사·DNS 입력·배포·테스트·사이트맵 제출·재시도·복구를 시키지 않음
- 02C 요청은 한 화면에서 한 행동만 제시하고 비밀번호·OTP·secret 값을 채팅으로 받지 않음
- 03C가 한 영역을 막아도 관련 없는 A/B 구현·검증·문서·배포 준비는 계속 진행
- 04실행 중 Court worker는 sidecar·additive migration·shadow replay를 우선하고 무승인 재시작 0건 유지
- 05외부 변경마다 대상·시각·deployment/snapshot/hash·rollback·운영 smoke를 작업 원장 proof로 남김
현재 남은 구현도 사용자가 아니라 Codex 실행대상
| 단계 | Codex가 끝낼 작업 | 책임 | 자동 증거 | 외부 승인·재개 조건 |
|---|---|---|---|---|
| P0 | Court raw 증거 열·event key·WON-SEO 금지 fixture | CODEX | schema·migration·10,000건 alias/event 대사 | DESTRUCTIVE_DOWNTIME 발생 시에만 승인 후 재개 |
| P1 | Court outbox/cursor/inbox/DLQ, 9개 canonical enrichment schema bridge와 온비드 Proxmox 일간 runner·versioned store | CODEX | 증분 멱등 E2E·raw→canonical lineage·재부팅 후 timer·LKG 자동 승격 | 활성 worker 재시작 없이 sidecar로 진행 |
| P2 | 단일 HTTPS canonical·지역/법원/용도 허브 | CODEX | 별칭 1회 301·고아 상세 0·thin facet noindex | 대상 도메인이 바뀔 때만 PUBLIC_GO_LIVE 확인 |
| P3 | PUBLIC_INDEX 4종 SSR 사실표·관련사건·출처 drawer와 건축물·토지·관공서·학교·관리비·비교사례·배당 UI | CODEX | 실물건 100건 값·단위·상태·계보 100% | 없음 |
| P4 | 일반회원 인증·관심·최근·저장검색·알림·결제 sandbox | CODEX + AUTHORITY | 권한·webhook·환불·이용권 E2E | PG 계약·KYC·실결제에서만 PAID_CONTRACT_KYC |
| P5 | 상담 관리자·CRM·보존·키회전 운영 완결 | CODEX + IDENTITY | 목록·복호화·PII_VIEWED·보존 E2E | 세션 잠금은 AUTH_UNLOCK, 관리자 신원은 SENSITIVE_ACCESS_IDENTITY |
| P6 | Court·공공보강 freshness/source sunset와 지도 1,000건 PostGIS/BFF shadow | CODEX + COMMERCIAL | 민간 required/new write 0·connector watermark·좌표 정확도·접근성·비용/SLO 증거 | 유료 provider·상업약관만 LEGAL_ACCEPTANCE/PAID_CONTRACT_KYC |
| P7 | WON-SEO-01~10·sitemap/RSS/IndexNow·보안/성능 | CODEX | 대표 공개판 전 기술 게이트와 전송 증거 | 전체 검색 공개 직전에만 PUBLIC_GO_LIVE |
| P8 | 운영자→회원→일부→전체 점진전환·복구훈련 | CODEX + PUBLIC | 모든 배포·관측·롤백·복구 증거 | 전체 공개 시점만 PUBLIC_GO_LIVE, 그 외 Codex 계속 |
자율 실행 완료 게이트
열린 작업 100%에 owner class·executor·trigger·proof·rollback을 기록
터미널·파일·env·DNS·배포·테스트·제출 수동지시 0건
비밀번호·OTP·service key의 채팅·Git·HTML·URL·로그 전달 0건
C 대기 중에도 관련 없는 A/B 작업 중단 0건
모든 외부 B 변경에 rollback과 공개 smoke 증거 존재
활성 Court worker 무승인 재시작·중단 0건
private→public은 PUBLIC_GO_LIVE 1회 명시 승인과 전후 접근 검증
REFERENCE UI · COURT-SOURCED DATA
잘 만든 기능은 참고하고
운영 사실은 대법원에서만 갱신
GF Auction + 두인경매
검색조건, 목록 밀도, 선택작업, 상세 증거실, 관심물건, 회원·관리자 흐름을 독립 컴포넌트와 자체 API 계약으로 다시 구현합니다.
운영 파싱 · 자동로그인 · 신규 데이터 write 없음대한민국 법원경매정보
신건·사건·물건·기일·상태·결과를 증분 파싱하고, 원문·조회시각·해시·파서 버전을 보존해 검색과 상세에 반영합니다.
PERMANENT_PRIMARY · 민간 fallback 없음원천 생명주기와 종료 계약
대법원경매정보
법원경매 운영 데이터의 유일한 지속 원천
- 허용
- 신건·사건·물건·기일·상태·결과·공개문서의 제어된 증분 파싱
- 금지
- 두인·GF 값으로 자동 보충 또는 장애 fallback
- 종료
- 없음 · 화면/주소 변경 시 parser adapter만 교체
두인경매
검색·상세·회원 기능과 정보구조 구현 참고
- 허용
- 승인된 개발 세션에서 Codex가 읽기전용 기능 비교와 E2E 요구사항 작성
- 금지
- 운영 cron·자동로그인·데이터 동기화·canonical write
- 종료
- 65개 기능계약·75개 표면 승인 시 snapshot 동결, 운영 자격증명 삭제
경매마당
지도 marker·동일 위치 sheet·상세 전환·상태 저장·모바일 UX 구현 참고
- 허용
- 2026-07-16 정본의 동결된 기능 계약·복제 금지 사례·회귀 기준만 사용
- 금지
- 운영 API 호출·좌표/PNU/m_code/g_code·이미지/타일 복제·자동로그인·canonical write
- 종료
- MAP UX PARITY P0/P1·20개 회귀·잔여위험 15개 게이트·8개 상태 해소 승인 후 snapshot 동결, 운영 의존 0건 유지
GF Auction
화면·업무 흐름과 상담 전환 기능의 구현 참고
- 허용
- 동결 snapshot을 기능 계약과 E2E 요구사항 작성에만 사용
- 금지
- 운영수집·자동로그인·신규 사건 공급·canonical write
- 종료
- 기능 계약 승인 시 snapshot 동결, 운영 credential·outbound 0건
온비드 코드·주소 15157768
온비드 용도코드의 일간 정본 후보와 주소 선택조건 조회
- 허용
- 서버 batch 코드 snapshot·조건별 주소 cache·공식 API 계보 보존
- 금지
- 브라우저 직접 호출·Court 코드 병합·주소를 좌표/PNU로 승격
- 종료
- 서비스 폐기 시 새 공식 코드 API로 교체하고 마지막 승인 snapshot 유지
온비드 용도코드 15121030
2023-12-31 388행 초기 적재·회귀 fixture·코드 LKG
- 허용
- 원문 CSV/자동변환 API 보존, 15157768 diff·계층 대조
- 금지
- 실시간 물건·주소 원천 또는 일간 운영정본으로 표시
- 종료
- 15157768 장기 검증 뒤에도 immutable 회귀 증거로 보존
제이옥션 PostgreSQL·PostGIS
Court 파싱값과 서비스 데이터를 보관하는 내부 원장
- 허용
- raw lineage·canonical value status·projection·회원/CRM 자체 데이터
- 금지
- 저장 DB 값 자체를 법원 사실의 출처로 간주
- 종료
- 계속 사용 · 사실 정본과 저장 정본을 명확히 분리
대법원 장애 때는 마지막 정상판과 stale 사유를 표시하고 재시도·격리·경보만 수행합니다. 유료 민간자료로 자동 우회하지 않습니다.
Court 변경이 화면에 도착하는 8단계
목표: 중요 변경 ingest→public p95 15분법원·날짜·사건 상태별 cursor로 신건·기일·결과 목록을 순회하고 last_seen checkpoint 저장
당일/향후 7일 기일, 방금 공고된 신건, 변경 감지 사건을 hot queue에 배치
사건·물건·기일·목록·현황·공개문서를 parser contract별로 분리 수집
원문, URL, HTTP 상태, 취득시각, hash, parser/DOM version을 append-only 저장
직전 hash·필드와 비교해 신규/변경/취하/매각/오류 event를 만들고 허용 상태전이 검증
Court provenance가 있는 사건·물건·기일·결과만 멱등 upsert하고 모호한 값은 검토 queue로 격리
검색·상세·달력·통계를 재투영하고 영향을 받은 cache·저장검색·관심 알림만 갱신
공개 URL smoke 후 release하며 실패 시 마지막 정상판+stale 배지를 유지하고 민간 fallback은 호출하지 않음
갱신 주기·완료 목표
| 범위 | 목표 | 변경 | 실행 계약 |
|---|---|---|---|
| 당일·향후 7일 기일 | 5분 목표 | 기일 변경·취하·매각결과 | adaptive throttle과 법원/사건별 checkpoint |
| 신건·변경 목록 | 15분 목표 | 신규 공고·사건 상태변경 | 목록 hash가 바뀐 사건만 상세 queue |
| 진행 중 전체 사건 | 1시간 | 장기 진행·유찰·차회 기일 | 법원 shard 분산·중복 방지 lease |
| 전 법원 전체 대사 | 매일 1회 | 누락·수량 급변·종국 상태 복구 | 전일 snapshot과 법원별 총건수 대사 |
| 문서·사진 | 원문 변경 또는 6시간 | 현황·감정·송달·공개 파일 | MIME/hash/공개등급 확인 후 파일 queue |
| 화면 반영 | change event 직후 | 검색·상세·달력·알림 | ingest→public p95 15분 목표, stale 사유 표시 |
PUBLIC DATA PORTAL → ONBID REFERENCE MASTER
15121030 기준판과
15157768 첫 정상판 연결 완료
기존 자동연결 이력의 키 우선순위·마스킹·원문 보존 계약을 재사용하고 공식 CSV 388행을 실제 reference API에 연결했습니다. 승인 전파 뒤 실호출은 2026-07-15 12:06 KST · 15157768=200 · resultCode=00 · 420행로 확인했고, /onbid 물건 영역은 REFERENCE CONNECTED · LOT SAMPLE · NOINDEX로 유지합니다.
REFERENCE BOOTSTRAP · CONNECTED
388행 · SHA e6c3f093f5dcea0f…
DAILY MASTER · 420 ROWS · 23/50/347
용도코드·주소 · 일간
물건 상세 부분계약
코드 master와 별도
브라우저 직접 호출·공개 HTML/RSC의 service key·Court 코드와 이름 기반 병합을 금지
Proxmox 일간 runner → versioned reference store → snapshot 자동 배포
공식 원천별 역할과 현재 연결 상태
15121030 원문 ↗ · 15157768 원문 ↗| 데이터 ID | 공식 서비스 | 주기·형식 | 제이옥션 용도 | 금지 해석 | 현재 상태 |
|---|---|---|---|---|---|
15121030 | 용도별 코드정보_20231231 | 수시 (1회성) · CSV/자동변환 JSON·XML · 388행 · 무료·이용허락범위 제한 없음 | 초기 적재·회귀 fixture·운영판 교차검증 | 실시간 물건/운영 정본 아님 | 공식 CSV 388행 연결 · bootstrap fallback |
15157768 | 차세대 온비드 코드 및 주소 조회서비스 | 일간 · JSON/XML · 개발 1,000콜 · 무료·이용허락범위 제한 없음 | 용도코드 일간 정본·주소 질의 캐시 | 물건·기일·결과·좌표·PNU 원천 아님 | 첫 정상판 420행 연결 · 일간 runner 대기 |
15157247 | 차세대 온비드 부동산 물건상세 조회서비스 | 공식 Open API | onbid: 물건 상세 보강 | 코드 master·검색 목록 전체를 대신하지 않음 | 부분 adapter만 구현 |
ONBID LOT APIs | 물건목록·입찰·결과 서비스군 | 서비스별 별도 활용신청·quota | /onbid 실제 목록·기일·결과 | Court·두인·GF 자료로 대체 금지 | 서비스 선정·연결 전 |
외부 endpoint와 내부 BFF 계약
| 계약 | 입력·인증 | 출력 | 보호·운영 |
|---|---|---|---|
GET api.odcloud.kr/api/15121030/v1/uddi:c7f3e094-684b-4a25-a178-91cba283956e | Authorization: Infuser {key} 권장 · page · perPage · returnType | page · perPage · totalCount · currentCount · matchCount · data[] | key를 query·브라우저·로그에 남기지 않고 HTTPS만 사용 |
GET apis.data.go.kr/B010003/OnbidCodeSrvc/getOnbidUsgCodeInfo | serviceKey · pageNo · numOfRows · resultType · 선택 upCtgrId | ctgrId · ctgrNm · upCtgrId · upCtgrNm | 서버 batch · 일 1회 전체 snapshot · 10 TPS 이하 |
GET apis.data.go.kr/B010003/OnbidCodeSrvc/getOnbidDtlAddrInfo | serviceKey · pageNo · numOfRows · resultType · 선택 sdnm/sggnm/emdNm | sdnm · sggnm · emdNm · dtlAddr | 서버 BFF·질의 cache · 주소를 좌표/PNU로 승격 금지 |
GET /api/v1/reference/onbid/usage-codes | 선택 parentId · snapshotId | 승인된 로컬 계층 projection | 공공 API 실시간 proxy 금지 · ETag·장기 cache |
GET /api/v1/reference/onbid/addresses | sdnm · sggnm · emdNm · cursor | 캐시된 주소 선택지·freshness | quota hard cap·24h SWR·미승인 원문 비공개 |
POST /internal/jobs/onbid-reference-sync | service auth · idempotency key | run id · candidate hash · 검증/승격 결과 | 비공개 운영 경로 · 감사로그 · 동시 실행 lease |
코드·계층·버전·교차분류 저장 계약
| 계층 | 필드 | 저장·사용 원칙 | 완료 증거 |
|---|---|---|---|
| 원천 식별 | dataset_id · source_snapshot_id · source_snapshot_date · source_url | 15121030/15157768/15157247 계약을 섞지 않고 snapshot 단위 lineage 보존 | 원천 역추적 100% |
| 코드 | code_id · code_name | 식별자는 문자열로 보존하고 이름 중복 때문에 이름 join 금지 | ID 중복·공란 0건 |
| 계층 | parent_code_id · parent_code_name · level · path_ids · path_names | 레벨 1 외부 root 1/ONBID 허용, 15157768 level/path는 parent edge로 파생 | 고아·순환·레벨오류 0건 |
| 버전 | valid_from · valid_to · is_active · promoted_at · contract_version | 후보 snapshot 검증 후 원자 승격, 과거 검색·상세은 당시 snapshot id 고정 | 덮어쓰기 0건 |
| 증거 | fetched_at · payload_hash · schema_hash · raw_object_key · source_run_id | 키 제거 raw·페이지 합계·조회시각·파서/계약 버전 보존 | hash 재현·페이지 대사 |
| 교차분류 | source_namespace · source_usage_code · canonical_asset_type · crosswalk_version · crosswalk_status | onbid 원본 코드는 유지하고 Court 공통분류는 별도 승인 매핑 | Court/onbid 오병합 0건 |
| 공개 투영 | usage_code_id · usage_code_name · usage_path · source_updated_at · stale | 검색 필터와 상세에 같은 promoted snapshot 사용, 미지 코드는 미분류(code)로 보존 | 필터↔요청 코드 parity |
활용신청부터 공개 필터까지의 9단계
15157768 코드/주소 개발계정 승인은 확인 완료. 승인 계정 Decoding 키를 전용 server secret으로 분리하고 물건 API는 별도 승인 범위를 유지
15121030 CSV/JSON 388행의 원문·SHA-256·OAS·snapshot id를 raw 영역에 불변 저장
onbid:sync-live가 15157768 page 1 totalCount를 기준으로 끝까지 순회하고 Proxmox 일간 runner에서 lease·멱등 run id 적용
JSON/XML singleton·array 편차를 흡수하고 code ID는 문자열, 부모 edge와 이름은 원문 그대로 정규화
중복·공란·고아·순환·부모 레벨·페이지 합계·schema hash를 검사하고 급격한 삭제/변경은 quarantine
candidate snapshot과 crosswalk를 별도 적재하고 검증 성공 시 promoted pointer를 원자 교체
공매 검색 필터·상세 breadcrumb·내부 reference API를 같은 snapshot으로 재생성하고 변경 ETag만 무효화
주소는 질의별 BFF cache와 24h SWR로만 갱신하며 위경도/PNU 정본으로 사용하지 않음
/onbid 필터→공식 요청 코드 parity와 출처·조회시각을 확인하고 실패 시 LKG+stale을 유지
오류·quota·드리프트 복구 정책
| 코드·조건 | 판정 | 처리 |
|---|---|---|
401/403 · 20/30/31/32/33 | 자격증명·권한·IP·서명 구성오류 | 재시도 없이 circuit open, 운영 경보, 마지막 정상 snapshot 유지 |
10/11 | 파라미터·필수값 오류 | 재시도 없이 contract 실패, 배포 차단 |
03 | 데이터 없음 | 주소 질의는 정상 empty, 용도코드 full-sync에서는 candidate quarantine |
12 | 서비스 폐기 | 15157768 승격 중단, 용도코드만 15121030 LKG로 fallback; 주소 fallback 금지 |
21/01/02/04/05/99 · 5xx · timeout | 일시 장애 | jitter 재시도 3회 후 breaker, LKG+stale과 다음 점검시각 표시 |
22/429 | 일 quota/TPS 초과 | 주소 refresh부터 중단하고 코드 sync·비상 예산 보호, quota window 뒤 재개 |
schema/hash/계층 실패 | 데이터 드리프트 | candidate 격리·diff 보고·이전 promoted snapshot 유지, 자동 이름 수정 금지 |
API 연결·실자료 승격 완료 게이트
15121030·15157768·물건 API별 활용신청과 개발/운영 quota 승인 증거
키가 Git·HTML·RSC·URL·APM·오류로그·보고서에 노출 0건, 1회 URL 인코딩 계약
HTTPS 200와 top-level header.resultCode 00만 성공, JSON/XML/plain 오류 분리·10 TPS limiter smoke
object/array normalize, 페이지 중복·누락 0, 수집 합계=totalCount
코드 필수 4필드와 bootstrap 5필드의 공란·타입·schema hash 검사
code ID 고유, 승인 root 외 부모 존재, 고아·순환·잘못된 레벨 0
원문·조회시각·hash·contract version·snapshot id 보존과 원자 승격/rollback
같은 snapshot 재실행 시 중복 row·projection·이벤트 0
onbid:*와 court:* 안정키·코드·갱신주기 혼합 0
원본 온비드 코드를 덮어쓰지 않는 versioned 공통 용도 매핑과 역추적
일간 코드 마지막 성공·stale·다음 재시도와 주소 cache 만료 표시
15157768 장애 시 승인 LKG, 15121030은 용도코드만 fallback, 민간자료 fallback 0
한국자산관리공사 온비드·공공데이터포털 출처, 데이터 기준일·조회시각·원문 링크 표시
/onbid 가상 물건 0, 공식 목록·상세·입찰 이동 E2E 후 SAMPLE 표식 제거
LIVE_DATA 전 NOINDEX·sitemap 제외, 실자료·고유본문·canonical 검증 뒤에만 색인 승격
LIVE COURT PRODUCER → J AUCTION CONSUMER
실행 중 파서는 유지하고
증분 변경 피드로 안전하게 연계
019eea6e-17ee-7340-83dd-c070dc83396c은 대법원 수집 생산자로 계속 가동합니다. 이 프로젝트는 원격 DB를 직접 읽거나 파서를 재시작하지 않고, 버전된 outbox와 cursor API를 멱등 소비해 검색·상세·달력·통계를 갱신합니다./nvme-scratch/work/jauction
확인 2026-07-14T13:20:00+09:00
연결 70,505 · 실패 0
32,203 사건 · 중복 0
realtime·reconcile·recovery·30day enabled/active
C2 source sunset 후 새 기준선 시작 · 기존 1일 산입 안 함
raw_json·raw_path·payload_hash와 run 연결은 이미 존재합니다. 다만 source_url·fetched_at·http_status·parser_version·schema_version·권리/공개상태는 명시 필드가 아니므로, 이를 추가하고 과거행을 backfill 검증하기 전에는 증거 연계를 완료로 판정하지 않습니다.
원문·조회시각·해시·버전 보존 계약
| 필드 | 현재 상태 | 보존·사용 계약 |
|---|---|---|
source_record_id | CURRENT | court_code+case+lot 안정키와 원천 객체를 연결하고 이벤트 멱등키의 입력으로 사용 |
source_event_key | MIGRATION_REQUIRED | 공식 event ID를 우선하고 없으면 court_code+case+lot+event_at+event_type+price+source_version 결정키로 업무 이벤트 동일성을 보존 |
run_id | CURRENT | 수집 run·페이지·writer·reconcile을 하나의 추적 단위로 연결 |
raw_json / raw_path | CURRENT | 원문 JSON과 저장 경로를 append-only로 보존; 브라우저에는 직접 노출하지 않음 |
sha256 | CURRENT | 정규화된 raw_text의 SHA-256을 payload_hash/raw_hash로 보존하고 diff 기준으로 사용 |
source_url | MIGRATION_REQUIRED | 요청한 대법원 HTTPS URL을 query redaction 규칙과 함께 명시 보존 |
fetched_at | MIGRATION_REQUIRED | created_at과 분리해 실제 HTTP 응답 수신시각·timezone을 명시 보존 |
http_status | MIGRATION_REQUIRED | 200·304·429·403·5xx와 재시도·격리 판단을 원문 증거에 연결 |
parser_version | MIGRATION_REQUIRED | git SHA+semantic parser version을 모든 raw·event·projection에 전파 |
schema_version | MIGRATION_REQUIRED | raw envelope·canonical·event 계약 버전을 독립 필드로 관리 |
rights_status / publication_status | MIGRATION_REQUIRED | PUBLIC·RESTRICTED·WITHHELD·REMOVED와 출처표시 문구를 파일·필드 단위 적용 |
신건·사건·물건·기일·상태·결과 증분 이벤트
| 분류 | 도메인 | 이벤트 | 필수 payload | 화면 반영 |
|---|---|---|---|---|
| CASE | 사건·신건 | CASE_UPSERTED | 최초 관찰 여부·사건번호·법원·담당계·접수/개시·공개 changed_fields | 신건·사건 검색 facet·상세 사건요약 |
| LOT | 물건 | LOT_UPSERTED | 물건번호·용도·소재지·가격·면적·좌표·canonical_hash | 검색결과·지도·비교·상세 물건요약 |
| SCHEDULE | 기일 | SCHEDULE_CHANGED | source_event_key·source_sequence·기일 종류·일시·장소·최저가·회차·previous/current hash | 기일달력·상세 이력·기일변경 알림 |
| STATUS | 상태 | STATUS_CHANGED | 진행·유찰·변경·연기·취하·정지·종국 상태와 허용 전이 | 검색 상태·상세 배지·stale/검토 상태 |
| RESULT | 결과 | RESULT_CHANGED | 매각·불허가·미매각·낙찰가·매수인 공개범위·result_at | 결과 검색·상세 결과·통계·알림 |
| DOCUMENT | 원문 문서 | DOCUMENT_CHANGED | 문서 유형·SHA-256·MIME·rights/publication status | 상세 증거실·출처·제한/대기/실패 상태 |
| IMAGE | 사진 | IMAGE_CHANGED | 파일 hash·순서·크기·공개등급·원문 evidence | 상세 갤러리·대표 이미지·깨짐 격리 |
| PUBLICATION | 공개수명주기 | PUBLICATION_CHANGED | opaque public_id·legacy alias·ACTIVE/WITHDRAWN·release fingerprint | 정본 상세 200·alias 301·withdrawn 410 |
생산자·소비자 경계
- 01생산자 트랜잭션
canonical upsert와 court_publication_outbox insert를 같은 DB transaction으로 커밋하고 envelope event_id는 UUIDv7, 업무 동일성은 결정적 source_event_key로 분리
- 02변경 피드
GET /internal/v1/court/changes?cursor=:opaque_cursor&limit=:limit; 순서가 안정된 signed opaque cursor와 cursor_after 반환
- 03증거 조회
GET /internal/v1/court/lots/:publicId/evidence; source URL·fetched_at·hash·versions·권리상태만 마스킹 DTO로 제공
- 04서비스 인증
mTLS 또는 회전 가능한 service JWT+audience; 브라우저·공개 Worker가 생산자 DB/피드를 직접 호출하지 않음
- 05소비자 트랜잭션
event_id envelope 수신과 source_event_key+source_record_id 업무 멱등 upsert→projection rebuild→cache invalidation→cursor commit을 한 transaction/outbox로 처리
- 06오류·복구
지수 backoff·DLQ·원문 evidence 참조·범위 cursor replay·schema version 호환표; poison event가 전체 shard를 막지 않음
- 07배포 경계
producer는 nvme-scratch, 제이옥션 앱/DB는 독립 runtime; PointAuction 코드·도메인·DB·API를 경유하지 않음
이벤트별 projection
| 이벤트 | 저장 투영 | 제품 반영 | 이력 규칙 |
|---|---|---|---|
| CASE_UPSERTED | case_projection·search_document | 사건번호 검색·신건 목록·법원/담당계 facet | event cursor와 source_record_id hash를 내부 추적 |
| LOT | lot_projection·geo_projection | 목록 카드·가격/면적/용도 facet·지도 cluster·비교 | public_id 유지, 변경 lot만 부분 재색인 |
| SCHEDULE | sale_event_projection·calendar_projection | 기일 목록·달력·상세 기일이력·회원 알림 | 이전 기일을 삭제하지 않고 valid_from/to 이력 보존 |
| STATUS | lot_state_projection | 검색 상태필터·상세 상태배지·취하/정지/종국 노출 | 허용 전이 위반은 pending_review로 격리 |
| RESULT | result_projection·stats_projection | 매각결과·낙찰가·유찰회수·법원/지역 통계 | 결과 정정 event로 재투영하고 과거 수치 snapshot 보존 |
| DOCUMENT/IMAGE | asset_projection | 상세 증거실·갤러리·원문 링크·조회시각·출처 | rights/publication 상태가 PUBLIC일 때만 파일 제공 |
파서 연계 완료 게이트
raw evidence 필드와 source_event_key·outbox/event schema migration·rollback·hash ledger 자동 대사 통과
사건·물건 안정키와 alias 표본 10,000건에서 오병합·미연결·중복 0
신건·사건·물건·기일·상태·결과 각 1개 이상 synthetic replay와 실제 change event 검증
공개값 100건에서 원문→조회시각→SHA-256→parser/schema version 역추적 100%
중복·역순·누락·poison event에도 멱등 처리하고 cursor는 성공 transaction 뒤에만 전진
영향받은 검색·상세·달력·통계만 재투영하며 public_id·이력·알림 중복 0
중요 변경 ingest→public p95 15분, staleness·last_checked_at·실패 사유 화면 표시
날짜·법원·cursor 범위 재생과 DLQ 복구 뒤 원본 hash·canonical·projection 대사 일치
두인·GF·PointAuction outbound·credential·fallback·신규 source write 0
C2 source sunset 뒤 새 기준선으로 Court-only 30일 연속 PASS; 기존 1일은 산입하지 않고 현재 0/30 대기이므로 제품 출시 완료 판정 금지
COURT · CANONICAL ENRICHMENT · PRODUCT BRIDGE
추가 생산면은 확인했고
제이옥션 소비 경로를 완성합니다
세션 019eea6e-17ee-7340-83dd-c070dc83396c의 추가 결과와 현재 Sites 제품면을 분리 판정했습니다.
20:30 freshness는 OK지만 GF required=true와 두인 watch active가 남아 Court-only source 정책과 충돌
owner-only 유지 · 공개 지도 3개 별칭 404 · FULL_RELEASE NOT APPROVED
마지막 관찰 21.97분
OK · findings 0 · warnings 0
공개 summary 146,330
시점 snapshot
4대 canonical + 공공 ledger 5
현재 Sites 미접목
contract guard 5분
상위 실행 증거
OpenAPI 136 path · 기존 11 route
확인 2026-07-17 20:30 KST
외부 검증 도메인은 source evidence 전용 · 제이옥션은 AuctionHub 내부 origin과 same-origin BFF로 재구현
모든 건수는 실행 시점 snapshot이며 source_run_id·checkpoint·projection revision이 같을 때만 합산
추가 세션 델타와 현재 판정
| 증거 | 영역 | 확인 결과 | 제이옥션 완료 경계 |
|---|---|---|---|
COURT | Court master·writer·projection | 74,752행 · 20:30 기준 마지막 관찰 21.97분 · 최신 run 4,000건/80 of 772 page · pending event 0 | source checkpoint→writer watermark→projection/API freshness를 같은 run에서 대사 |
DOCUMENT | 문서 보강·재가용 | PDF 178건 canonical·본문/구조화 · 인증 후속 1,076건 queue · 매각명세서 8,862건 source pending | 다른 물건 문서 대체 0 · source_pending/source_unavailable와 자동 재가용 감시 |
FOUR-DOMAIN | 관리비·관공서·비교사례·배당 | 4개 계약 HTTP 200 · 비교 적용대상 99.9951% · 배당 51,364 lot/317,432 allocation | 상위 실행 완료와 제이옥션 소비 미접목을 분리 |
MANAGEMENT | K-apt 단지·관리사무소 | 22,204단지 · 세대수14,213 · 승인일14,180 · 난방14,021 · 전화14,199 · 도로명14,074 · 자산 bridge 4,080/단지2,016 | 단지 profile·연락처와 체납금액·월 평균관리비를 분리하고 bridge 미연결을 coverage로 공개 |
MAINTENANCE | 관리비 evidence·queue | evidence 201 lot · 전화164 · 체납금액166 · queue109,535(자동109,500/대체23/재가용12) | 미제공 금액 null · queue 상태와 원천 재가용을 별도 운영지표로 유지 |
KAPT-COST | K-apt 월 관리비 | 2026-03~05 3회 모두 HTTP 403 · JSON invalid · item 0 | 기존 키의 해당 서비스 활용승인 전 제품값 생성·완료 표시 금지 · 단지 평균과 개별 체납 분리 |
PUBLIC-LEDGER | 20:31 public status exact | 건축물 enrichment719,870 · VWorld attribute5,581,981 · RTMS7,448,634 · land-use35,947 · official-price35,984 · public summary146,330 | 과거 source-table 스냅샷과 섞지 않고 같은 exact batch·run·revision에서만 publication 대사 |
SCHOOL | 학구·학교알리미 | 공식 경계 8,896 · 인접학교 1,306,627/145,190 asset · API 내부12/12·외부26/26 | 공식 배정과 단순 인접을 분리 · 안전하지 않은 986학교 강제 병합 0 |
OPS-GUARD | freshness·timer·계약 자가복구 | 20:30 status OK/findings0/warnings0 · 공공 timer 15 · contract guard 5분 · self-heal PASS | GF required=true와 두인 watch active는 정상 freshness와 별개인 source-policy debt로 C2에서 제거 |
LAW | 법령 원문·제품 rule | law_document 31 · article_version 4,966 · 법령명24 · legal_rule_feature 0 | 원문 존재를 물건별 권리·세금·배당 rule 구현 완료로 승격 금지 |
CAPABILITY | 후속 API capability inventory | live OpenAPI 136 path · 기존 domain route 11 · 후속 후보 9개와 우선순위 확정 | 현재 9개 product bridge와 후속 후보를 분리하고 계약·원천·권리·projection gate 뒤에만 구현 |
공식 원천에서 제품까지의 단일 계보
Court·공식 공공 API의 JSON/text·URL·HTTP·취득시각·SHA-256·parser/contract version을 append-only 보존
주소·PNU·필지·건축물·실거래·관공서·학교·K-apt를 provider key와 confidence·불가사유로 정규화
auction_case→auction_lot→asset 안정키에 오병합 없이 연결하고 lot-level EXISTS/distinct 집계
PUBLIC_INDEX·MEMBER_DETAIL·ADMIN projection을 분리하고 revision·snapshot·publication scope를 원자 승격
AuctionHub 내부 origin을 service identity·fixed egress·timeout·circuit breaker로만 호출
제이옥션이 9개 계약을 allowlist projection·opaque ID·cache/LKG·strict schema로 재노출
검색 badge·상세 12섹션·지도 side panel·회원 계산·인트라넷 품질 queue에 같은 revision으로 반영
timer·watermark·freshness·contract guard·DLQ·rollback·7일 shadow를 증거 원장으로 대사
제이옥션에 재구현할 9개 API 계약
| same-origin 계약 | 권한 | 제품 표시 | 보호 규칙 |
|---|---|---|---|
GET /api/v1/lots/{public_id}/maintenance-fee | 공개 요약 + 회원 근거 | 확정 금액·상태·관리사무소 | 기본 0을 확정 0원으로 해석 금지 · 임의 추정 금지 |
GET /api/v1/lots/{public_id}/public-offices | PUBLIC | 법원·등기소·세무서·주민센터 | 공식 ID 없는 후보를 확정 기관처럼 표시 금지 |
GET /api/v1/lots/{public_id}/comparables | 공개 요약 + 회원 표 | 경매·RTMS 사례·거리·fallback | 물건유형·면적·기간·반경·표본수·match method 필수 |
POST /api/v1/lots/{public_id}/distribution-simulation | MEMBER · private,no-store | 재원·비용·채권별 예상배분 | 공식 배당표와 구분 · 입력·기준일·산식 버전·미수치화 사유 보존 |
GET /api/v1/lots/{public_id}/public-data | PUBLIC | 공공보강 통합 요약·coverage·freshness | 내부 ID·원천경로·storage key 금지 |
GET /api/v1/lots/{public_id}/building-ledger | 공개 요약 + 회원 전체 | 건축물대장·구조·용도·면적·승인일 | PNU 미확정·원천 없음·not applicable 분리 |
GET /api/v1/lots/{public_id}/land-ledger | 공개 요약 + 회원 이력 | 토지대장·공시가격·토지이용 | 필지·기준연도·단위·원천일 필수 |
GET /api/v1/lots/{public_id}/school-zone | 공개 availability·건수 + 회원 전체 | 공식 학구 배정·인접 학교 | 공식 배정과 거리상 인접을 별도 배열 · 상위 정밀좌표 직접 proxy 금지 |
GET /api/v1/schools/{school_public_id} | 공개 학교요약 + 회원 지표 | 학교 profile·2024~2026 교육지표 | 원천 내부 학교코드·snapshot UUID 금지 |
asset_id · 19자리 PNU · 12~15자리 원좌표 · upstream lot identifier · raw_item · raw_path · storage_key · source_snapshot_id · 원천 학교코드 · 비밀키·인증 query
추가 API 구성 가능성 9개 · 현재 통합범위와 별도
| 후보 | 우선순위 | 현재 상태 | 제품 범위 | 실측 근거 | 선행조건 |
|---|---|---|---|---|---|
API-COMPLEX-01 | P0 | DATA_READY_CONTRACT_REQUIRED | 단지 profile·물건-단지 연결 | 22,204단지 · 자산 bridge 4,080/단지2,016 | 계약·coverage·opaque kapt reference |
API-MARKET-01 | P0 | DATA_READY_PROJECTION_REQUIRED | 지역 시장요약·물건 시장맥락 | RTMS 7,448,634행 + REB 수집 | 지역·유형별 versioned aggregate |
API-LAW-01 | P0 | SOURCE_READY_RULE_MAPPING_REQUIRED | 법령·조문·물건 적용근거 | 법령31 · 조문4,966 · rule feature 0 | 물건 권리·임차·세금·배당 rule mapping |
API-PRICE-01 | P0 | DATA_READY_HISTORY_CONTRACT_REQUIRED | 공시가격 이력 | 자산 snapshot35,984 · 필지가격95,847 | 연도 정규화·필지별 canonical 1건 |
API-KAPT-COST-01 | P0-EXTERNAL | PROVIDER_SUBSCRIPTION_REQUIRED | 단지 월 평균관리비·benchmark | 2026-03~05 실호출 HTTP 403 | 해당 서비스 활용승인·월 snapshot·collector |
API-TRANSIT-01 | P1-EXTERNAL | PROVIDER_AND_PIPELINE_REQUIRED | 지하철·버스 접근성 | canonical 교통 테이블 0 | 서비스 승인·정류장 master·좌표매칭 |
API-COMMERCE-01 | P1-EXTERNAL | PROVIDER_AND_PIPELINE_REQUIRED | 상권·업종 집계 | canonical 상권 테이블 0 | 서비스 승인·점포 master·반경 집계 |
API-FINANCE-01 | P2-EXTERNAL | SEPARATE_KEY_AND_PIPELINE_REQUIRED | 금리·투자 가정 | ECOS key·canonical 금리 table 0 | 별도 key·vintage snapshot·산식 버전 |
API-HAZARD-01 | P2-HOLD | LICENSE_REVIEW_REQUIRED | 재난·안전 맥락 | canonical hazard table 0 | 재전송 약관 검토·별도 key 전에는 저장/공개 금지 |
HTTP 403 · PROVIDER_SUBSCRIPTION_REQUIRED · 2026-03~05 3회 모두 JSON 항목 0입니다. 활용승인·정상 200·최근 36개월 snapshot·lot bridge·계약검사를 모두 통과하기 전에는 단지 평균관리비 기능을 열지 않습니다.
3개월 HTTP 403
완료: 활용승인·200·36개월 snapshot·lot bridge
법령31·조문4,966·rule feature0
완료: 핵심 rule·시행일 회귀·source article 연결
자산4,080·단지2,016
완료: 고신뢰 자동매칭·검토 queue·오매칭0
전용 canonical table0
완료: 서비스 승인·key·적재·timer·projection
전용 table0·license 검토
완료: 서면 이용조건·저장/가공/공개 범위 승인
C0–C9 단일 통합 캠페인
| 단계 | 작업 | 구현 범위 | 종료 조건 |
|---|---|---|---|
C0 | 증거·계약 동결 | 상위 산출물·DB schema·route·timer·image/source SHA를 immutable manifest로 기록 | hash·실행시각·source snapshot·권리상태 누락 0 |
C1 | 제품 경계 정정 | AuctionHub를 제이옥션 내부 canonical 실행면으로 문서화하고 외부 공개 runtime은 검증 증거로만 분리 | 브라우저·공개 링크·fallback의 외부 제품 의존 0 |
C2 | 민간 source sunset | GF required 판정·timer와 두인 watch·신규 canonical write를 REFERENCE_SNAPSHOT 경계로 전환 | Court required 정상 · 민간 required/new write/outbound 0 |
C3 | schema bridge | raw→normalized→canonical→PUBLIC/MEMBER/ADMIN mapping·migration·rollback 작성 | lineage 100% · orphan/duplicate/오병합 0 |
C4 | service auth | 전용 service identity·fixed egress·secret rotation·timeout·retry·circuit breaker | 무인증 origin과 secret Git/HTML/URL/log 노출 0 |
C5 | same-origin BFF | 9개 route의 schema allowlist·opaque ID·ETag/cache namespace·LKG·fail-closed | 정상·빈·부분·stale·503·timeout·oversize contract PASS |
C6 | 검색·상세·회원 UI | coverage badge·12개 상세 섹션·비교표·배당계산·정확한 empty/error 상태 | 실 lot 100건 값·상태·lineage·링크 대사 |
C7 | 지도·인트라넷 | owner-only 지도 side panel과 미해결·freshness·source sunset 운영 queue | 공개 지도 404 유지 · PII/원좌표/PNU 0 |
C8 | shadow·복구 | 7일 shadow·성능·계약 drift·timer 재부팅·DLQ replay·LKG·rollback rehearsal | 누락·중복·stale 오판·복구 실패 0 |
C9 | 점진 승격 | 운영자→내부회원→canary→공개와 commit→image→projection→Sites rollback 계보 | 별도 PUBLIC_GO_LIVE 전 공개 route·SEO·지도 노출 0 |
정본·공공보강 통합 완료 게이트
Court·공식 공공원천과 허용된 동결 evidence만 승인하고 GF·두인 required/fallback/new write를 CI·운영에서 차단
event_id·source_event_key·source_record_id·schema version·evidence hash·opaque cursor와 범위·부분실행 메타 필수
원천 URL/공식 ID·취득시각·raw hash·parser/schema/contract version·권리/공개상태 보존 100%
사건·물건·asset·PNU·학교·단지 identity 중복·오연결·고아 0
제이옥션 public_id→canonical lot→upstream opaque identifier를 고정 revision에서 1:1 대사하고 upstream ID·내부 UUID 공개 0
미제공·미적용·미확정·부분계산·실패·stale을 0/빈 문자열로 합치거나 확정값으로 표시 0
검색·상세·보강·지도·집계가 같은 snapshot_at·positive revision·query/viewport hash를 공유
내부 UUID·PNU·원좌표·원천 학교코드·raw path·storage key·비밀값의 JSON/HTML/RSC/log 노출 0
시장·상권·금융 집계는 최소 cohort·suppression을 적용하고 raw 거래 ID·정확 동/호·개인 재식별 가능 표본 공개 0
음수/초과 배당·금액 단위 오류·기관 중복·잘못된 geometry·공식학구/인접학교 혼용 0
timer enabled/active뿐 아니라 next trigger·last success watermark·DB/API 최신시각·scope/result를 connector별 대사
route/field drift를 5분 안에 감지하고 승인 image/source로 복구한 뒤 운영 smoke 재통과
학교알리미 지역분할의 첫 정기실행·7일 연속 성공률·partition checkpoint·재부팅 복구를 canary 5/5와 별도 증명
K-apt 월 관리비 3개월 HTTP 403을 승인 완료로 오판하지 않고 활용승인·정상 JSON·월 snapshot·collector 전까지 기능 OFF
기존 학교알리미 credential을 재발급·교체하고 CT104 0600 secret 한 곳 외 원문 잔존 0을 확인
9개 BFF의 p95·payload cap·timeout·cache/LKG·rate limit 예산 통과
Persistent timer·단일 lock·재부팅·부분실패·DLQ 범위 replay·backup restore·rollback E2E
실 lot 100건의 공개/회원/관리자·정상/빈/오류·모바일/키보드·링크/계산 대사
owner-only 정책과 공개 지도 404·sitemap/메뉴/SDK 0을 유지하고 전체 공개는 별도 명시 승인
PUBLIC INDEX → MEMBER DETAIL
검색에는 충분히 보이고
판단자료는 가입 후 안전하게 열기
내용 없는 가입벽을 대량 색인하지 않고, 공개 영역만으로도 검색 의도를 해결한 뒤 고의도 판단자료에서 가입을 유도합니다.
- 공개 상세
- 200 · INDEX · SELF CANONICAL
- 회원 전체
- AUTH · PRIVATE · NO-STORE
- 검색결과
- NOINDEX · FOLLOW
- 봇 분기
- 0 · 비회원과 동일
검색로봇·비회원·회원·추가권한 응답 계약
검색로봇
비회원과 동일한 공개 요약 SSR- 포함
- 식별·법원·지역·용도·가격·기일·상태·결과요약·출처
- 제외
- 회원 전체값·PII·원문 파일·분석값·봇 전용 본문
비회원
색인 가능한 공개 projection + 구체적 잠금 안내- 포함
- 검색 의도를 해결할 독립적인 요약과 회원 상세 모듈 목록
- 제외
- CSS로 가리기 전의 전체값·RSC preload·서명 파일 URL
로그인 회원
세션 확인 후 member detail API를 별도 호출- 포함
- 전체 사진·문서·기일이력·권리/임차·비교·도구·알림
- 제외
- 권리·개인정보 공개등급이 허용하지 않는 자료
추가 권한
목적·등급·열람사유를 서버에서 재검증- 포함
- 정책상 허용된 제한 자료와 감사 가능한 업무 기능
- 제외
- 가입만으로 자동 공개되는 관계인 개인정보
전체 페이지별 색인·공개·회원·CTA 매트릭스
17개 페이지 유형 · 임의 facet 대량색인 금지| 페이지 | 권장 URL | 색인 | 비회원·검색엔진 공개 | 가입 후 전체 | 전환 CTA | 구조화데이터 |
|---|---|---|---|---|---|---|
| 메인 | / | INDEX | 검색·법원·지역·용도 허브, 오늘 신건·기일·결과 일부 | 개인 추천·최근열람·관심·저장검색 | 내 조건으로 신건 알림 받기 | Organization · WebSite |
| 상세검색 | /search | INDEX | 필터 설명·탐색 허브·대표 물건 | 검색조건 저장·최근 조건·고급 비교 | 검색조건 저장하고 알림 받기 | WebPage · BreadcrumbList |
| 임의 검색결과 | /search/results?… | NOINDEX,FOLLOW | 기본 카드·현재 조건·사용자용 집계 | 전체 탐색·비교·관심·엑셀·인쇄 | 전체 결과·비교 기능 열기 | 구조화데이터 생략 |
| 신건·예정·결과 허브 | /auctions/new · /upcoming · /results | 선별 INDEX | 법원·지역별 최신 목록과 갱신시각 | 전체 이력·개인필터·저장·알림 | 신건·결과 자동 알림 받기 | CollectionPage · ItemList |
| 법원 상세 | /courts/{courtSlug} | INDEX | 법원·관할·진행물건·최근 기일/결과 | 담당계별 전체목록·통계·저장조건 | 이 법원 물건 알림 받기 | WebPage · BreadcrumbList |
| 지역 상세 | /regions/{sido}/{sigungu} | 품질충족 INDEX | 고유 지역설명·법원·대표물건·가격대 | 전체물건·실거래비교·지도/반경 | 이 지역 신건 알림 받기 | CollectionPage · ItemList |
| 용도 상세 | /types/{assetType} | 품질충족 INDEX | 용도 정의·대표물건·지역/법원 분포 | 세부용도·면적·특수조건 분석 | 이 용도 물건 저장하기 | CollectionPage · ItemList |
| 기일 상세 | /calendar/{yyyy-mm-dd} | 실물건 있을 때 INDEX | 법원·기일·물건·현재상태 | 개인 캘린더·전체일정·변경알림 | 기일 저장하고 변경 알림 | WebPage · ItemList |
| 사건 상세 | /cases/{publicCaseId} | INDEX | 법원·사건번호·담당계·상태·물건수·다음기일 | 물건관계·전체기일·문서·변경 타임라인 | 사건 전체 흐름 확인하기 | WebPage · BreadcrumbList |
| 물건 상세 | /auctions/{publicId} | 최우선 INDEX | 식별·지역·용도·가격·기일·상태·면적요약·대표이미지·출처 | 전체주소 허용분·사진·문서·권리·임차·이력·비교·계산 | 무료 가입하고 전체 상세 보기 | WebPage · BreadcrumbList · RealEstateListing 의미표현 |
| 매각결과 | /auctions/{publicId}#result | 상세에 통합 | 결과·낙찰가·결과일·이전기일 요약 | 전체결과 이력·유사낙찰 비교 | 유사 낙찰사례 비교하기 | 상세 WebPage에 공개 결과만 반영 |
| 온비드 공매 | /onbid · /onbid/{publicId} | 실물건 E2E 전 NOINDEX | SAMPLE 표식·공식 원천별 연결 상태 | 공식 목록·상세 연결 뒤 전체분석·관심·마감알림 | 실자료 승격 뒤 공매 전체정보·마감 알림 | LIVE_DATA 게이트 뒤 WebPage · BreadcrumbList |
| 통계·가이드 | /stats/* · /guides/* | 독창적 내용만 INDEX | 출처·방법론이 있는 분석·설명 | 세부표·다운로드·맞춤분석 | 관심지역 통계 저장하기 | Article 또는 Dataset 조건부 |
| 로그인·가입·복구 | /login · /join · /recover | NOINDEX,FOLLOW | 혜택·약관·안전한 복귀 안내 | 인증 뒤 원래 상세로 복귀 | 무료 가입 후 바로 이어보기 | 구조화데이터 생략 |
| 마이페이지 | /mypage/* | NOINDEX + AUTH | 없음 | 관심·최근·프로필·결제·알림 | SEO CTA 없음 | sitemap 제외 |
| 관리자·API·파일 | /admin/* · /api/member/* · /files/* | NOINDEX + AUTH | 없음 | 역할별 업무·회원 데이터·서명 파일 | SEO CTA 없음 | sitemap·공개링크 제외 |
| 검토·구현계획 | /review · /preview/* · /implementation-plan | NOINDEX | 내부 시안과 계획 | 해당 없음 | SEO CTA 없음 | 운영 공개 sitemap 제외 |
물건 상세 필드의 3단 공개등급
| 필드군 | 공개 색인 | 회원 상세 | 추가 제한 | 응답 계약 |
|---|---|---|---|---|
| 식별·상태 | 법원·담당계·사건/물건번호·용도·현재상태 | 전체 상태변경 이력 | 관계인 식별정보 | PUBLIC_INDEX → MEMBER_DETAIL → PRIVILEGED |
| 위치 | 시군구·법정동·공개 허용 주소 | 상세주소·지도·로드뷰 허용분 | 개인 거주지 등 제한 위치 | publication_status로 필드별 판정 |
| 가격·기일·결과 | 감정가·최저가·다음기일·유찰회수·공식 공개 기일/결과 핵심 이력 | 전체 원문·비공개 보강·비교 분석 | 비공개 계산 입력 | 검증 event만 SSR·실제 변경시만 sitemap lastmod 갱신 |
| 면적·물건 | 공개 면적·매각대상 요약과 공식 공개 대상 목록 | 감정·부동산표시 원문·비공개 분석 | 제한 원문에만 있는 값 | Court 원문 계보 필수 |
| 이미지·문서 | 공개 대표이미지 1~2장과 문서 존재 여부 | 전체 사진·감정·현황·명세·송달·등기 | 권리 미확정·삭제·제한 파일 | 익명 응답에 파일 URL·payload 0 |
| 권리·임차·분석 | 제공 모듈명과 일반 안내만 | 권리·임차·점유·소멸·배당·위험분석 | PII·목적제한 자료 | 세션·등급 확인 뒤 private,no-store |
| 출처·계보 | 원문 URL·조회시각·공개 hash 요약·parser/schema version | 원문 evidence drawer·정정 이력 | raw 원문 저장경로·service credential | 공개값마다 역추적 가능 |
| 개인화 | 가입 후 제공 기능 목록 | 관심·메모·저장검색·알림·상담 | 다른 회원의 활동 | 회원 ID 격리·감사로그 |
검색 클릭부터 회원 가치 활성화까지
고유 공개 요약과 정확한 title·description·canonical로 의도 일치
search_impression / Search Console→가격·기일·상태가 스니펫과 랜딩 첫 화면에서 일치
seo_landing_view→가입창을 먼저 띄우지 않고 식별·가격·기일·출처까지 제공
public_teaser_view→권리·임차·문서·전체이력 등 열리는 항목을 실제 이름으로 안내
registration_gate_impression→물건=전체상세, 기일=변경알림, 법원/지역=신건알림 문구
signup_cta_click→필수 동의·인증만 받고 마케팅 동의는 분리
signup_start / signup_success→허용된 내부 return_to + section + filter를 검증해 원래 위치로 복귀
detail_return_success→상세 잠금 해제 뒤 관심등록·알림·저장검색 중 하나를 자연스럽게 연결
member_section_unlock / alert_opt_in대법원 증분 이벤트가 색인과 회원 화면에 도착하는 방식
| Court 이벤트 | 색인 처리 | 화면·회원 처리 |
|---|---|---|
NEW_CASE_DISCOVERED | 사건·물건 URL 생성 후 품질검사 통과 시 sitemap 편입 | 신건·법원·지역·용도 허브에 SSR 링크 생성 |
CASE_UPSERTED | 사건 제목·설명·dateModified 재계산 | 담당계·관계물건·사건요약 부분 재투영 |
LOT_UPSERTED | 공개 요약·검색문서·구조화데이터 부분 재색인 | 목록·지도·비교·상세 공개 projection 갱신 |
SCHEDULE_CHANGED | 기일이 실제 바뀐 경우에만 lastmod 갱신 | 달력·상세·회원 변경알림 갱신 |
STATUS_CHANGED | 제목·상태 설명·허브 소속 재계산 | 진행·유찰·연기·취하·정지·종국 배지 반영 |
RESULT_RECORDED | 공개 결과 문구·결과 허브·통계 갱신 | 낙찰가·결과·유사사례 projection 반영 |
DOCUMENT_CHANGED | PUBLIC 문서 존재/변경만 공개 표면에 반영 | 회원 증거실 또는 제한·대기 상태 표시 |
IMAGE_CHANGED | 공개 허용 이미지만 대표이미지·이미지 sitemap 반영 | 회원 갤러리 갱신, 제한 이미지는 익명 payload 제외 |
구현 중 바뀌면 안 되는 규칙
- 01검색로봇과 비회원의 공개 HTML은 동일하며 User-Agent·봇 IP 기반 전체정보 분기를 금지
- 02회원 전용 값은 초기 HTML·RSC payload·hydration state·JSON-LD·prefetch·로그에 포함하지 않음
- 03공개 상세는 200+self canonical, 잘못된 ID는 404/410, 이전된 ID는 새 상세로 1:1 301
- 04임의 facet·정렬·페이지 파라미터 결과는 noindex,follow; 고유 설명과 실제 탐색가치를 갖춘 선별 landing만 index
- 05sitemap에는 200·공개·canonical·indexable URL만 넣고 신건/진행/결과/법원/지역/콘텐츠로 분할
- 06lastmod는 재조회시각이 아니라 가격·기일·상태·결과·공개자산의 실제 변경시각만 사용
- 07robots.txt는 보안 수단이 아니며 noindex를 읽어야 하는 화면의 크롤링을 먼저 막지 않음
- 08비공개 API·파일은 인증이 1차 방어이고 401/403·private,no-store·짧은 서명 URL을 적용
- 09Google paywall 마크업은 gated 본문 자체를 색인할 때만 사용; 공개요약 모델에는 억지로 적용하지 않음
- 10구조화데이터에는 공개 화면에 보이는 사실만 넣고 매각기일을 Event, 최저매각가를 Product/Offer로 오표시하지 않음
- 11모든 상세은 법원·지역·용도·기일 허브의 실제 <a href> 링크로 3단계 이내 발견 가능하게 구성
- 12잠금 CTA에는 data-nosnippet을 적용하되 데이터 보호로 간주하지 않고 서버 분리를 유지
색인·가입 전환 출시 완료 게이트
모든 route template의 index/noindex·canonical·sitemap 정책 100% 지정
물건·사건·법원·지역·용도·기일 표본 각 20건의 고유 title·description·H1·본문
유효 ID 200, 잘못된 ID 404/410, 이전 ID 1:1 301, 장애 503; 빈 shell 200 없음
비회원 HTML·RSC·API·JSON-LD·파일 응답의 회원/제한 필드 누출 0건
봇과 동일 조건 비회원 요청의 공개 본문·링크·구조화데이터 차이 0건
로그인·가입 후 원래 URL·탭·필터·스크롤 복귀 100%, open redirect 0건
Court 8종 이벤트가 상세·허브·검색·sitemap에 멱등 반영
pending_review·권리 미확정·PII 포함 자료 자동 공개·색인 0건
빈 결과·중복 필터·tracking URL·soft 404 색인 URL 0건
색인 상세 100%가 sitemap과 최소 2개 SSR inbound link로 발견되고 관련 canonical 사건은 가능한 범위에서 4~8개 연결
모바일·접근성·CWV 예산과 Google/Naver 대표 URL 진단 통과
공개 도메인·HTTPS·접근모드 승인 후 실제 검색로봇 200 응답을 별도 확인
Sites 소유자 전용 접근이므로 외부 검색로봇은 이 시안을 색인할 수 없습니다. 공개 도메인·접근모드 승인 전까지는 기술 준비와 HTML 검증까지만 완료이며 실제 Google·네이버 색인 완료로 표시하지 않습니다.
SEO DETAIL BENCHMARK · WON-SEO-01~10
검색 잔존은 걸러내고
SSR 정보구조만 접목
019f639b-070a-7c42-aa37-87ebcf43f867의 1·2차 전수조사를 기존 제이옥션 P0·P1·P2·P3·P7·P8에 중복 없이 병합했습니다. 별도 앱·DB·도메인을 만들지 않고 Court PUBLIC_INDEX에서만 구현합니다.오픈소스 CMS가 아니라 검색어와 일치하는 SSR 사실표·기일표·물건목록을 접목하고, noindex 검색 잔존은 성공 사례로 계산하지 않음
2026-07-15 · 공개 HTTP/HTML·검색 표본
Wonsns 상세 2개
Busyman·Auctioning·모바일 Wonsns 상세 6개
2차 6개 중 4개 · 현재 색인 성공으로 계산 금지
화면·SEO 회귀 benchmark 전용 · 운영 데이터 source/fallback 금지
같은 표에 섞지 않을 검색 증거
- 01공개 HTTP·HTML·robots·canonical·피드의 현재 응답
- 02익명 공개 SERP의 실제 URL·순위·스니펫·표형 카드
- 03Search Advisor URL 검사의 수집·색인·색인가능 상태
- 04서버 Yeti 요청·상태·응답시각과 IndexNow 수신 기록
WON-SEO-01~10 통합 구현계약
10개 정확히 1회 · 04와 10은 조건부 활성화| ID·상태 | 계약 | 조사에서 확인 | 기존 단계 | 제이옥션 구현 | 완료 게이트 |
|---|---|---|---|---|---|
| WON-SEO-01REQUIRED | SSR 핵심 사실표 | 검색 스니펫의 직접 원천은 최초 HTML의 안정적 label/value 사실표 | P3 | 사건번호·법원·기일·상태·지역·용도·가격·면적·보증금·출처시각을 PUBLIC_INDEX에서 SSR | 파일럿 100건 visible 값과 projection 100% 일치 |
| WON-SEO-02REQUIRED | 결정적 메타·신선도 방어 | 정확한 사건번호·지역·용도 long-tail은 강하지만 가짜 최신성과 중복 H1은 품질 손실 | P2 · P7 | title·description·H1을 같은 content version에서 결정적으로 생성하고 검증 전 최신·오늘·실시간 금지 | 100건 중복·상태·날짜 불일치 0 |
| WON-SEO-03REQUIRED | 관련문서 그래프·이미지 계약 | 같은 법원·지역·용도 문서 연결이 발견성과 사용자 탐색을 보조 | P2 · P3 | canonical 현행 사건 4~8개를 SSR 연결하고 실제 사진 alt·깨진 이미지·혼합콘텐츠를 검사 | 고아 상세·이미지 404·모바일 넘침 0 |
| WON-SEO-04CONDITIONAL | Naver RSS 조건부 채널 | RSS는 발견 보조일 뿐 순위 원인이나 sitemap 대체가 아님 | P7 | 검증된 신규·가격·기일·상태 변경 canonical만 실제 수정시각으로 발행 | sitemap/RSS/canonical 집합 불일치와 거짓 lastmod 0 |
| WON-SEO-05REQUIRED | Naver SERP 코호트 | Search Advisor·익명 SERP·사용자 캡처·Yeti 로그는 서로 다른 증거면 | P7 · P8 | exact 사건·지역+용도·광역 질의를 결과 역할·스니펫 유형·lifecycle별 4주/8주 대사 | 미관측을 미색인으로 오판하거나 관련문서를 독립 순위로 중복집계 0 |
| WON-SEO-06REQUIRED | 금지항목 회귀 fixture | 다중 URL·soft-404·가짜 날짜·본문/JSON-LD 불일치가 조사 사이트의 핵심 결함 | P0 · P7 | host/path/query alias, invalid ID, fake freshness, duplicate event, PII, 동일 lastmod를 CI 차단 | 실패 시 sitemap·RSS·index·IndexNow 자동 차단 |
| WON-SEO-07REQUIRED | 질의의도별 SSR 사실표 팩 | 질의에 따라 사건 스냅샷·대상 목록·기일 결과·건축물 표가 선택될 수 있음 | P3 · P7 | caption·thead·tbody·th scope를 갖춘 4종 조건부 표를 같은 반응형 URL과 사실 DOM으로 SSR | 100건 표 값·제목·열·단위 누락 0 |
| WON-SEO-08REQUIRED | 공식 기일 이벤트 정규화·최신성 게이트 | 중복 기일과 과거 예정일·결과 공란이 현재 진행 상태로 오인됨 | P0 · P1 · P3 | official event ID 또는 source_event_key 결정키로 중복 제거하고 최신 검증 Court 이벤트만 상태·기일을 계산 | 과거기일+결과공란+차회없음 active는 STALE_REVIEW 격리, event 중복·종료 InStock·상태면 불일치 0 |
| WON-SEO-09REQUIRED | 단일 반응형 URL·publication 원자성 | PC noindex·모바일 index와 HTTP/www/print/popup 동시 200은 상태 전파를 분열 | P2 · P7 | publicId당 HTTPS /auctions/{publicId} 하나만 indexable하고 모든 공개면을 한 content version에서 생성 | 별칭 1회 301·UA parity·noindex feed 포함·HTTP canonical 0 |
| WON-SEO-10CONDITIONAL | 상태변경 outbox 기반 IndexNow | 검색로봇 재방문만 기다리면 신규·변경·삭제 반영이 늦지만 IndexNow 전송은 색인이나 순위를 보장하지 않습니다 | P1 · P7 · P8 | publicId+content_version+transition_type 멱등키로 canonical HTTPS의 의미 있는 상태변경만 전송 | 100건 누락·중복·재전송 0, 301/404/410 응답·재시도 증거 보존 |
배포 전 자동검증 행렬
| 검증 | 자동 대사 | 통과 기준 |
|---|---|---|
PUBLICATION | indexable canonical URL = visible facts = OG/JSON-LD = sitemap/RSS/IndexNow URL | 동일 content version 불일치 0 |
ALIAS | PC·모바일·Yeti·Googlebot × HTTP/HTTPS × host/path/query/print 별칭 | indexable 200 정확히 1개·나머지 1회 301 |
LIFECYCLE | 진행·변경·유찰·매각·취하·납부·제거 fixture | HTTP·robots·메타·본문·피드 상태 충돌 0 |
EVENT | 기일 event key·공식 순서·현재상태·stale active 차단 | 중복 0·과거기일을 현재기일로 표기 0 |
CONTENT | 100건 4종 SSR 표·메타·가격·면적·날짜·출처 계보 | PUBLIC_INDEX 불일치·회원/PII 초기 HTML 노출 0 |
ERROR | invalid publicId·영구제거·일시장애 | 각각 404·410·503, 콘텐츠형 soft-404 0 |
DISCOVERY | 동적 sitemap·조건부 RSS·관련 canonical inbound link | 거짓 lastmod·noindex URL·고아 상세 0 |
SEARCH | Search Advisor·익명 SERP·사용자 캡처·Yeti 서버로그 분리 | 4주/8주 색인·첫 노출·순위·스니펫 정확도 별도 기록 |
조사 사이트에서 반드시 복제하지 않을 결함
대표 URL·피드·IndexNow 구현 근거
DOOIN FULL-SURFACE AUDIT
두인경매 전체 기능·라우트 구현계약 인벤토리
robots 허용 177 · 차단 33
PAGE·XHR·ACTION·FILE·POLICY·STATE 정규화
기존 DOOIN-001~057 보존 + 누락 계약 8개
source map 22 · 호출후보 84
고유 action/method/field 계약 7
미분류 gap 0 · 제품 E2E는 별도
210개 same-origin 발견 URL을 75개 구현 관련 정규화 표면과 정적 자산 인벤토리에 연결
공개 HTTP·승인 인증 세션·정적 스크립트·반응형 근거를 혼합하지 않고 분리
모든 구현 관련 표면이 65개 기능계약 중 하나 이상에 연결
접근제한·비가역 미실행·원본 장애·플랫폼 보완으로 전부 분류, 미분류 0
쿠키·세션·계정·결제 개인값·HTML 원문을 산출물에 저장하지 않음
공개 조사 JSON·한국어 보고서·관찰시각·상태·최종경로·해시 보존
예정 인수조건과 실제 구현·E2E 완료 상태를 별도 판정
65개 기능 구현계약
전수조사 완료와 제품 구현 완료를 분리해 판정| ID | 제이옥션 적용성 | 영역·화면 | 라우트·근거 | 확인한 기능 | 새 구현 계약 | 자료·API | 예정 검증·인수조건 |
|---|---|---|---|---|---|---|---|
| DOOIN-001 | 현재 구현 | 홈·공통 · HOME메인 홈 셸 | /PUBLIC | 사건번호·소재지·물건종류 검색, 일정·신건·통계·추천·뉴스가 한 화면에 결합된다. | / | GET /api/v1/home은 집계·추천·신선도·출처를 독립 블록으로 반환한다. | 공개 200, 핵심 링크, 빈 상태, 마지막 갱신시각과 출처를 E2E로 검증한다. |
| DOOIN-002 | 현재 구현 | 홈·공통 · HOME사건번호 빠른검색 | /#case-searchPUBLIC | 연도와 사건번호를 조합해 상세 또는 결과로 이동하는 전역 검색 진입점이다. | /search/case | GET /api/v1/lots?caseYear=&caseSerial=; 사건 식별자는 정규화 후 안정 ID로 변환한다. | 정상·미존재·잘못된 형식·복수 물건번호를 검증한다. |
| DOOIN-003 | 현 데이터로 우선 보강 | 홈·공통 · HOME소재지·물건종류 빠른검색 | /#quick-searchPUBLIC | 3단계 주소와 복수 물건종류를 선택해 종합검색으로 넘긴다. | /search | GET /api/v1/search/options 및 /api/v1/lots; 선택조건은 URL 쿼리로 직렬화한다. | 종속 주소, 복수 용도, 초기화, 뒤로가기 상태복원을 검증한다. |
| DOOIN-004 | 현 데이터로 우선 보강 | 홈·공통 · HOME홈 테마·바로가기 | /ca/caList.php?mainLink=:themeSCRIPT | 신건·반값·특수물건·가격대·용도별 테마가 mainLink 값으로 검색조건을 주입한다. | /curation/:slug | GET /api/v1/curations/:slug가 사람이 읽는 조건, 총건수, 검색 URL을 반환한다. | 허용 slug만 수용하고 각 테마 총건수가 동일 조건 검색과 일치하는지 검증한다. |
| DOOIN-005 | 현 데이터로 우선 보강 | 법원경매 검색 · CA_SEARCH법원경매 종합검색 | /ca/caList.phpPUBLIC | 주소·법원·사건·종류·상태·기일·가격·면적·매각·용도·특수조건을 조합하고 저장·인쇄·엑셀을 제공한다. | /search | GET /api/v1/search/options, /api/v1/search/facets, /api/v1/lots; allowlist 정렬과 cursor 계약을 사용한다. | 고정 조건 50개로 총건수·facet·정렬·20/30/50/100건·페이지를 대조한다. |
| DOOIN-006 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH법원별검색 | /ca/caLaw.phpPUBLIC | 법원과 지원·담당계를 먼저 고른 뒤 동일 경매목록 계약으로 연결한다. | /search/courts | GET /api/v1/courts, /api/v1/courts/:code/departments, /api/v1/lots. | 법원·지원·담당계 종속성과 폐지·통합 코드 별칭을 검증한다. |
| DOOIN-007 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH소재지검색 | /ca/caAddr.phpPUBLIC | 시도·시군구·읍면동과 건물명·지번을 중심으로 검색한다. | /search/locations | GET /api/v1/regions/children 및 /api/v1/lots?regionCode=&addressQuery=. | 3단계 종속선택, 행정구역 개편 별칭, 공백·도로명·지번 검색을 검증한다. |
| DOOIN-008 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH역세권검색 | /ca/caTrain.phpPUBLIC | 노선 선택 후 역 정보 조회를 거쳐 주변 경매물건을 찾는다. | /search/transit | GET /api/v1/transit/lines, /stations, /api/v1/lots?stationId=&radius=. | 노선 변경 시 역 초기화, 환승역 중복제거, 반경 경계와 지도 결과를 검증한다. |
| DOOIN-009 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH차량·장비검색 | /ca/caCar.phpPUBLIC | 승용·승합·화물·버스·중장비 등 동산 전용 조건과 목록을 제공한다. | /search/vehicles | GET /api/v1/lots?assetClass=vehicle 및 차량 제원 projection. | 차종·연식·감정가·기일 필터와 제원 누락 대체상태를 검증한다. |
| DOOIN-010 | 현재 구현 | 법원경매 검색 · CA_SEARCH경매일정 | /ca/caDate.phpPUBLIC | 날짜와 법원·담당계를 축으로 기일별 물건을 조회한다. | /calendar | GET /api/v1/sale-events?from=&to=&courtCode=; sale_event 원장을 사용한다. | 달력 건수와 동일 조건 목록, 휴정·변경·연기 상태를 검증한다. |
| DOOIN-011 | 현재 구현 | 법원경매 검색 · CA_SEARCH기일별 목록 | /ca/caDtList.php?bidDt=:dateSCRIPT | 홈 일정 선택이 날짜와 선택 법원을 쿼리로 전달해 목록을 연다. | /calendar/:date | GET /api/v1/sale-events/:date/lots?courtCode=. | 유효 날짜, 법원 조합, 빈 기일, 표준시 경계를 검증한다. |
| DOOIN-012 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH신건검색 | /ca/caNew.phpPUBLIC | 새로 공고된 물건을 날짜·법원 기준으로 탐색한다. | /search/new | GET /api/v1/lots?firstPublishedFrom=&firstPublishedTo=&courtCode=. | 공고일과 수집일을 분리하고 재수집 시 중복이 없는지 검증한다. |
| DOOIN-013 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH날짜별 신건목록 | /ca/caNewList.php?bidDt=:dateSCRIPT | 홈의 오늘 공고 신건에서 날짜·법원별 세부 목록으로 이동한다. | /search/new/:date | GET /api/v1/lots/new?publishedDate=&courtCode=. | 홈 신건 집계와 목록 총건수, 날짜 변경, 빈 상태를 대조한다. |
| DOOIN-014 | 참고만·직접 복제 제외 | 법원경매 검색 · CA_SEARCH이해관계인검색 | /ca/caPl.phpPUBLIC | 이해관계인 관련 별도 검색 진입점이며 개인정보·권리정보의 공개 경계가 필요하다. | /search/stakeholders | 공개 검색은 비식별 facet만 제공하고 제한 필드는 권한·열람사유·감사를 요구한다. | 비회원 검색으로 개인 식별값이 노출되지 않고 권한 우회가 차단되는지 검증한다. |
| DOOIN-015 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH전문가코멘트 | /ca/caExpert.phpPUBLIC | 물건별 전문가 의견을 목록 형태로 제공하고 상세로 연결한다. | /insights/experts | GET /api/v1/expert-comments?lotId=; 작성자 역할·작성시각·수정이력을 제공한다. | 공개범위, 물건 연결, 삭제·수정 이력, HTML 정화를 검증한다. |
| DOOIN-016 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH조회수랭킹 | /ca/caTopView.phpPUBLIC | 기간별 조회량을 기준으로 인기 물건을 노출한다. | /rankings/views | GET /api/v1/rankings/views?period=; 봇 제외 집계와 안정 동률정렬을 사용한다. | 기간 전환, 중복조회 억제, 동률 순서, 삭제 물건 제외를 검증한다. |
| DOOIN-017 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH매각통계 | /ca/caStats.phpPUBLIC | 기간·법원 단위 경매 통계를 별도 화면과 홈 바로가기로 제공한다. | /statistics/sales | GET /api/v1/statistics/sales?courtCode=&period=; 산식과 기준일을 함께 반환한다. | 표본 원장 재계산, 홈 요약 일치, 0건·부분집계 상태를 검증한다. |
| DOOIN-018 | 참고만·직접 복제 제외 | 법원경매 검색 · CA_SEARCH샘플물건 | /ca/caSample.phpPUBLIC | 비회원이 일부 물건의 사건·주소·가격·기일을 확인하고 상세 진입을 시험할 수 있다. | /samples | GET /api/v1/lots/samples; 공개등급 필드와 선정 근거만 반환한다. | 비회원 상세 연결, 만료·변경 물건 대체, 개인정보 비노출을 검증한다. |
| DOOIN-019 | 추가 데이터·운영결정 필요 | 법원경매 검색 · CA_SEARCH예정물건 | /ca/caBefo.phpPUBLIC | 매각기일 확정 전 단계 물건을 일반 진행물건과 구분해 제공한다. | /upcoming | GET /api/v1/lots?stage=pre-sale; 사건 상태와 다음 확인예정시각을 반환한다. | 예정→진행 전이, 중복 병합, 기일 미정 표시, 상세 연결을 검증한다. |
| DOOIN-020 | 추가 데이터·운영결정 필요 | 공매 검색 · PA_SEARCH공매검색 | /pa/paList.phpPUBLIC | 물건번호·입찰일·처분방식·자산·진행상태·기관·주소·가격·종류 조건을 제공한다. | /onbid | 온비드 공식 API adapter를 통해 GET /api/v1/public-auctions를 제공하고 출처 원문 URL을 유지한다. | 공식 API 표본 대조, 필터·페이지·마감상태·원문 링크를 검증한다. |
| DOOIN-021 | 추가 데이터·운영결정 필요 | 지도검색 · MAP_SEARCH지도검색 | /kko/AUTH | 비로그인에서는 로그인 경계가 표시되고 인증 후 별도 지도 앱에서 목록 검색과 공간 탐색을 보완한다. | /map | GET /api/v1/lots/map?bbox=&zoom=&filters=; 클러스터와 목록에 동일 public_id를 사용한다. | 비회원 인증경계와 390px·데스크톱 bbox 재조회, 클러스터, 목록 동기화, 키보드 대체를 검증한다. |
| DOOIN-022 | 추가 데이터·운영결정 필요 | 법원경매 상세·파일 · CA_DETAIL_FILE법원경매 물건상세 | /ca/caView.php?tid=:legacyTidAUTH | 사건·물건·가격·기일·현황·권리·임차·사진·문서·지도 정보를 단일 상세 흐름에 결합한다. | /auctions/:publicId | GET /api/v1/lots/:publicId와 detail-projection-v3; legacyTid는 별칭 테이블로만 해석한다. | 인증 대표 상세의 필수 섹션, 상태변경 이력, 출처·조회일, 301 별칭을 검증한다. |
| DOOIN-023 | 현 데이터로 우선 보강 | 법원경매 상세·파일 · CA_DETAIL_FILE선택보기·다건상세 | /ca/Viewmulti.phpSCRIPT | 검색결과에서 선택한 여러 물건을 연속 비교·열람하는 선택보기 동작으로 연결된다. | /compare | POST /api/v1/member/compare는 public_id 배열을 순서 보존해 반환하며 최대 건수를 제한한다. | 실제 E2E에서 선택 0·1·최대·초과, 다른 자산유형 비교, 삭제 물건 대체를 검증한다. |
| DOOIN-024 | 추가 데이터·운영결정 필요 | 법원경매 상세·파일 · CA_DETAIL_FILE법원경매 사진·문서 | /ca/caFile.php 및 /FILE/CA/*AUTH | 사진 원본과 감정·현황·매각 관련 파일을 상세에서 분리 열람하는 계열이다. | /auctions/:publicId/documents | GET /api/v1/lots/:id/images 및 /documents; 공개등급·MIME·해시·출처·취득시각을 반환한다. | 허용 파일 200, 제한 파일 403, 깨진 파일 대체, 경로순회·직접 URL 우회를 검증한다. |
| DOOIN-025 | 추가 데이터·운영결정 필요 | 공매 상세·파일 · PA_DETAIL_FILE공매 물건상세 | /pa/paView.php?pid=:legacyIdAUTH | 공매 기관·처분·입찰·가격·소재·자산 정보를 목록에서 상세로 연결한다. | /onbid/:publicId | GET /api/v1/public-auctions/:publicId; 온비드 원문 식별자와 원문 URL을 보존한다. | 공식 상세 표본, 마감·낙찰 상태, 기관·회차, 원문 이동을 검증한다. |
| DOOIN-026 | 추가 데이터·운영결정 필요 | 공매 상세·파일 · PA_DETAIL_FILE공매 사진·첨부 | /pa/paFile.php 및 공매 파일 계열AUTH | 공매 상세의 사진·첨부 자료를 별도 뷰로 제공하는 파일 계열이다. | /onbid/:publicId/documents | GET /api/v1/public-auctions/:id/assets; 공식 원문 우선이며 캐시는 권리·만료정책을 따른다. | 공식 URL, MIME·크기, 만료 링크 갱신, 비허용 복제 차단을 검증한다. |
| DOOIN-027 | 추가 데이터·운영결정 필요 | 커뮤니티 · BOARD공지사항 | /board/boList.php?board_id=noticePUBLIC | 공지 목록·검색·상세로 운영 변경과 장애·휴무 정보를 전달한다. | /community/notices | GET /api/v1/content/notices 및 /:slug; 게시·수정·고정·노출기간을 계약화한다. | 목록·상세·검색·고정순서·노출기간·404를 검증한다. |
| DOOIN-028 | 추가 데이터·운영결정 필요 | 커뮤니티 · BOARD자주하는질문 | /board/boList.php?board_id=faqPUBLIC | 서비스 이용 질문을 게시판형 목록과 상세로 제공한다. | /community/faq | GET /api/v1/content/faq?category=&query=. | 분류·검색·아코디언 접근성·직접 상세 URL을 검증한다. |
| DOOIN-029 | 추가 데이터·운영결정 필요 | 커뮤니티 · BOARD전문가칼럼 | /board/boList.php?board_id=columnPUBLIC | 전문가 콘텐츠를 목록과 상세로 제공한다. | /community/columns | GET /api/v1/content/columns; 작성자 표시명·게시일·대표이미지·본문을 반환한다. | 페이지·상세·HTML 정화·이미지 대체·메타태그를 검증한다. |
| DOOIN-030 | 추가 데이터·운영결정 필요 | 커뮤니티 · BOARD부동산 대출규정 | /board/boList.php?board_id=loanPUBLIC | 대출 관련 규정·해설을 별도 게시판 분류로 제공한다. | /community/loan-rules | GET /api/v1/content/loan-rules; 기준일·출처 링크·면책 표시를 필수화한다. | 기준일·출처·개정이력·오래된 글 경고를 검증한다. |
| DOOIN-031 | 추가 데이터·운영결정 필요 | 커뮤니티 · BOARD부동산정책 | /board/boList.php?board_id=policyPUBLIC | 정책 자료를 게시판 분류와 상세로 제공한다. | /community/policies | GET /api/v1/content/policies; 원출처·발표일·적용일을 분리한다. | 원출처 링크, 날짜 정렬, 개정 관계와 검색색인을 검증한다. |
| DOOIN-032 | 추가 데이터·운영결정 필요 | 커뮤니티 · BOARD부동산소식 | /board/boList.php?board_id=newsPUBLIC | 홈 뉴스 모듈과 전체 목록·상세가 연결된다. | /community/news | GET /api/v1/content/news; 홈 노출 여부와 canonical URL을 반환한다. | 홈·목록 일치, 게시일 정렬, 중복 canonical, 만료 콘텐츠를 검증한다. |
| DOOIN-033 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITY경매용어사전 | /study/terms.phpPUBLIC | 초성·용어 중심으로 경매 개념을 탐색한다. | /resources/glossary | GET /api/v1/resources/glossary?initial=&query=. | 초성·검색·동의어·직접 앵커·모바일 색인을 검증한다. |
| DOOIN-034 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITY경매절차 | /study/auct_process.phpPUBLIC | 신청부터 배당까지 경매 진행단계를 설명한다. | /resources/process | GET /api/v1/resources/process; 단계·순서·관련 문서·근거 출처를 반환한다. | 단계 순서, 앵커 이동, 인쇄, 출처·개정일을 검증한다. |
| DOOIN-035 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITY관련서식 | /study/docu_auct.phpPUBLIC | 경매 관련 서식을 분류하고 파일로 연결한다. | /resources/forms | GET /api/v1/resources/forms; 제목·분류·파일형식·크기·출처·개정일을 반환한다. | 목록·다운로드·MIME·파일명·만료·출처를 검증한다. |
| DOOIN-036 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITY경매지식 | /study/auct_faq.phpPUBLIC | 실무 지식 항목을 목록형으로 제공한다. | /resources/knowledge | GET /api/v1/resources/knowledge?category=&page=. | 분류·페이지·빈 상태·상세 링크·검색색인을 검증한다. |
| DOOIN-037 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITY경매지식 상세 | /study/auct_faq_view.php?idx=:legacyIdPUBLIC | 선택 지식의 본문과 이전·다음 이동을 제공하는 상세 계열이다. | /resources/knowledge/:slug | GET /api/v1/resources/knowledge/:slug; legacy ID는 canonical slug로 리다이렉트한다. | 본문, 이전·다음, 잘못된 ID, 301·canonical을 검증한다. |
| DOOIN-038 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITY자료 다운로드 | /res/download.php?mode=docu_form…SCRIPT | 관련서식과 안내 자료의 파일 다운로드 동작이 별도 응답으로 분리된다. | /api/v1/resources/files/:fileId | 권리등급·MIME·크기·Content-Disposition·해시를 서버에서 검증해 스트리밍한다. | 허용·만료·미존재·직접경로·경로순회·대용량 중단을 검증한다. |
| DOOIN-039 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITYPDF 열람·인쇄 | /api/pdf/web/pdf.php?file=…SCRIPT | 문서형 자료를 브라우저에서 열거나 인쇄하는 보조 기능이 있다. | /resources/files/:fileId/view | GET /api/v1/resources/files/:id/view는 inline PDF와 안전 헤더를 반환한다. | PDF 렌더, 키보드, 인쇄, 다운로드 대체, 스크립트 비실행을 검증한다. |
| DOOIN-040 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITY법원안내 | /etc/crt_list.phpPUBLIC | 법원 목록과 관할·연락·위치 정보를 찾는 안내 페이지다. | /resources/courts | GET /api/v1/courts?include=location,departments; 공식 법원 코드와 출처를 사용한다. | 전체 법원 코드, 폐지·통합, 위치 링크, 검색을 검증한다. |
| DOOIN-041 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITY주민센터안내 | /etc/dong_list.phpPUBLIC | 지역 선택을 통해 주민센터 관련 안내를 찾는다. | /resources/community-centers | 공식 행정기관 원문 링크 중심으로 제공하고 자체 데이터에는 기준일을 표시한다. | 지역 종속선택, 외부 링크, 오래된 정보 경고, 390px 표를 검증한다. |
| DOOIN-042 | 추가 데이터·운영결정 필요 | 자료실·안내 · STUDY_UTILITY유용한사이트 | /etc/relation_site.phpPUBLIC | 법원·공공·부동산 관련 외부 사이트를 분류해 제공한다. | /resources/links | GET /api/v1/resources/links; 운영자 allowlist와 마지막 점검시각을 반환한다. | HTTPS·도메인 allowlist·깨진 링크·새 창 안내를 검증한다. |
| DOOIN-043 | 추가 데이터·운영결정 필요 | 회원·결제 · MEMBER_PAYMENT회원가입 약관동의 | /member/agree.phpPUBLIC | 회원가입 전 약관과 개인정보 동의를 받고 다음 단계로 이동한다. | /join/agreements | POST /api/v1/member/agreements는 문서 버전·필수/선택·동의시각을 서버에 기록한다. | 필수 미동의 차단, 선택 분리, 문서 버전, 재제출 멱등성을 검증한다. |
| DOOIN-044 | 현 데이터로 우선 보강 | 회원·결제 · MEMBER_PAYMENT마이페이지 허브 | /member/mypage.phpAUTH | 관심·알림·최근열람·결제·포인트·정보수정으로 이어지는 회원 허브다. | /mypage | GET /api/v1/member/summary; 세션 사용자 범위의 집계만 반환한다. | 비회원 401, 세션 회전, 다른 회원 데이터 격리, 각 카드 링크를 검증한다. |
| DOOIN-045 | 현재 구현 | 회원·결제 · MEMBER_PAYMENT관심물건 | /member/intrList.phpAUTH | 저장한 경매·공매 물건을 분류·우선순위·메모와 최신 가격·기일로 다시 확인한다. | /mypage/favorites | GET/POST/DELETE /api/v1/member/favorites; public_id·분류·우선순위·등록시각·변경요약을 반환한다. | 추가·중복·분류·메모·삭제·상태변경, 회원 격리, 만료 물건 대체를 검증한다. |
| DOOIN-046 | 현 데이터로 우선 보강 | 회원·결제 · MEMBER_PAYMENT저장검색 | /member/favorSearchList.phpAUTH | 회원이 저장한 검색조건을 다시 실행하고 이름·조건을 편집하거나 삭제한다. | /mypage/saved-searches | GET/POST/PATCH/DELETE /api/v1/member/saved-searches; 버전형 query schema와 알림 설정을 관리한다. | 저장·재실행·편집·삭제·중복이름·구버전 조건변환·회원 격리를 검증한다. |
| DOOIN-047 | 현 데이터로 우선 보강 | 회원·결제 · MEMBER_PAYMENT최근열람내역 | /member/rsntList.phpAUTH | 최근 본 물건을 시간순으로 제공하고 재진입을 지원한다. | /mypage/recent | GET/DELETE /api/v1/member/recent-views; 보존기간과 cursor를 명시한다. | 열람 기록·정렬·개별/전체 삭제·보존만료·회원 격리를 검증한다. |
| DOOIN-048 | 현 데이터로 우선 보강 | 회원·결제 · MEMBER_PAYMENT나의 입찰 달력 | /member/calendar.phpAUTH | 관심 또는 입찰 예정 물건의 기일을 개인 달력으로 모아본다. | /mypage/calendar | GET /api/v1/member/calendar?from=&to=; sale_event와 회원 메모를 분리해 반환한다. | 월 이동, 기일변경, 중복, 캘린더·상세 동기화, 회원 격리를 검증한다. |
| DOOIN-049 | 추가 데이터·운영결정 필요 | 회원·결제 · MEMBER_PAYMENT결제안내 | /member/pay_guide.phpPUBLIC | 이용권·서비스 범위와 결제 진입 정보를 공개한다. | /pricing | GET /api/v1/plans; 가격·기간·포함기능·환불정책·세금을 명시한다. | 표시 가격과 결제 요청 일치, 만료 상품 차단, 모바일 표 가독성을 검증한다. |
| DOOIN-050 | 추가 데이터·운영결정 필요 | 회원·결제 · MEMBER_PAYMENT이용권 구매 | /member/pay.phpAUTH | 로그인 회원이 상품을 선택해 결제를 시작한다. | /mypage/billing/checkout | POST /api/v1/member/orders와 결제사 승인·웹훅; idempotency와 서버 가격 검증을 필수화한다. | 성공·취소·실패·중복 웹훅·금액변조·새로고침 재요청을 검증한다. |
| DOOIN-051 | 추가 데이터·운영결정 필요 | 회원·결제 · MEMBER_PAYMENT결제관리·이력 | /member/pay_history.phpAUTH | 회원의 주문·승인·취소·환불 상태와 이용권 변화를 조회한다. | /mypage/billing/history | GET /api/v1/member/orders; 민감 결제수단은 마스킹하고 상태이력을 append-only로 제공한다. | 회원 격리, 환불 상태, 영수증 권한, 민감값 마스킹을 검증한다. |
| DOOIN-052 | 추가 데이터·운영결정 필요 | 회원·결제 · MEMBER_PAYMENT쿠폰 | /member/cpnList.phpAUTH | 회원 쿠폰의 사용 가능·사용·만료 상태를 조회한다. | /mypage/benefits | GET /api/v1/member/coupons; 발급원장·상태이력·만료예정 요약을 반환한다. | 중복 사용, 만료, 주문 취소 복원, 상품 적용조건, 회원 격리를 검증한다. |
| DOOIN-053 | 현재 구현 | 회원·결제 · MEMBER_PAYMENT회원정보 수정 | /member/modifyProfile.phpAUTH | 프로필·연락·비밀번호·수신동의 변경을 처리한다. | /mypage/profile | GET/PATCH /api/v1/member/profile 및 /change-password; 재인증·CSRF·버전 충돌을 적용한다. | 재인증, 유효성, 비밀번호 정책, 동의 이력, 동시수정 충돌을 검증한다. |
| DOOIN-054 | 현 데이터로 우선 보강 | 고객센터·정책 · HELP전체서비스 | /help/siteMap.phpPUBLIC | 경매·공매·지도·커뮤니티·자료실·회원·고객센터 전체 메뉴를 한곳에 나열한다. | /sitemap | 정적 route registry에서 권한·노출 조건을 반영해 생성한다. | 등록 라우트 전수, 깨진 링크 0, 회원 전용 표기, 키보드 탐색을 검증한다. |
| DOOIN-055 | 추가 데이터·운영결정 필요 | 고객센터·정책 · HELP이용약관 | /help/service_guide.phpPUBLIC | 서비스 이용약관 전문을 공개한다. | /legal/terms | GET /api/v1/legal/terms/current; 버전·시행일·이전 버전 링크를 반환한다. | 현재·이전 버전, 시행일, 가입 동의 버전 연결, 인쇄를 검증한다. |
| DOOIN-056 | 추가 데이터·운영결정 필요 | 고객센터·정책 · HELP개인정보처리방침 | /help/privacy_guide.phpPUBLIC | 개인정보 처리 목적·항목·보유·권리 안내 전문을 공개한다. | /legal/privacy | GET /api/v1/legal/privacy/current; 버전과 변경이력을 반환한다. | 현행 버전, 변경이력, 가입 동의 연결, 검색색인을 검증한다. |
| DOOIN-057 | 현 데이터로 우선 보강 | 고객센터·정책 · HELP이메일 무단수집거부 | /help/email_scraprefuse.phpPUBLIC | 공개된 이메일 주소의 무단 수집 거부 안내를 제공한다. | /legal/email-collection | 정적 법적 안내 문서로 버전·시행일만 관리한다. | 공개 200, 공통 푸터 링크, canonical, 인쇄 가독성을 검증한다. |
| DOOIN-058 | 현재 구현 | 회원·결제 · MEMBER_PAYMENT로그인 | /res/auth/logIn.phpSCRIPT | 공개 로그인 모달과 POST transport, 저장 ID·재시도·추가인증 상태를 확인했다. | /login | POST /api/v1/auth/login; 세션 회전·rate limit·계정 존재 비노출. | 정상·오류·잠금·재시도·추가인증·CSRF·return URL을 E2E로 검증한다. |
| DOOIN-059 | 현재 구현 | 회원·결제 · MEMBER_PAYMENT로그아웃·세션회수 | /res/auth/logOut.phpSCRIPT | 로그아웃 후 로그인 상태와 브라우저 보기 설정을 초기화한다. | /logout | POST /api/v1/auth/logout 및 DELETE /api/v1/me/sessions/:id. | 현재·전체기기 로그아웃, 쿠키 폐기, 재사용 차단, 동시접속을 검증한다. |
| DOOIN-060 | 추가 데이터·운영결정 필요 | 회원·결제 · MEMBER_PAYMENT아이디·비밀번호 복구 | /res/auth/findPwd.phpSCRIPT | 아이디 찾기·비밀번호 복구·인증코드 모달 상태가 공개 스크립트에 있다. | /account/recovery | POST /api/v1/auth/recovery/start 및 /verify; 동일한 응답과 일회 토큰 사용. | 존재·미존재 계정 동일 응답, 만료·재사용·횟수제한·감사로그를 검증한다. |
| DOOIN-061 | 추가 데이터·운영결정 필요 | 회원·결제 · MEMBER_PAYMENT휴대전화 본인확인 | /member/res/mobileChk.phpSCRIPT | 가입·복구 과정의 휴대전화 인증코드 발급·확인 흐름이다. | /join/verification | POST /api/v1/auth/mobile-verifications; 목적·만료·시도횟수·재사용 차단. | 발급·확인·오류·만료·재전송·다른 목적 재사용 차단을 검증한다. |
| DOOIN-062 | 추가 데이터·운영결정 필요 | 회원·결제 · MEMBER_PAYMENT회원탈퇴 | /member/leave.phpSCRIPT | 회원탈퇴 경로와 보존·세션회수 요구를 별도 계약으로 분리한다. | /mypage/account/leave | POST /api/v1/me/account-closure; 재인증·유예·법정보존·익명화 원장. | 재인증·취소·세션전량회수·보존기간·재가입 정책을 E2E로 검증한다. |
| DOOIN-063 | 추가 데이터·운영결정 필요 | 커뮤니티 · BOARD게시판 상세·작성 | /board/boView.php · /board/boWrite.phpSCRIPT | 6개 게시판의 목록 밖 상세·작성 경로를 분리했고 boWrite의 현행 404도 확인했다. | /community/:type/:slug · /admin/content | GET /api/v1/content/:type/:slug 및 관리자 CRUD·첨부·개정이력. | 잘못된 ID 404, 역할권한, 작성·수정·철회·첨부·HTML 정화를 검증한다. |
| DOOIN-064 | 현 데이터로 우선 보강 | 고객센터·정책 · HELP대표호스트·기술 경계 | /robots.txt · /sitemap.xml · /index.phpSCRIPT | 대표호스트 분산, 중복 홈, canonical 부재, 기술 파일 404, 보안 헤더·쿠키 속성 누락을 확인했다. | /robots.txt · /sitemap-index.xml · /.well-known/security.txt | 정적 생성기와 edge 정책; canonical·redirect·headers·cookie contract. | www/apex·index 통합, sitemap, favicon, manifest, security.txt, 보안헤더를 자동 검증한다. |
| DOOIN-065 | 현 데이터로 우선 보강 | 홈·공통 · HOME읽기 XHR·폼 transport | /res/main.php · */res/*.phpSCRIPT | 홈·목록·게시판·학습·주소·주민센터의 읽기 요청과 29개 폼·7개 고유 폼 계약을 분리했다. | /api/v1/home · /search/* · /content/* · /resources/* | 읽기 GET+cursor+cache로 표준화하고 저장·인증만 POST로 유지. | 84개 호출 후보의 method·필드·오류·빈 상태를 계약 테스트로 검증한다. |
75개 구현 관련 원본 표면
75 / 75개 표시 · 전체 210 URL은 증거 JSON에 보존| ID | 제이옥션 적용성 | 그룹·종류 | 원본 경로 | 방법·근거 | 관찰·상태 | 연결 계약 | 판정·구현 메모 |
|---|---|---|---|---|---|---|---|
| SURF-001 | 현 데이터로 우선 보강 | HOMEPAGE | / | GET HSA | OBSERVED_CURRENTHTTP 200 | DOOIN-001DOOIN-002DOOIN-003 | CLOSED 익명 홈 200과 로그인 홈 기준선을 모두 확인. 사건번호·소재지·물건종류·일정·콘텐츠 허브. |
| SURF-002 | 현 데이터로 우선 보강 | HOMEPAGE | /index.php | GET H | OBSERVED_CURRENTHTTP 200 | DOOIN-064 | PLATFORM_REMEDIATION 루트와 같은 본문을 200으로 제공하는 중복 별칭. 대표 URL 301 필요. |
| SURF-003 | 현 데이터로 우선 보강 | HOMEXHR | /res/main.phpday_schedule|week_schedule|notice|news|newItem|stats|samples|comments | POST S | DISCOVERED_SCRIPT | DOOIN-001DOOIN-065 | CLOSED 홈 읽기 모듈 8종을 mode 값으로 제공. |
| SURF-004 | 현 데이터로 우선 보강 | PLATFORMPOLICY | /robots.txt | GET H | OBSERVED_CURRENTHTTP 200 | DOOIN-054DOOIN-064 | CLOSED /member·/res·/ca·/pa 등을 차단하고 /res/main.php만 허용. |
| SURF-005 | 현 데이터로 우선 보강 | PLATFORMPOLICY | /sitemap.xml | GET H | TECHNICAL_GAPHTTP 404 | DOOIN-054DOOIN-064 | PLATFORM_REMEDIATION 현행 응답 404. 공개 정식 URL만 담는 sitemap index 필요. |
| SURF-006 | 현 데이터로 우선 보강 | PLATFORMTECHNICAL | /favicon.ico | GET H | TECHNICAL_GAPHTTP 404 | DOOIN-064 | PLATFORM_REMEDIATION 기본 favicon 경로는 404이며 실제 아이콘은 별도 경로에 존재. |
| SURF-007 | 현 데이터로 우선 보강 | PLATFORMTECHNICAL | /manifest.json | GET H | TECHNICAL_GAPHTTP 404 | DOOIN-064 | PLATFORM_REMEDIATION 웹 앱 manifest 경로 404. |
| SURF-008 | 현 데이터로 우선 보강 | PLATFORMTECHNICAL | /.well-known/security.txt | GET H | TECHNICAL_GAPHTTP 404 | DOOIN-064 | PLATFORM_REMEDIATION 보안 연락 정책 경로 404. |
| SURF-009 | 현 데이터로 우선 보강 | CA_SEARCHPAGE | /ca/caList.php | GET AHS | OBSERVED_AUTH_BASELINE | DOOIN-004DOOIN-005 | CLOSED 종합검색 기본 custom과 mainLink 프리셋 9종, 합계 10상태. 현재 robots 차단으로 공개 재요청하지 않음. |
| SURF-010 | 현 데이터로 우선 보강 | CA_SEARCHXHR | /ca/res/AuctList.php | POST S | ROBOTS_NOT_FETCHED | DOOIN-005DOOIN-065 | ACCESS_RESTRICTED 검색결과 목록 transport. 저장·선택·인쇄·엑셀 상태와 분리 구현. |
| SURF-011 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caLaw.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-006 | CLOSED 법원·지원·담당계 종속검색. |
| SURF-012 | 추가 데이터·운영결정 필요 | CA_SEARCHXHR | /ca/res/caLawSrchFrm.phpdptStep | GET S | ROBOTS_NOT_FETCHED | DOOIN-006DOOIN-065 | ACCESS_RESTRICTED 법원 선택 하위 폼. dptStep 상태 포함. |
| SURF-013 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caAddr.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-007 | CLOSED 시도·구군·읍면동 다중 선택. |
| SURF-014 | 추가 데이터·운영결정 필요 | CA_SEARCHXHR | /ca/res/caAddrSrchFrm.phpadrsStep | GET S | ROBOTS_NOT_FETCHED | DOOIN-007DOOIN-065 | ACCESS_RESTRICTED 주소 선택 하위 폼. adrsStep 상태 포함. |
| SURF-015 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caTrain.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-008 | CLOSED 권역·노선·역·반경 검색. |
| SURF-016 | 추가 데이터·운영결정 필요 | CA_SEARCHXHR | /ca/res/trainSrchInfo.php | GET S | ROBOTS_NOT_FETCHED | DOOIN-008DOOIN-065 | ACCESS_RESTRICTED 노선별 역 정보 응답. |
| SURF-017 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caCar.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-009 | CLOSED 차량·장비 전용 검색. |
| SURF-018 | 추가 데이터·운영결정 필요 | CA_SEARCHXHR | /ca/res/carModel.php | GET S | ROBOTS_NOT_FETCHED | DOOIN-009DOOIN-065 | ACCESS_RESTRICTED 제조사별 모델 종속 응답. |
| SURF-019 | 현재 구현 | CA_SEARCHPAGE | /ca/caDate.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-010 | CLOSED 월별 경매일정과 법원 상태. |
| SURF-020 | 현재 구현 | CA_SEARCHPAGE | /ca/caDtList.php?bidDt=:date&sptCd=:court&dptCd=:department | GET AS | OBSERVED_AUTH_BASELINE | DOOIN-011 | CLOSED 날짜·법원·담당계 기일 하위목록. |
| SURF-021 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caNew.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-012 | CLOSED 주중 신건 달력. |
| SURF-022 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caNewList.php?bidDt=:date&sptCd=:court&dptCd=:department | GET AS | OBSERVED_AUTH_BASELINE | DOOIN-013 | CLOSED 날짜·법원·담당계 신건 하위목록. |
| SURF-023 | 참고만·직접 복제 제외 | CA_SEARCHPAGE | /ca/caPl.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-014 | CLOSED 관계인 유형·이름 검색. 공개 필드의 개인정보 경계 필요. |
| SURF-024 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caExpert.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-015 | CLOSED 전문가 기준 검색과 코멘트 목록. |
| SURF-025 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caTopView.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-016 | CLOSED 기간별 TOP30. |
| SURF-026 | 추가 데이터·운영결정 필요 | CA_SEARCHXHR | /ca/res/topView.php | POST S | ROBOTS_NOT_FETCHED | DOOIN-016DOOIN-065 | ACCESS_RESTRICTED 인기물건 데이터 transport. |
| SURF-027 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caStats.php | GET AHS | OBSERVED_AUTH_BASELINE | DOOIN-017 | CLOSED 법원·지원·연·월·일 통계 drill-down. |
| SURF-028 | 참고만·직접 복제 제외 | CA_SEARCHPAGE | /ca/caSample.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-018 | CLOSED 비회원 샘플 물건. |
| SURF-029 | 추가 데이터·운영결정 필요 | CA_SEARCHPAGE | /ca/caBefo.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-019 | CLOSED 예정사건·접수·개시·배당종기. |
| SURF-030 | 추가 데이터·운영결정 필요 | CA_DETAIL_FILEPAGE | /ca/caView.php?tid=:legacyTid&free=:flag | GET AS | OBSERVED_AUTH_BASELINE | DOOIN-022DOOIN-023 | CLOSED 법원경매 상세 9개 핵심 섹션·16개 탭·6개 행동의 부모 화면. |
| SURF-031 | 추가 데이터·운영결정 필요 | CA_DETAIL_FILEVIEWER | /ca/caFile.php | GET AS | OBSERVED_AUTH_BASELINE | DOOIN-024 | ACCESS_RESTRICTED 사진·문서 뷰어 경계. 실제 파일 전량 무결성은 자체 구현 E2E로 검증. |
| SURF-032 | 추가 데이터·운영결정 필요 | PA_SEARCHPAGE | /pa/paList.php | GET AH | OBSERVED_AUTH_BASELINE | DOOIN-020 | CLOSED 공매 검색 UX만 참고하고 데이터는 온비드 공식 API 사용. |
| SURF-033 | 추가 데이터·운영결정 필요 | PA_DETAIL_FILEPAGE | /pa/paView.php?cltrNo=:legacyId&free=:flag | GET AS | OBSERVED_AUTH_BASELINE | DOOIN-025 | ACCESS_RESTRICTED 공매 상세 진입. 공식 온비드 식별자와 독립 public_id 매핑. |
| SURF-034 | 추가 데이터·운영결정 필요 | PA_DETAIL_FILEVIEWER | /pa/paFile.php | GET AS | OBSERVED_AUTH_BASELINE | DOOIN-026 | ACCESS_RESTRICTED 공매 파일·첨부 경계. |
| SURF-035 | 추가 데이터·운영결정 필요 | MAP_SEARCHPAGE | /kko/ | GET HAS | OBSERVED_CURRENTHTTP 200 | DOOIN-021 | CLOSED 비로그인 경계와 인증 지도검색 상태를 분리 관찰. |
| SURF-036 | 추가 데이터·운영결정 필요 | MAP_SEARCHACTION | /kko/kkoXY.php?xc=:x&yc=:y&sangho=:name | GET S | DISCOVERED_SCRIPT | DOOIN-021 | CLOSED 법원·시설 좌표 길찾기 링크. |
| SURF-037 | 추가 데이터·운영결정 필요 | BOARDPAGE | /board/boList.php?board_id=:board | GET HAS | OBSERVED_CURRENTHTTP 200 | DOOIN-027DOOIN-028DOOIN-029DOOIN-030DOOIN-031DOOIN-032 | CLOSED notice·faq·column·loan·policy·news 6종 목록. |
| SURF-038 | 추가 데이터·운영결정 필요 | BOARDPAGE | /board/boView.php?board_id=:board&idx=:id | GET AS | SOFT_EMPTY_CURRENTHTTP 200 | DOOIN-063 | PLATFORM_REMEDIATION 상세 식별자 누락에도 200 빈 셸. 새 구현은 잘못된 ID를 404로 처리. |
| SURF-039 | 추가 데이터·운영결정 필요 | BOARDACTION | /board/boWrite.php?board_id=:board | GET SH | BROKEN_CURRENTHTTP 404 | DOOIN-063 | BROKEN_SOURCE 공개 JS가 연결하지만 현재 404. 작성·수정·첨부 권한을 자체 CMS로 재구현. |
| SURF-040 | 추가 데이터·운영결정 필요 | BOARDXHR | /board/res/Board.phplist | POST S | DISCOVERED_SCRIPT | DOOIN-027DOOIN-028DOOIN-029DOOIN-030DOOIN-031DOOIN-032DOOIN-065 | CLOSED mode=list, board_id, pageNo, dataSize, pageSize, 검색어로 목록을 반환. |
| SURF-041 | 추가 데이터·운영결정 필요 | STUDY_UTILITYPAGE | /study/terms.php | GET HAS | OBSERVED_CURRENTHTTP 200 | DOOIN-033 | CLOSED 용어 분류·검색·페이지. |
| SURF-042 | 추가 데이터·운영결정 필요 | STUDY_UTILITYPAGE | /study/auct_process.php | GET HA | OBSERVED_CURRENTHTTP 200 | DOOIN-034 | CLOSED 경매절차 안내. |
| SURF-043 | 추가 데이터·운영결정 필요 | STUDY_UTILITYPAGE | /study/docu_auct.php | GET HAS | OBSERVED_CURRENTHTTP 200 | DOOIN-035DOOIN-038DOOIN-039 | CLOSED 서식 분류와 다운로드 진입. |
| SURF-044 | 추가 데이터·운영결정 필요 | STUDY_UTILITYPAGE | /study/auct_faq.php | GET HAS | OBSERVED_CURRENTHTTP 200 | DOOIN-036DOOIN-037 | CLOSED 절차·권리분석·배당·임대차 FAQ 목록. |
| SURF-045 | 추가 데이터·운영결정 필요 | STUDY_UTILITYPAGE | /study/auct_faq_view.php?id_num=:id&txtSrch=:query&pageNo=:page | GET AS | SOFT_EMPTY_CURRENTHTTP 200 | DOOIN-037 | PLATFORM_REMEDIATION 식별자 누락 시 200 빈 셸. 정식 상세는 slug와 404 계약 사용. |
| SURF-046 | 추가 데이터·운영결정 필요 | STUDY_UTILITYXHR | /study/res/Study.phpterms|faq|docu | POST S | DISCOVERED_SCRIPT | DOOIN-033DOOIN-035DOOIN-036DOOIN-065 | CLOSED mode=terms|faq|docu 읽기 transport. |
| SURF-047 | 추가 데이터·운영결정 필요 | STUDY_UTILITYDOWNLOAD | /res/download.php?mode=docu_form&ctNo=:category&file_name=:name | GET AS | ROBOTS_NOT_FETCHED | DOOIN-038 | ACCESS_RESTRICTED DOC/HWP 서식 다운로드. 권리·MIME·파일명·해시 검증 필요. |
| SURF-048 | 추가 데이터·운영결정 필요 | STUDY_UTILITYVIEWER | /api/pdf/web/pdf.php?file=:file | GET ASH | OBSERVED_CURRENTHTTP 200 | DOOIN-039 | DESTRUCTIVE_NOT_EXECUTED PDF 웹뷰어는 무파일 GET 200. 실제 파일 렌더·인쇄는 제이옥션 E2E 대상. |
| SURF-049 | 추가 데이터·운영결정 필요 | STUDY_UTILITYPAGE | /etc/crt_list.php | GET HA | OBSERVED_CURRENTHTTP 200 | DOOIN-040 | CLOSED 법원 목록·상세·지도 진입. |
| SURF-050 | 추가 데이터·운영결정 필요 | STUDY_UTILITYPAGE | /etc/dong_list.php | GET HAS | OBSERVED_CURRENTHTTP 200 | DOOIN-041 | CLOSED 지역 종속 주민센터 안내. |
| SURF-051 | 추가 데이터·운영결정 필요 | STUDY_UTILITYPAGE | /etc/relation_site.php | GET HA | OBSERVED_CURRENTHTTP 200 | DOOIN-042 | PLATFORM_REMEDIATION 94개 외부 URL·91개 호스트. HTTPS·allowlist·마지막 점검시각 필요. |
| SURF-052 | 추가 데이터·운영결정 필요 | STUDY_UTILITYXHR | /etc/res/bugaSrv.phpmode=3 | POST S | DISCOVERED_SCRIPT | DOOIN-041DOOIN-065 | CLOSED mode=3, sicd, gucd 주민센터 종속 응답. |
| SURF-053 | 추가 데이터·운영결정 필요 | MEMBER_PAYMENTPAGE | /member/agree.php | GET HAS | OBSERVED_CURRENTHTTP 200 | DOOIN-043DOOIN-061 | DESTRUCTIVE_NOT_EXECUTED 가입 약관과 인증 진입. 실제 가입은 외부 사이트에서 실행하지 않음. |
| SURF-054 | 현 데이터로 우선 보강 | MEMBER_PAYMENTPAGE | /member/mypage.php | GET HA | OBSERVED_AUTH_BASELINEHTTP 200 | DOOIN-044 | CLOSED 비로그인 200 공용 셸과 인증 회원 허브 상태를 분리. |
| SURF-055 | 현재 구현 | MEMBER_PAYMENTPAGE | /member/intrList.php | GET A | OBSERVED_AUTH_BASELINE | DOOIN-045 | DESTRUCTIVE_NOT_EXECUTED 관심물건 화면 확인. 추가·삭제·알림 CRUD는 자체 E2E 필요. |
| SURF-056 | 현 데이터로 우선 보강 | MEMBER_PAYMENTPAGE | /member/favorSearchList.php | GET A | OBSERVED_AUTH_BASELINE | DOOIN-046 | DESTRUCTIVE_NOT_EXECUTED 저장검색 목록·재검색 화면. |
| SURF-057 | 현 데이터로 우선 보강 | MEMBER_PAYMENTXHR | /member/res/favorSearch.phpfv_list|fv_list_by_idx|fv_update_count | POST S | ROBOTS_NOT_FETCHED | DOOIN-046DOOIN-065 | DESTRUCTIVE_NOT_EXECUTED fv_list·fv_list_by_idx·fv_update_count 저장검색 transport. |
| SURF-058 | 현 데이터로 우선 보강 | MEMBER_PAYMENTPAGE | /member/rsntList.php | GET A | OBSERVED_AUTH_BASELINE | DOOIN-047 | DESTRUCTIVE_NOT_EXECUTED 최근 열람 목록. 보존·삭제 E2E 필요. |
| SURF-059 | 현 데이터로 우선 보강 | MEMBER_PAYMENTPAGE | /member/calendar.php | GET A | OBSERVED_AUTH_BASELINE | DOOIN-048 | DESTRUCTIVE_NOT_EXECUTED 나의 입찰달력. 등록·변경·삭제 E2E 필요. |
| SURF-060 | 추가 데이터·운영결정 필요 | MEMBER_PAYMENTPAGE | /member/pay_guide.php | GET HA | OBSERVED_CURRENTHTTP 200 | DOOIN-049DOOIN-050 | CLOSED 이용권 상품 안내와 결제 진입. |
| SURF-061 | 추가 데이터·운영결정 필요 | MEMBER_PAYMENTPAGE | /member/pay.php | GET A | OBSERVED_AUTH_BASELINE | DOOIN-050 | DESTRUCTIVE_NOT_EXECUTED 결제 시작 화면. PG 승인·웹훅은 외부 조사에서 실행하지 않음. |
| SURF-062 | 추가 데이터·운영결정 필요 | MEMBER_PAYMENTPAGE | /member/pay_history.php | GET A | OBSERVED_AUTH_BASELINE | DOOIN-051 | DESTRUCTIVE_NOT_EXECUTED 결제내역·취소·환불 상태 화면. 개인값 미보존. |
| SURF-063 | 추가 데이터·운영결정 필요 | MEMBER_PAYMENTPAGE | /member/cpnList.php | GET A | OBSERVED_AUTH_BASELINE | DOOIN-052 | DESTRUCTIVE_NOT_EXECUTED 쿠폰 사용 가능·사용·만료 상태 화면. |
| SURF-064 | 현재 구현 | MEMBER_PAYMENTPAGE | /member/modifyProfile.php | GET A | OBSERVED_AUTH_BASELINE | DOOIN-053 | DESTRUCTIVE_NOT_EXECUTED 프로필·연락처·비밀번호·수신동의 변경 폼. 실제 개인값 미변경. |
| SURF-065 | 추가 데이터·운영결정 필요 | MEMBER_PAYMENTACTION | /member/leave.php | GET S | ROBOTS_NOT_FETCHED | DOOIN-062 | DESTRUCTIVE_NOT_EXECUTED 회원탈퇴·세션회수·보존정책 계약. 외부 사이트에서 실행하지 않음. |
| SURF-066 | 추가 데이터·운영결정 필요 | MEMBER_PAYMENTACTION | /member/res/mobileChk.php | POST S | ROBOTS_NOT_FETCHED | DOOIN-061 | DESTRUCTIVE_NOT_EXECUTED 휴대전화 인증코드 발급·확인 transport. |
| SURF-067 | 현재 구현 | MEMBER_PAYMENTACTION | /res/auth/logIn.php | POST S | ROBOTS_NOT_FETCHED | DOOIN-058 | DESTRUCTIVE_NOT_EXECUTED 로그인 폼 transport. 비밀번호·세션 값은 조사 산출물에 저장하지 않음. |
| SURF-068 | 현재 구현 | MEMBER_PAYMENTACTION | /res/auth/logOut.php | POST S | ROBOTS_NOT_FETCHED | DOOIN-059 | DESTRUCTIVE_NOT_EXECUTED 로그아웃·브라우저 상태 초기화 transport. |
| SURF-069 | 추가 데이터·운영결정 필요 | MEMBER_PAYMENTACTION | /res/auth/findPwd.php | POST S | ROBOTS_NOT_FETCHED | DOOIN-060 | DESTRUCTIVE_NOT_EXECUTED 아이디·비밀번호 복구 모달 transport. 계정 존재 여부 비노출 필요. |
| SURF-070 | 현 데이터로 우선 보강 | HELPPAGE | /help/siteMap.php | GET HA | OBSERVED_CURRENTHTTP 200 | DOOIN-054 | CLOSED 전체 서비스 인덱스. |
| SURF-071 | 추가 데이터·운영결정 필요 | HELPPOLICY | /help/service_guide.php | GET HA | OBSERVED_CURRENTHTTP 200 | DOOIN-055 | CLOSED 이용약관·서비스 안내. |
| SURF-072 | 추가 데이터·운영결정 필요 | HELPPOLICY | /help/privacy_guide.php | GET HA | OBSERVED_CURRENTHTTP 200 | DOOIN-056 | CLOSED 개인정보 처리방침. |
| SURF-073 | 현 데이터로 우선 보강 | HELPPOLICY | /help/email_scraprefuse.php | GET HA | OBSERVED_CURRENTHTTP 200 | DOOIN-057 | CLOSED 이메일 무단수집 거부. |
| SURF-074 | 추가 데이터·운영결정 필요 | PLATFORMXHR | /res/common.phpadrsStep|dptDataArr | POST S | ROBOTS_NOT_FETCHED | DOOIN-006DOOIN-007DOOIN-065 | ACCESS_RESTRICTED reqCase=adrsStep 및 dptDataArr 공통 종속선택 응답. |
| SURF-075 | 현 데이터로 우선 보강 | PLATFORMXHR | /res/header/getConfig.php | GET S | ROBOTS_NOT_FETCHED | DOOIN-064DOOIN-065 | ACCESS_RESTRICTED 헤더·로그인 상태 설정 응답. 제이옥션은 서버 세션 DTO로 대체. |
사용자 흐름 단위 구현 계약
| 흐름 | 전수조사 범위 | 제이옥션 API | 예정 검증·인수조건 |
|---|---|---|---|
| 홈 데이터 | day_schedule·week_schedule·newItem·stats·samples·comments·notice·news | GET /api/v1/home/modules?include=… | 모듈별 실패 격리·마지막 갱신·빈 상태 |
| 검색 프리셋 | custom·newToday·seoulApt4·seoulApt10·house2·half·over9·factory·special·over1year | GET /api/v1/curations/:slug | 허용 slug·동일 조건 총건수 대조 |
| 종합검색 | 법원·주소·역·차량·관계인·특수조건·가격·면적·기일 조합 | GET /api/v1/search/options|facets|lots | 고정 조합 50개 total·facet·정렬·cursor 대조 |
| 목록 작업 | 저장·불러오기·초기화·선택보기·인쇄·엑셀·20/30/50/100·표/카드 | saved-searches·compare-sets·print-jobs·export-jobs | 회원격리·행 일치·파일 만료·모바일 상태복원 |
| 상세 핵심 | 사건·물건·가격·기일·현황·권리·임차·사진문서·지도 | GET /api/v1/lots/:publicId/detail | 법원 100건 표본과 출처·조회시각·상태 전이 대조 |
| 상세 탭 | 기본·기일·현황·감정·송달·등기·임차·배당·실거래·인근 진행/매각/공매 등 16개 | detail-projection-v4 하위 리소스 | ready·pending·restricted·failed 상태를 탭별 검증 |
| 상세 행동 | 관심·메모·댓글·업로드·인쇄·공유 | favorites·memos·comments·uploads·print·share | 권한·감사·악성파일·만료·공유 공개범위 |
| 지도 | bbox·cluster·현재영역·목록동기화·상세팝업·길찾기·역거리 | GET /api/v1/lots/map 및 /nearby | 좌표 골든셋·거리오차·320~1440px 조작 |
| 회원 | 가입·로그인·복구·세션·관심·저장검색·최근·달력·프로필·탈퇴 | /api/v1/auth/* 및 /api/v1/me/* | 2회원 격리·CSRF·재인증·세션회수·보존정책 |
| 결제 | 상품·주문·승인·웹훅·이용권·쿠폰·취소·환불 | /api/v1/products|orders|payments|entitlements | PG sandbox 성공·실패·중복웹훅·환불 원장 대조 |
| 콘텐츠 | 공지·FAQ·칼럼·대출·정책·뉴스·용어·절차·서식 | /api/v1/content/* 및 /resources/* | CMS 역할·개정·출처·HTML 정화·철회 |
| 파일 | 사진·PDF·HWP/DOC·인쇄·엑셀·직접 URL | /api/v1/lots/:id/assets 및 /files/:id | MIME·SHA-256·권리등급·경로순회·깨짐·만료 |
제품 적용 우선순위
| 우선순위 | 범위 | 완료해야 할 제품 기능 |
|---|---|---|
| P0 | 검색·결과·상세·회원·상담 | live options/facets, 조건칩·예상건수, 표/카드·선택비교·관심·저장·인쇄·엑셀, full member detail, 저장검색·개인달력, 상담 자동연결 |
| P1 | 탐색 확장·자료 | 신건·예정·역세권·차량·통계, 사진·문서 권리 뷰어, 지도 공개게이트, 온비드 물건, 공지·FAQ·칼럼·용어·서식 CMS |
| P2 | 상용 운영 | 상품·주문·이용권·쿠폰·환불·영수증, 전문가 작성 workflow, 주민센터·관련사이트 운영 점검 |
| 금지 | 복제 제외 | 이해관계인 이름 직접검색, 두인 legacy PHP transport·식별자·문구·운영 데이터 |
복제하지 않을 원본 결함
http 두 호스트는 HTTPS로 이동하지만 https apex와 www가 각각 200
새 구현호스트 하나를 정하고 반대편은 경로·쿼리를 보존해 301/와 /index.php가 같은 본문을 200으로 제공하고 canonical이 없음
새 구현/index.php 301 및 모든 공개 페이지 canonicalboWrite 404, 식별자 없는 boView·FAQ 상세는 200 빈 셸
새 구현없는 경로·식별자는 404, 잘못된 입력은 400, 권한은 401/403익명 HTML에도 세션 쿠키를 발급하며 Secure·HttpOnly·SameSite가 관찰되지 않음
새 구현필요 시에만 세션 발급하고 Secure·HttpOnly·SameSite=Lax/StrictHSTS·CSP·X-Frame-Options·nosniff·Referrer/Permissions-Policy 미관찰
새 구현edge와 앱 공통 보안헤더 계약 및 회귀검사production JS 22개와 대응 source map 22개가 모두 공개
새 구현production source map 비배포 또는 인증된 오류수집 전용회사소개·오시는길이 모두 홈으로 연결
새 구현회사·연락·위치 정보를 독립 콘텐츠 라우트로 제공관련사이트 94개 URL·91개 호스트 중 구형 http가 다수
새 구현HTTPS allowlist·최근 점검시각·깨진 링크 자동검사미분류 없이 남긴 위험
robots가 차단한 /ca·/pa·/member·/res 내부 표면
처리승인 세션 기준선과 스크립트 계약을 사용하고 운영 자동수집은 금지결제·환불·탈퇴·프로필 변경·게시글 작성·파일 업로드
처리외부 사이트에서 실행하지 않고 제이옥션 sandbox/E2E 종료조건으로 이동/board/boWrite.php 현재 404
처리원본 오류를 복제하지 않고 독립 CMS·정상 오류 계약으로 구현canonical·sitemap·기술파일·보안헤더·쿠키·source map
처리P7 출시 게이트에서 자동 검증43 PREREQUISITES · RE-AUDITED 2026-07-17
“데이터·권한 선행 43개”를 실제 실행 가능성으로 다시 분해
| 실행 원천 | 수 | 계약 ID | 처리 방식 |
|---|---|---|---|
| 현 자산 재사용 후보 | 11 | DOOIN-006·007·009·017·021·022·024(metadata)·040·042·055·056 | 기존 AuctionHub·D1·정적 자산을 재사용할 수 있으나 제품 연결 완료를 의미하지 않음 |
| 자체 콘텐츠·정책 승인 | 17 | DOOIN-015·027~039·043·049·063 | CMS·버전 원장은 구현 가능, 내용·가격·저자·법률 승인 필요 |
| 신규 공식자료·외부계약 | 15 | DOOIN-008·012·013·016·019·020·025·026·041·050·051·052·060·061·062 | 새 공식 master·자체 이벤트·PG/SMS/보존정책 필요 |
중복 0 · 누락 0
지도 owner shadow · 공개 지도는 404
실서비스 연결·승인 완료를 뜻하지 않음
구현 대기 26 · 외부 승인 8 · 보류 1
결제 공개·checkout은 OFF이며, 두인 회원의 결제·쿠폰·환불 이력 반입은 0건입니다.
43개 항목별 데이터·권한·실행 판정
“스키마·계약 기반 준비”는 실결제·법률 승인·서비스 연결·공개 활성화를 뜻하지 않음| ID | 기능 | 가능성 판정 | 현재 증거 | Codex 처리·구현 | 남은 게이트 |
|---|---|---|---|---|---|
| DOOIN-006 | 구현 대기열 확정법원별검색 | 공식·공공자료 연결로 구현 가능 | /courts와 정적 법원 목록은 존재하지만 담당계·폐지/통합 이력이 부족 | 법원·지원·담당계 정본과 계층 API 연결 | 공식 법원 코드 기준일 대사 |
| DOOIN-007 | 구현 대기열 확정소재지검색 | 공식·공공자료 연결로 구현 가능 | AuctionHub address_sido/address_sigungu와 현 검색 입력은 동작 | 읍면동 계층·개편 별칭 master와 facet 연결 | 행정구역 개편 정본 추가 |
| DOOIN-008 | 구현 대기열 확정역세권검색 | 공식·공공자료 연결로 구현 가능 | 지도 좌표 기반은 있으나 노선·역 master가 없음 | 공식 철도역·노선·환승 좌표를 PUBLIC projection에 연결 | 공식 역 master 수집·개정주기 |
| DOOIN-009 | 구현 대기열 확정차량·장비검색 | 공식·공공자료 연결로 구현 가능 | vehicle_general 실조회와 maker/year/fuel/mileage 상세 계약 존재 | 차량 전용 projection·제조사/모델 facet 연결 | 차종·모델 정규화 master |
| DOOIN-012 | 구현 대기열 확정신건검색 | 공식·공공자료 연결로 구현 가능 | source first_seen_at은 있으나 법원 최초공고일과 분리되지 않음 | 최초공고일·최초수집일 이중 원장과 검색조건 추가 | 법원 공식 공고일 필드 확보 |
| DOOIN-013 | 구현 대기열 확정날짜별 신건 | 공식·공공자료 연결로 구현 가능 | 일별 최초공고 snapshot API 없음 | 고정 revision 일별 신건 snapshot과 대사 API 구축 | DOOIN-012 정본 선행 |
| DOOIN-015 | 외부 승인 대기전문가 코멘트 | 사업자·외부계약 승인 필요 | 전문가 계정·저자 승인 workflow 없음 | 작성·개정·철회·감사 가능한 CMS 계약 준비 | 전문가 지정·원고·게시 승인 |
| DOOIN-016 | 구현 대기열 확정조회수 랭킹 | 현재 기반으로 구현 가능 | 자체 조회 event·봇 제외 집계가 아직 없음 | 일·주·월 조회 이벤트와 bounded 랭킹 집계 구축 | 운영 트래픽 관측 후 봇 기준 조정 |
| DOOIN-017 | 구현 대기열 확정매각통계 | 공식·공공자료 연결로 구현 가능 | sale_price는 있으나 고정 revision 통계 aggregate가 없음 | 법원·기간·용도별 낙찰가율·매각률 집계 | 결과 누락·정정 snapshot 대사 |
| DOOIN-019 | 구현 대기열 확정예정물건 | 공식·공공자료 연결로 구현 가능 | 기일 미정·예정 stage 공개 query가 없음 | 예정→진행 상태이력과 stage 검색 추가 | 공식 예정상태 식별 규칙 |
| DOOIN-020 | 구현 대기열 확정공매 물건검색 | 공식·공공자료 연결로 구현 가능 | 온비드 용도코드 292개와 adapter는 있으나 lotSearch는 NOT_CONNECTED | 온비드 물건목록 증분 동기화와 식별자 대사 | 공공데이터포털 물건 API 승인·호출 대사 |
| DOOIN-021 | 기존 구현지도검색 | 현재 기반으로 구현 가능 | M5_READY 코드와 owner-only /admin/map-shadow, PUBLIC v2 BFF가 구현됨 | 동일좌표·마커·상세전환 회귀 유지 | ground-truth 승인·migration 144·168시간 Shadow 전 공개 금지 |
| DOOIN-022 | 구현 대기열 확정법원경매 전체 상세 | 공식·공공자료 연결로 구현 가능 | AuctionHub rights/tenants/documents/images/market 계약과 allowlist는 있으나 회원 BFF는 summary만 제공 | public_id/runtime 수렴 후 회원 full-detail projection 연결 | 운영 public_id 복원·권리/개인정보 공개등급 |
| DOOIN-024 | 보류법원 사진·문서 | 권리·개인정보 확인 전 보류 | metadata·권리 guard는 있으나 원본 content route는 410이고 파일별 권리가 혼재 | 공식 원문 링크·MIME·해시·출처 metadata부터 제공 | 제3자 저작권·개인정보 파일별 승인 전 저장·재배포 금지 |
| DOOIN-025 | 구현 대기열 확정공매 상세 | 공식·공공자료 연결로 구현 가능 | 공매 상세 endpoint가 아직 없음 | 온비드 public_id와 상세 projection 구축 | 온비드 상세 API 연결 |
| DOOIN-026 | 구현 대기열 확정공매 사진·첨부 | 공식·공공자료 연결로 구현 가능 | 첨부 endpoint·만료 URL 대체가 없음 | 첨부 metadata·권리·만료 URL BFF 구축 | 공식 첨부 이용조건·MIME 대사 |
| DOOIN-027 | 구현 대기열 확정공지 | 현재 기반으로 구현 가능 | owner-only 관리자 인증은 있으나 공지 CMS가 없음 | plain-text 기반 공지 CRUD·개정이력·예약게시 구축 | 초기 공지문 승인 |
| DOOIN-028 | 외부 승인 대기FAQ | 사업자·외부계약 승인 필요 | 서비스 답변 정본이 없음 | 공지 CMS와 같은 안전한 콘텐츠 원장 사용 | 회사 승인 FAQ 문답 |
| DOOIN-029 | 외부 승인 대기전문가 칼럼 | 사업자·외부계약 승인 필요 | 저자·원고·이미지 권리 자료가 없음 | 저자·출처·개정이력 CMS 계약 준비 | 저자 계약·원고·이미지 이용권 |
| DOOIN-030 | 외부 승인 대기대출규정 | 사업자·외부계약 승인 필요 | 금융정보 운영범위와 검토 책임자가 미정 | 공식 금융기관 원출처·기준일 모델 준비 | 전문가·법률 검토와 운영범위 승인 |
| DOOIN-031 | 구현 대기열 확정부동산정책 | 공식·공공자료 연결로 구현 가능 | 정책 콘텐츠 route가 없음 | 정부 보도자료만 canonical·발표일·적용일과 수집 | 공식 출처 allowlist |
| DOOIN-032 | 구현 대기열 확정부동산소식 | 공식·공공자료 연결로 구현 가능 | 공식소식 수집·CMS가 없음 | 공공기관 보도자료 요약·원문 링크 feed 구축 | 기관별 수집주기·정정 대사 |
| DOOIN-033 | 구현 대기열 확정경매용어 | 공식·공공자료 연결로 구현 가능 | 용어 resource API가 없음 | 법원·법령 기반 용어·동의어·초성 색인 구축 | 용어 원출처·개정일 정본 |
| DOOIN-034 | 구현 대기열 확정경매절차 | 공식·공공자료 연결로 구현 가능 | 컨설팅 절차만 있고 경매 절차 정본이 없음 | 법원 공식 절차를 자사 설명으로 구조화 | 법령·법원 출처 기준일 |
| DOOIN-035 | 구현 대기열 확정관련서식 | 공식·공공자료 연결로 구현 가능 | resource/file 원장이 없음 | 공식 공개서식 metadata·MIME·개정일·출처 원장 구축 | 파일별 자유이용·개인정보 등급 |
| DOOIN-036 | 구현 대기열 확정경매지식 | 공식·공공자료 연결로 구현 가능 | 지식 콘텐츠 route가 없음 | 공식 원문 기반 자체 요약 CMS 구축 | 출처·저자·개정 이력 |
| DOOIN-037 | 구현 대기열 확정경매지식 상세 | 공식·공공자료 연결로 구현 가능 | canonical slug 상세 route가 없음 | DOOIN-036의 SSR 상세·이전판·canonical 구현 | DOOIN-036 콘텐츠 선행 |
| DOOIN-038 | 구현 대기열 확정자료 다운로드 | 공식·공공자료 연결로 구현 가능 | 승인 파일 저장소·스트리밍 route가 없음 | 공개등급·MIME·SHA-256·Content-Disposition BFF 구축 | 승인 파일과 R2/외부 저장소 결정 |
| DOOIN-039 | 구현 대기열 확정PDF 열람·인쇄 | 공식·공공자료 연결로 구현 가능 | 승인 PDF viewer가 없음 | 동일출처 안전 header viewer·인쇄 CSS 구축 | DOOIN-038 승인 PDF 선행 |
| DOOIN-040 | 구현 대기열 확정법원안내 | 공식·공공자료 연결로 구현 가능 | /courts 기본 페이지와 사건 court/department 필드는 존재 | 위치·연락처·담당계·폐지 이력을 정본 API로 보강 | 운영 /api/v1/courts 410 수렴 |
| DOOIN-041 | 구현 대기열 확정주민센터안내 | 공식·공공자료 연결로 구현 가능 | 행정기관 주소·연락처 데이터가 없음 | 공식 행정기관 master와 기준일 검색 구축 | 공식 기관 데이터 연결 |
| DOOIN-042 | 스키마·계약 기반 준비유용한 사이트 | 현재 기반으로 구현 가능 | 공식기관 HTTPS allowlist가 제품에 반영됨 | /resources/links와 footer·sitemap 연결 완료 | 주기적 링크 상태점검 |
| DOOIN-043 | 스키마·계약 기반 준비버전형 약관동의 | 사업자·외부계약 승인 필요 | terms/privacy/marketing 표시 정본·UTF-8 hash·독립 marketing 본문과 최신상태/철회시각을 추가했지만 문서는 DRAFT | DB APPROVED·published/effective 증거와 코드 정본이 모두 일치해야 가입·SMS를 여는 이중 fail-closed 구현 | 검토본을 APPROVED로 바꿀 법률·사업 승인 |
| DOOIN-049 | 스키마·계약 기반 준비상품·결제안내 | 사업자·외부계약 승인 필요 | 공개 checkout·주문 route·PG adapter는 없지만 ACTIVE 상품·APPROVED 가격·금액·통화·VAT 대사를 TS와 D1 trigger로 강제 | 승인 가격표와 DRAFT 주문 원장 기반 준비 | 상품명·기간·가격·VAT·자동갱신·환불정책 |
| DOOIN-050 | 스키마·계약 기반 준비이용권 구매 | 사업자·외부계약 승인 필요 | billing_orders/payment_events에 DRAFT insert·허용 상태전이·provider event 멱등과 VERIFIED 금액 대사를 D1 trigger로 추가 | provider-neutral fail-closed 기반만 준비; checkout·webhook 서비스는 미연결 | PG 계약·MID·API/webhook secret·정산계좌 |
| DOOIN-051 | 스키마·계약 기반 준비결제관리·이력 | 사업자·외부계약 승인 필요 | 검증 이벤트와 provider reference 없이는 PAID가 될 수 없고 PAID+VERIFIED 없이는 ACTIVE 이용권을 만들 수 없게 DB에서 차단 | 주문·웹훅·환불·영수증 서비스와 실제 결제사 조회는 구현 대기 | 실거래·환불권한·영수증/정산 API |
| DOOIN-052 | 스키마·계약 기반 준비쿠폰 | 사업자·외부계약 승인 필요 | 쿠폰·사용·취소복원·만료 제약 스키마 추가 | 코드 원문 대신 hash·회원/주문 격리 기반 준비 | 할인액·대상·발급량·중복·복원 정책 |
| DOOIN-055 | 외부 승인 대기이용약관 | 사업자·외부계약 승인 필요 | 검토본/noindex이며 DRAFT_REVIEW_REQUIRED로 고정 | 버전 metadata API와 가입 동의 원장 연결 | 요금·환불·책임·시행일 법률 승인 |
| DOOIN-056 | 외부 승인 대기개인정보처리방침 | 사업자·외부계약 승인 필요 | 검토본/noindex이며 실제 위탁사·보유기간이 미정 | 버전 metadata API와 가입 동의 원장 연결 | 처리위탁·국외이전·보유기간·시행일 승인 |
| DOOIN-060 | 외부 승인 대기계정복구 | 사업자·외부계약 승인 필요 | DirectSend 번호소유 OTP adapter 코드는 있으나 계정복구 route·fixed egress·live 발송 증거는 없음 | 존재여부 동일응답·일회토큰·TTL 원장과 목적별 live gate 준비 | 고정 egress/IP 등록·발신번호·수신정책·전송결과 대사 |
| DOOIN-061 | 외부 승인 대기휴대전화 본인확인 | 사업자·외부계약 승인 필요 | 번호소유 SMS OTP는 기반 코드일 뿐 NICE/PASS 실명 본인확인·CI/DI가 아님 | nonce·callback·최소 hash 원장 설계; raw CI/DI 저장 금지 | 본인확인 계약·channel/store/API secret |
| DOOIN-062 | 스키마·계약 기반 준비회원탈퇴 | 사업자·외부계약 승인 필요 | 재인증·세션회수·비식별 종료원장 route를 fail-closed로 추가 | 정책 환경변수 없으면 503, 결제이력 계정은 409로 보존 검토 | 법정보존·재가입·유예기간 정책 승인 |
| DOOIN-063 | 구현 대기열 확정콘텐츠 상세·작성 | 현재 기반으로 구현 가능 | owner-only 관리자 인증과 인트라넷 기반은 있으나 통합 CMS가 없음 | plain-text/structured body CRUD·개정이력·예약게시·철회 원장 구축 | 초기 작성자 역할·게시 콘텐츠 승인 |
결제·본인확인 준비 상태
KRW 정수·서버 가격검증·상태전이·웹훅 멱등·API 재조회 후 이용권 부여 계약과 DB 제약
남은 게이트주문·웹훅 서비스 미연결 · 공개 checkout OFF공개 테스트환경은 실제 출금 없이 연동 가능
남은 게이트라이브는 사업자 심사·MID·라이브 키 필요복수 PG adapter와 서명 웹훅·멱등키 계약 적용 가능
남은 게이트운영 store/channel/API/webhook secret과 실제 adapter 구현 필요최소 request ID·인증시각·hash만 저장하는 구조 권고
남은 게이트계약·수수료·채널키 없이는 VERIFIED 생성 금지OTP·상담 SMS adapter, CAS·DB rate trigger·목적별 enable gate
남은 게이트fixed egress/IP·발신번호·보유기간·delivery callback 대사 전 live OFF사용자·사업자만 확정할 수 있는 항목
이용권 이름·기간·가격·VAT·자동갱신·무료체험 확정
환불·부분환불·청약철회·쿠폰 복원 정책 승인
PG 사업자 신청·KYC·정산계좌·수수료·정산주기 동의
운영 MID·API key·webhook secret 발급
최종 이용약관·개인정보처리방침·시행일 법률 승인
실존 데이터와 런타임 연결 증거
| 증거면 | 기준 | 실측 | 제약 |
|---|---|---|---|
| 공공 보강 원장 | 2026-07-17 CT104 | address 115,937 · building 719,870 · K-apt 22,204 · RTMS 7,448,634 · VWorld NED 5,581,981 | latest summary refresh 2026-07-01 · 갱신 schedule 재검증 필요 |
| 권리분석 | 2026-07-17 CT104 | 전체 145,939 · 분석 113,141(77.53%) · 등기 32,398 · 임차 51,532 · 문서 112,711 | ready 8,355 · needs_review 23,987 · insufficient 80,799 · 물건별 가변 표시 |
| 상세 v3 표본 | LOT-0A83A… | 52,750 bytes · schema 2026-07-05.v3.11 · 사진 26 · 실거래 12 · evidence 1 | 임차/등기 0 표본이므로 빈 섹션 숨김 필수 |
| 현 검색 master | AuctionHub 내부 | courts 68 · regions 71 · sigungu 300 · taxonomy 11 · status 14 | Sites adapter key shape·cache lock 불일치 수정 선행 |
| 우선순위 | 현재 결함 | 완료 기준 |
|---|---|---|
| P0 PUBLIC_ID | canonical source는 public_id 반환 코드가 있으나 live list는 id/public_id 누락 | 고정 100건 list→detail→v3→media metadata public_id 100%·revision/hash 일치 |
| P0 SEARCH | live options/facets 500 교차, courts/detail/media 410 | actual upstream fixture shape·SWR/lock·50 동시호출 5xx 0 |
| P0 DETAIL | 회원 route는 member_summary만 반환 | public_id 수렴 뒤 v3 allowlist full detail, PNU·원좌표·storage key 0 |
| P1 FILE | 사진·문서 metadata는 있으나 content route 410·R2 미연결 | metadata 우선, 권리등급·MIME·magic/hash 통과 파일만 private gateway |
| 복제·저장 금지 | 처리 원칙 |
|---|---|
| 두인경매 회원의 결제·쿠폰·환불·이용권 이력 | 제이옥션 자체 원장에는 최소 식별자·상태·금액·검증 hash만 저장 |
| 카드번호·CVC·계좌번호·웹훅 원문 payload | 제이옥션 자체 원장에는 최소 식별자·상태·금액·검증 hash만 저장 |
| 목적이 확정되지 않은 raw CI·DI·주민등록번호 | 제이옥션 자체 원장에는 최소 식별자·상태·금액·검증 hash만 저장 |
확인 경로: 공식 사이트 모음 · 현재 법적 문서 버전 API · 공개 구매/결제 버튼은 계속 비활성
BEST-OF-BOTH PRODUCT CONTRACT
GF의 업무 밀도에 두인의 탐색·판단 흐름을 접목
검색·목록 기능
진입·식별
- 연도+사건번호 빠른검색
- 법원·사건·물건번호 정규화
- 조건을 URL로 보존하고 뒤로가기 복원
지역·법원
- 시도→시군구→읍면동 3단계
- 법원→지원→담당계 종속선택
- 건물명·지번·도로명
- 행정구역·법원 코드 별칭
물건·절차
- 주거·상업·산업·토지·차량·기타 복수선택
- 진행·미진행·종국 상태
- 임의·강제경매
- 매각구분·유찰회수
가격·면적·기일
- 감정가·최저가 범위
- 토지·건물 면적과 ㎡/평
- 매각기일 기간
- 신건·예정·변경·연기 구분
용도·특수조건
- 용도지역·지구·구역
- 권리·임차인·물건현황·형식적경매
- 포함 하나·모두 포함·제외 연산
- 선택조건 요약·초기화
전문검색
- 법원별
- 소재지
- 역세권
- 차량·장비
- 기일·신건
- 이해관계인
- 지도 bbox
결과도구
- 안정 정렬과 20/30/50/100건
- 저장검색·불러오기
- 관심·비교·인쇄·엑셀
- 총건수와 facet 일치
공매
- 물건번호·입찰일·처분방식
- 자산·기관·진행상태
- 주소·가격·종류
- 온비드 원문 식별자·링크
상세·증거 기능
사건·물건
- 법원·사건·물건 안정 식별
- 소재지·용도·현황
- 감정가·최저가·최저가율
- 현재 상태와 마지막 확인시각
기일·결과
- 매각기일 이력
- 유찰·변경·연기·취하
- 낙찰·허가·대금·배당 단계
- 담당계와 장소
자산·감정
- 토지·건물·제시외·차량 제원
- 면적·지분·감정평가
- 입지·이용상태
- 데이터 누락 안전표시
권리·임차
- 등기·말소기준
- 임차인·점유·대항력
- 특수권리·주의사항
- 개인정보 공개등급과 마스킹
미디어·문서
- 사진 갤러리
- 감정·현황·매각 문서
- MIME·해시·출처·취득시각
- 제한 문서 403과 깨진 파일 대체
지도·주변
- 좌표·필지
- 지도·로드뷰
- 교통·생활시설
- 인근 경매물건
회원행동
- 관심등록
- 비교
- 상담
- 인쇄·공유
- 최근열람
- 기일변경 알림
공매상세
- 기관·처분방식·회차
- 입찰기간·마감상태
- 공식 원문 링크
- 사진·첨부 권리정책
| 영역 | GF에서 유지 | 두인에서 접목 | 새 통합 구현 | API·완료 계약 |
|---|---|---|---|---|
| 홈 | GF 브랜드·상담 전환과 운영 콘텐츠 | 사건·주소·종류 빠른검색, 일정·신건·통계·테마 | GF 시각정체성 위에 두인의 정보밀도와 빠른 진입을 재구성 | GET /api/v1/home + /search/options |
| 검색 | GF의 법원·지역 중심 검색 밀도 | 법원·소재지·역세권·차량·기일·특수조건 전문검색 | 제이옥션 단일 정규 검색계약과 URL 상태로 모든 전문검색을 투영 | GET /api/v1/lots + /search/facets |
| 상세 | 사건·물건·자산·기일·문서 원장 기반 | 정보 섹션·파일·지도·회원행동이 풍부함 | 안정 public_id와 공개 projection으로 섹션을 재배치 | GET /api/v1/lots/:id + 하위 리소스 |
| 회원·결제 | 회원·관심·최근열람·상담 API 보강 필요 | 관심·알림·달력·이용권·이력·혜택·프로필 | 보안 쿠키·CSRF·멱등 결제·회원별 격리로 재구현 | /api/v1/member/* + orders/webhook |
| 콘텐츠·도움말 | GF 운영 콘텐츠와 회사·상담 정보 | 6개 게시판, 용어·절차·서식·안내·법적 문서 | 통합 CMS와 버전형 법적 문서, 출처·개정일 의무화 | /api/v1/content/* + /resources/* + /legal/* |
| 데이터 운영 | GF는 동결하는 화면·업무 참고 snapshot | 두인은 승인 시점에 동결하는 기능·상태 참고 snapshot | 법원경매는 대법원 파싱만 영구 운영하고 온비드 공매는 별도 공식 adapter로 분리 | Court Raw→제이옥션 TARGET_STORE→공개 projection→API |
ONE CANONICAL PATH
출처 정본과 보강자료를 섞지 않는 연결 구조
대법원경매의 신건·진행·기일·결과 목록을 법원·날짜 단위 checkpoint로 탐색하고 변경 후보만 queue에 적재
→사건·물건·기일·목록·현황·문서 응답을 제어된 속도와 재시도 정책으로 파싱하며 민간사이트 fallback은 호출하지 않음
→대법원·공식 공공 API의 원문 JSON/text, 취득 URL/공식 ID·시각·HTTP·SHA-256·parser/contract version을 변경 없이 저장
→court_code + case_year + case_serial + lot_no와 PNU·학교·단지 provider key로 오병합 없이 연결하고 실제 변경만 event로 발행
→AuctionHub PostgreSQL/PostGIS를 제이옥션 내부 canonical·projection·enrichment 실행면으로 사용하고 Court provenance가 확인된 사실만 공개 확정
→주소·필지·건축물·실거래·관공서·학교·K-apt를 raw→normalized→canonical link로 보강하되 Court 사실을 덮어쓰지 않음
→PUBLIC_INDEX·MEMBER_DETAIL·ADMIN projection을 분리하고 revision·snapshot·publication scope·freshness를 원자 승격
→AuctionHub 내부 origin은 service auth로만 호출하고 Sites는 9개 same-origin allowlist·opaque ID·cache/LKG 계약만 소비
→GF Auction·두인경매·경매마당에서 동결 참고한 검색·상세·지도 UX와 공공보강 12섹션을 제이옥션 projection 위에 독립 구현
→ingest→canonical→BFF→render→운영 URL을 묶고 실패 시 LKG·stale·rollback을 유지하되 민간 원천·외부 공개 runtime으로 우회하지 않음
원천별 정본·보강·공개 계약
| 원천 | 담당 데이터 | 역할 | 충돌 규칙 | 공개 규칙 |
|---|---|---|---|---|
| 대법원경매정보 | 신건·사건·물건번호·기일·상태·결과·공개문서 | 법원경매 영구 운영 원천 | 지속 파싱 허용 · 다른 경매사이트 fallback 금지 | 출처·조회일·원문 링크·parser version 표시 |
| 온비드 물건 API | 공매 물건·입찰·기일·결과 | 공식 Open API 정본 | 법원 경매와 별도 onbid: namespace | 서비스별 API 약관·갱신주기·원문 링크 준수 |
| 공공데이터 15157768 | 온비드 용도코드·등록주소 | 일간 reference master 후보 | 물건·좌표·PNU 정본으로 승격 금지 | 출처·조회시각·snapshot·stale 표시 |
| 공공데이터 15121030 | 2023-12-31 온비드 용도코드 388행 | REFERENCE_BOOTSTRAP | 일간 운영정본이 아닌 초기적재·회귀·코드 LKG | 기준일·파일/API 원문·hash 표시 |
| 두인경매 | 검색·목록·상세·회원 UX | REFERENCE_SNAPSHOT | 개발 중 수동 참고만 · 운영수집/자동로그인/신규 write 금지 | 기능 계약 승인 후 snapshot 동결 |
| 경매마당 | 지도 marker·동일 위치 sheet·상세 전환·filter/display·모바일 UX | REFERENCE_SNAPSHOT | 2026-07-16 동결 조사만 사용 · API·좌표·코드·이미지·운영수집·canonical write 금지 | MAP UX PARITY 계약·회귀 기준으로만 사용 |
| GF Auction | 화면·업무 흐름 | REFERENCE_SNAPSHOT | 수동 기능 참고만 · 운영수집/자동로그인/신규 write 금지 | 기능 계약 승인 후 snapshot 동결 |
| AuctionHub PostgreSQL/PostGIS | 사건·물건·기일·문서·canonical·검색/상세/지도 projection | JAUCTION INTERNAL DATA PLANE | Court·공식 API의 사실 권위를 대체하지 않고 브라우저 직접 접근 금지 | service auth 내부 origin→제이옥션 same-origin allowlist만 공개 |
| 공식 공공 보강 API | 주소·PNU·필지·건축물·공시가격·토지이용·실거래·관공서·학교·K-apt | OFFICIAL_ENRICHMENT | 사건 안정키와 provider key를 분리하고 raw→normalized→canonical 계보 필수 | 제공기관·조회시각·hash·contract version·freshness·unavailable reason 표시 |
| 기존 민간 evidence | 과거 관리비·배당·문서 후보 | FROZEN_REFERENCE_EVIDENCE | 권리·출처·취득시각이 증명된 동결자료만 허용 · 신규 write/required/fallback 금지 | 공식 원천과 구분하고 source sunset 원장에 기록 |
| 운영자 검토 | 충돌 해소·예외 승인·수정 | 수동 override | 원문 삭제 없이 버전·사유·승인자 기록 | 감사로그·롤백 필수 |
운영 연결 차단 항목
프로젝트 루트
C:\Users\Work\Documents\제이옥션 독립 Git 저장소
종료 조건제품 코드 import·런타임 URL·DB·브랜드 의존 0건 검사 · 정책/증거 문서의 명시적 언급은 제외웹 앱
비-API 화면 38개: 사용자·공개 19, 회원 5, 관리자 8, 내부 검수 6
종료 조건route별 공개·인증·noindex·실데이터·반응형·접근성 검증Court 생산자
세션 019eea6e…의 /nvme-scratch/work/jauction에서 20분 master·writer·projection·복구가 가동; 2026-07-17 20:30 master 74,752행·마지막 관찰 21.97분
종료 조건서비스를 재시작하지 않고 versioned outbox·watermark로 제이옥션 소비자 연결Court 소비자
8종 event 검증·service-auth feed·D1 inbox/cursor/DLQ·bounded drain·서명 cursor·고정 판본 검색/상세·alias 301·withdrawn 410 구현
종료 조건운영 producer 실증거·DLQ 0·전체 bootstrap·replay 실행기·projection outbox 전달·달력/facet/법원·9개 보강 E2ECanonical enrichment
관리비·관공서·비교사례·배당 4개와 건축물·토지·학군·학교·통합요약 5개 상위 route가 운영 검증됨
종료 조건제이옥션 service auth·9개 same-origin BFF·PUBLIC/MEMBER allowlist·실 lot 100건 E2EFreshness source debt
20:30 guard는 status=ok/findings0/warnings0이지만 GF required=true와 두인 watch active·일부 민간 staging이 유지
종료 조건정상 freshness와 source-policy 적합성을 분리하고 민간 required/new write/fallback/outbound 0 증명문서 availability
PDF 178건 canonical·본문/구조화, 인증 후속 1,076건 queue, 법원 매각명세서 8,862건 source pending
종료 조건다른 물건 문서 대체 0 · source_pending/source_unavailable·재가용 감시공공 API 운영
15개 timer·5분 contract guard·승인 image 자가복구가 외부 실행면에서 검증됨
종료 조건connector result·watermark·DB/API freshness·source/image SHA를 제이옥션 release ledger에 병합온비드 어댑터
15121030 fallback 388행과 15157768 일간 master 첫 정상판 420행·Sites secret rev 2 연결
종료 조건Proxmox 일간 runner·versioned store와 목록/입찰/결과 API 별도 E2ESites data bridge
AuctionHub 실행면은 존재하지만 현재 Sites의 9개 enrichment BFF와 상세 consumer는 미접목
종료 조건schema bridge·service identity·fixed egress·same-origin BFF·cache/LKG·실데이터 E2E공개 도메인
사용자 제공 소유정보 기준 jauc.co.kr 선택, 현재 검수판은 Sites 소유자 전용
종료 조건Codex가 DNS·TLS·canonical·sitemap을 구성하고 전체 공개 전환만 1회 승인민간 의존 제거
두인·GF connector·세션·스케줄·fallback을 설계에서 제외
종료 조건C2 source sunset 이후 새 기준선으로 30일 Court-only 운영과 outbound 0건; 과거 1일은 산입하지 않고 현재 0/30 대기반응형 조사와 수정 계약
홈 390px
검색·바로가기·일정·추천 정보가 짧은 폭에서 연속 배치된다.
수정 계약상단 행동과 핵심 검색의 우선순위가 흐려지고 긴 페이지가 된다. → 한 줄 글로벌 검색, 접이식 상세조건, 2열 바로가기, 단계적 홈 섹션으로 재구성종합검색 390px
다열 필터와 넓은 결과표를 그대로 축소하기 어렵다.
수정 계약가로 넘침, 작은 조작영역, 조건·결과 맥락 상실 위험이 크다. → 필터 드로어+선택조건 칩+카드 목록으로 전환하고 표는 768px 이상에서 제공물건상세 390px
다수 정보 섹션·사진·문서·지도·회원 행동이 한 화면 흐름에 모인다.
수정 계약고정 버튼과 탭이 본문을 가리거나 권리·기일 핵심정보가 멀어질 수 있다. → 가격·기일 요약과 하단 핵심행동을 고정하고 섹션 내비·문서 뷰를 분리KAKAO M0–M3 AUDITED · PRIVATE SHADOW DEPLOYED
카카오맵 구현·검수 결과를 반영했고
공개 지도검색은 계속 닫아 둡니다
카카오맵 M0–M3 구현·검수 반영 · 공개 지도검색은 계속 차단 · M2A PASS · M0/M1/M2B/M3 PARTIAL · owner-only Sites 비공개 Shadow 배포. 내부 구현 경로는 /admin/map-shadow이며 공개 제품 경로가 아닙니다.
Maps ON · SDK 200/401 · Local 200 · tile/marker/clusterer/attribution
/admin/map-shadow · Sites v23 · env revision 4
Sites v24 · commit 3fdcbb09 · 직전 owner-only 계획판 · v24 전체 127/127 PASS
SDK origin 2개 · 임시 localhost 제거 · REST key는 Sites에 미배포
M1 ground-truth 승인 + M2B live gate + M3 owner 운영 UI E2E + MAP UX 20개 회귀·15개 게이트·8개 상태 해소
/map · 404M5 전 공개 /map·별칭은 404, 전역 메뉴·sitemap·공개 제품면 SDK 요청 0건을 유지
M1 좌표 교차측정 · 측정 완료, 승인 아님
| 측정면 | 결과 | 해석 경계 |
|---|---|---|
| 표본 | 20개 균등 offset · 1,000건 | 고유 public_id 기준; 계층표본이나 ground-truth 승인은 아님 |
| Kakao 주소 해석 | 993 · 미해결 7 | 해석 성공률을 정확도 99.3%로 표현 금지 |
| 거리 구간 | ≤50m 882 · 50~200m 60 · 200~1,000m 10 · >1km 41 | 1km 초과·미해결 우선 수동 판정 |
| 백분위 | p50 0m · p90 62.76m · p95 214.15m · p99 5,935.51m | 동일 계열 원천 가능성을 배제하기 전 독립 정확도 증거가 아님 |
| 최대 거리 | 19,814.04m | 원주소·PNU·지적·대표점·provider lineage 확인 |
| 5자리 좌표 중복 | 고유 906 · 중복 그룹 55 · 소속 행 149 · 초과 행 94 · 최대 그룹 9 | 공동주택·필지 중심점 가능성 때문에 중복을 곧바로 오류로 판정하지 않음 |
카카오맵 API 전수조사 확정 증거
| 증거 ID | 검사면 | 판정 | 실측 증거 | 제품 경계 |
|---|---|---|---|---|
KMAP-AUDIT-01 | M0 · 앱·도메인 | PARTIAL | 앱 1514962/제이옥션 고정 · SDK origin jauc.co.kr와 Sites 2개 · 임시 localhost 제거 재확인 | 다른 계정 앱 중복 jauc 도메인·key owner/rotation/rollback 원장 미완료 |
KMAP-AUDIT-02 | M1 · 좌표 교차측정 | PARTIAL · MEASURED, NOT APPROVED | 전국 20개 균등 offset · 고유 public_id 1,000건 · Kakao 해석 993 · 미해결 7 | provider cross-check일 뿐 ground-truth 승인이나 정확도 99.3%가 아님 |
KMAP-AUDIT-03 | M2A · provider | PASS | Maps ON · 등록 origin SDK 200 · 미등록 origin 401 · Local REST 200 · tile/marker/clusterer/attribution | 공개 직전 origin·쿼터·정책 재확인 |
KMAP-AUDIT-04 | M2B · 코드 | PARTIAL · CODE/SCHEMA VERIFIED, LIVE GATES PENDING | same-origin BFF · strict query/bbox · 명시 public_id · 4자리 좌표 완화 · ETag · shadow no-store · server cache · fail-closed | service auth·fixed egress/IP·REST secret·durable edge rate limit 미완료 |
KMAP-AUDIT-05 | M2B · 스키마 | PARTIAL · CODE/SCHEMA VERIFIED, LIVE GATES PENDING | PostGIS 테이블 2 · 뷰 1 · 함수 3 · 트리거 2 · 제약 14 · 인덱스 4 적용 | projection_revision 0 · serving false · metadata 0 · public view 0 |
KMAP-AUDIT-06 | M3 · 배포 빌드 E2E | PARTIAL · PRIVATE DEPLOYED, OWNER LIVE E2E PENDING | tile 16 · attribution · marker · feature/list/detail 고유 public_id 각 100 · aria-pressed/focus 각 1 PASS | 운영 owner 로그인 UI E2E·jauc CT104 통합·7일 관측 대기 |
KMAP-AUDIT-07 | M3 · 운영 HTTP | PARTIAL | root 200 · public /map 404 · cross-site BFF 403 · identity-less admin API 401 · 등록 Sites SDK 200 · 미등록 401 | outer gate bypass는 제품 관리자 인증을 대체하지 않음 |
KMAP-AUDIT-08 | 보안 독립 재검토 | PASS · APP BOUNDARY | legacy id 승격·느슨한 same-site·앱 release fail-closed·revision query·무상한 메모리·shadow cache 결함 수정 | 94461b6·2b9b5daf 코드 재검토 PASS와 BFF의 live positive revision/serving acceptance PENDING을 분리 |
경매마당 지도검색 전수조사 · MAP UX PARITY owner shadow 구현
경매마당 MAP UX PARITY · 2026-07-16 · https://madangs.com/mapsearch. owner-only /admin/map-shadow에서만 구현·검수하며 M5 승인 전 공개 /map·별칭·sitemap·전역 메뉴는 계속 404/0건
진입: M2B schema·공통 codec·API/privacy guard·service auth를 고정하고 PUBLIC projection은 serving_enabled=false로 유지
공개 선행: projection_revision > 0 · PUBLIC metadata · serving_enabled=true · fixed egress · REST secret · durable rate limit은 M5 공개 승격 직전 별도 acceptance
| 증거 ID | 검사면 | 판정 | 실측·관찰 | 제이옥션 경계 |
|---|---|---|---|---|
MDG-MAP-01 | 정보형 marker | VERIFIED | D-day·할인율·용도·공개면적·가격·동일 위치 건수를 한 marker에 표시 | 표시 계약만 참고하고 데이터·코드·좌표는 복제하지 않음 |
MDG-MAP-02 | 동일 위치 목록 | VERIFIED | 동일 위치 2건·4건이 sheet에서 서로 다른 상세 링크와 public_id를 손실 없이 유지 | opaque location_group_id로 묶고 PNU·주소코드·내부 ID 비노출 |
MDG-MAP-03 | 상세 전환 | VERIFIED | 데스크톱·390px 웹 카드는 target=_blank·rel=noopener, 앱 분기는 same-tab | 제이옥션은 /auctions/{public_id}와 filter·viewport·selected 복원 계약 사용 |
MDG-MAP-04 | 상태 저장 | VERIFIED · REFERENCE DEFECT | filter·display는 URL, 일반 viewport는 sessionStorage; 임시 장소검색인 강남역 badge는 reload 후 소실되고 viewport만 복원 | 참고 사이트의 불완전 검색 상태 복원은 복제하지 않고 round-trip 회귀로 차단 |
MDG-MAP-05 | 공개 좌표 노출 | NEGATIVE EXAMPLE | 상세 DOM에 12~15자리 exact data-lat/data-lng 노출 확인 | 공개 hidden DOM·RSC·aria·cache·log에도 원좌표 금지 |
MDG-MAP-06 | 무쿠키 대량 API | NEGATIVE EXAMPLE · DO NOT COPY | 전국 bbox 1회에 25,515건 · 11,749,307 bytes · 약 15.7초 · 12~15자리 x/y·m_code·g_code·PNU 성격 키 반환 | 한국 bbox·최대면적·feature cap·durable rate limit·4xx validation의 근거 |
MDG-MAP-07 | 접근성 | REFERENCE DEFECT · DO NOT COPY | marker role=button이지만 tabindex=-1, 상태필터 pressed ARIA 부족 | 접근성 결함은 복제하지 않고 키보드·focus·Esc·aria-pressed·비색상 상태를 제이옥션 완료기준으로 보강 |
잔여 위험 2차 재검증 · MAP UX PARITY · NOT PASSED
| 번호 | 잔여 위험 | 현재 판정 |
|---|---|---|
01 | 전국 좌표·클러스터·줌별 성능 | PARTIAL |
02 | pagination·cluster 합계 | PARTIAL |
03 | 새 탭 상세 후 상태복원 | CODE PASS · LIVE E2E PENDING |
04 | 모바일 bottom sheet | CODE PASS · LIVE E2E PENDING |
05 | 키보드·포커스·스크린리더 | CODE PASS · LIVE E2E PENDING |
06 | 관심·저장필터·알림 | CODE PARTIAL · DELIVERY E2E PENDING |
07 | 현재위치 권한 분기 | CODE PASS · LIVE E2E PENDING |
08 | 공개 API·번들·대량조회 보안 | CODE PASS · LIVE E2E PENDING |
| 증거 ID | 검사면 | 2차 실측 | 제이옥션 완료 경계 |
|---|---|---|---|
BBOX-OMITTED | bbox 누락 정정 | GET /api/search/pins?level=7&list_type=1 → HTTP 200 · 전국 cluster 273개 · region_cnt 합 35,800 | 기존 ‘bbox 누락=200 빈 배열’ 오기를 폐기하고 제이옥션은 bbox 필수·누락 전국 확대 금지 |
MALFORMED-QUERY | 입력 오류 | 비숫자 bbox=200 빈 결과 · 역전 bbox=암묵 정규화 · 국외 bbox=200 빈 결과 · 비숫자 level=500 · unknown query=무시 200 | malformed·unknown·국외·역전·과대 입력을 모두 명시 4xx로 차단 |
NATIONWIDE-PARITY | UI 기본 진행조건 | state=10 · sale_start_date=2026-07-16 · list total 34,924 · level10 cluster 합 34,844 · 차이 80 · coverage 99.7709% | snapshot/revision/query_hash/excluded가 없어 동시 snapshot 대사 불가 |
RENDERABLE-GAP | 전국 renderable | 18개 cluster 중 이름 공백·null 좌표 2개 합 29 · renderable 34,815 · 목록 대비 109건 부족 · 99.6879% | renderable + 명시 excluded = 목록 total을 고정 revision에서 대사 |
GANGNAM-L4 | 강남 bbox level4 | 127.02,37.48–127.08,37.54 · 59 pin · count 합 85 · 474ms / 29,026B | count parity PASS · pin public_id 집합/hash 대사 |
GANGNAM-L6 | 강남 bbox level6 | 59 pin 합 85 + 14 cluster 합 85 · 255ms / 14,872B · bbox 밖 anchor 4/14 | cluster anchor는 child geometry 또는 child_bbox 안에 위치 |
GANGNAM-L7 | 강남 bbox level7 | 5 cluster 합 85 · 72ms / 465B · bbox 밖 anchor 3/5 | centroid 클릭의 예기치 않은 지도 점프 금지 |
ZOOM-DEEP-LINK | 전국 확대 계약 | level12/13 시·도 cluster · 경기도 클릭 32km→8km · 실제 지도 변경 뒤 URL level=13 미갱신 | URL level과 실제 Kakao level 동기화·결정론적 확대 |
GROUP-PAGINATION | 동일 위치 11건 | total 11 · page 1·2 고유코드 11 · UI limit60 · limit1000→500 · malformed→60 · page0→1 · page999=200 빈 목록 | fixed revision 전체 public_id set/hash와 pagination 손실·중복 0 |
UNFILTERED-SEMANTICS | 무필터 의미 차이 | list total 70,240 · 전국 pin 합 35,800 | list/map 공통 codec과 source_type·상태·날짜 의미를 응답 meta로 명시 |
PINS-METADATA | pin 응답 계보 | pagination·total·has_more·cap·snapshot·revision 없음 | cluster aggregate = renderable + explicit excluded · mismatch 0 |
NAV-RELOAD | 상세·복귀 | _blank 전후 원 탭 URL·marker 9·sheet 4 유지 · reload 후 URL·marker 9 유지, sheet 선택 0으로 소실 | selected/group/sheet/scroll까지 URL+session state로 복원 |
A11Y-RESIDUAL | sheet 접근성 | marker tabindex=-1 · filter pressed ARIA 없음 · open focus=BODY · dialog semantics 없음 · Esc 미동작 | focus trap/복귀·Esc·dialog name·screen reader·비색상 상태 검증 |
CURRENT-LOCATION | 현재위치 | 최초 진입 자동 요청 0 · session 복원 뒤 low accuracy/maximumAge=300000/timeout=8000 자동 요청 가능·실패 무음 · 수동 high accuracy/maximumAge=0/timeout=12000·모든 실패 동일 toast · exact {lat,lng,level} 저장 · 국외 위치 서울 silent fallback · Permissions API 선확인 없음 | explicit click 전 요청 0 · exact current location 저장/URL/analytics/error log/server 0 · 오류 code 분리 · Permissions-Policy · silent fallback 0 |
MEMBER-ALERT | 관심·저장필터·알림 | endpoint 존재 · 관심 aria-pressed 없음 · 저장필터 삭제 confirm/undo 없음 · read PATCH 실패 후 badge 불일치 가능 | private,no-store · CSRF/Origin · ownership · idempotency · rollback · dialog focus |
MEMBER-AUTH | 무쿠키 회원 경계 | 대부분 회원 API 401 · /api/notifications/unread만 200 hasUnread:false · 비로그인 관심전용 지도는 인증 필요와 실제 0건 구분 불가 | 모든 private endpoint의 일관된 auth error와 server-side private,no-store |
API-CACHE-RATE | 공개 API 헤더·proxy | Cache-Control·ETag·rate-limit·Retry-After 없음 · 작은 pin 무압축 · /api/vworld/address가 비숫자·국외 좌표도 upstream 전달 | cache/rate/compression·provider quota proxy 차단 |
BUNDLE-HEADERS | 번들·보안 헤더 | source map·Authorization/Bearer/secret/API-key literal 미발견 · CSP·Permissions-Policy·frame 보호·HSTS·nosniff·Referrer-Policy 미관찰 | 긍정 secret scan을 유지하고 보안 헤더 전부 운영 E2E |
MAP UX PARITY P0·P1 작업 계약
| 작업 ID | 우선순위 | 상태 | 완료 계약 |
|---|---|---|---|
OVERLAY-01 | P0 | CODE PASS · LIVE E2E PENDING | KST D-day·상태·용도·공개면적·가격을 CustomOverlay로 표시하고 결측·긴 문자열·XSS allowlist를 검증 |
LOCATION-GROUP-01 | P0 | CODE PASS · LIVE E2E PENDING | 서버 비밀 기반 opaque·비가역 location_group_id로 동일 위치 N건 sheet를 만들고 pagination 포함 public_id 집합 손실·중복 0, PNU·내부 ID 노출 0 |
NAV-STATE-01 | P0 | CODE PASS · LIVE E2E PENDING | marker→sheet→card→/auctions/{public_id}; 웹 새 탭+noopener·앱 same-tab과 filter·viewport·selected 복원 |
FILTER-CODEC-01 | P0 | CODE PASS · LIVE E2E PENDING | 목록·지도·facet 공통 query codec; filter·display는 URL, 일반 viewport는 sessionStorage로 분리하고 임시 장소검색 badge의 비지속을 명시 |
GEO-DIAG-01 | P0 | CODE PASS · LIVE E2E PENDING | owner-only 선택/전체 marker에 공개좌표 최대 4자리·location_precision·publication·revision·제외사유 진단, 원좌표 감사는 별도 no-store 권한 |
PRIVACY-01 | P0 | CODE PASS · LIVE E2E PENDING | PUBLIC JSON·DOM·RSC·aria·cache·log의 원좌표·PNU·m_code·g_code·내부 사건 ID를 재귀 검사해 0건 고정 |
API-GUARD-01 | P0 | CODE PASS · LIVE E2E PENDING | 한국 bbox·최대면적·feature hard cap·payload/timeout·AbortController·durable rate limit·명시 4xx validation |
DENSITY-01 | P1 | CODE PASS · LIVE E2E PENDING | zoom별 cluster→dot→정보 overlay 3단 밀도와 동일 revision 결정론·stale 응답 불수용 |
DISPLAY-MODE-01 | P1 | CODE PASS · LIVE E2E PENDING | 총액/평당가와 평/㎡ display mode를 URL에 직렬화하고 가격 안전정수·반올림 기준을 고정 |
LAYER-01 | P1 | CODE PASS · LIVE E2E PENDING | 일반·위성·지적·교통 layer를 제공하고 attribution·provider 장애 fallback을 유지 |
MOBILE-01 | P1 | CODE PASS · LIVE E2E PENDING | 320·390·768px bottom sheet·목록/지도 전환·새 탭 정책·가로 넘침·touch target·safe-area 검수 |
A11Y-01 | P1 | CODE PASS · LIVE E2E PENDING | 키보드·marker/button tab stop·aria-pressed·focus 복귀·Esc·200% 확대·비색상 상태·screen reader 이름 |
PublicMapLot 계약 · ADAPTER IMPLEMENTED, LIVE DATA GATE PENDING
| 필드 | 형식 | 공개 규칙 |
|---|---|---|
public_id | string | Court canonical 공개 식별자 · marker/list/detail 공통 |
lat | number | PUBLIC projection latitude · 소수 최대 4자리 |
lng | number | PUBLIC projection longitude · 소수 최대 4자리 |
coordinate_precision | district | road | parcel_centroid | DB location_precision→공개 DTO adapter; administrative_centroid→district, road_center→road, parcel_centroid 유지, rooftop은 재식별 심사 전 차단 |
publication_scope | PUBLIC | 현재 publication metadata→공개 DTO adapter; 명시 PUBLIC 없으면 fail-closed |
projection_revision | positive integer | 양수 전역 revision이며 serving_enabled=true와 함께 검증 |
location_group_id | opaque string | 동일 위치 묶음용 필수 비가역 ID · PNU/주소코드 역추론 금지 |
same_coordinate_count | positive integer | 1 이상 동일 공개 위치 물건 수 · public_id 집합 무손실 |
item_type_display | string | 공개 용도 표시명 |
land_area_sqm | number? | 공개 허용 토지면적 ㎡ |
building_area_sqm | number? | 공개 허용 건물면적 ㎡ |
display_area_value | number? | 선택된 평/㎡ 표시값 |
display_area_unit | sqm | pyeong? | URL display mode와 일치 |
appraised_price | number? | 감정가 · 안전정수/반올림 검증 |
minimum_price | number? | 최저가 · 할인율 산식 입력 |
price_per_pyeong | number? | 평당가 · 분모/결측/반올림 계약 |
status | string? | 진행 상태 · 비색상 텍스트 포함 |
sale_date | YYYY-MM-DD? | 매각기일 · KST 기준 |
d_day | integer? | Asia/Seoul 자정 기준 D-day |
detail_path | /auctions/{public_id} | same-origin canonical 상세 경로 |
원본 geocoder latitude/longitude와 5자리 초과 공개좌표 · PNU·지번/주소 코드·m_code·g_code·내부 사건/물건 ID · 회원 관심·조회 이력·개인 주소·현재 위치·정밀 viewport · provider secret·REST key·service credential·내부 source URL
MAP UX PARITY 전용 20개 회귀 기준
allowlist 필드·결측·긴 문자열·XSS와 D-day/상태/용도/면적/가격 표시
price_mode·area_mode URL round-trip과 총액/평당·평/㎡ 재현
Asia/Seoul 자정·기일 당일 D-0·과거/미정 기일 경계
색상 외 텍스트·아이콘·aria-label로 상태 구분
동일 위치 count·pagination과 fixed revision public_id 집합/hash 손실 0·중복 0
동일 revision에서 marker·sheet·card·상세 public_id/가격/상태 대사
웹 target=_blank+rel=noopener·앱 same-tab·return-state·popup 차단 fallback
/auctions/{public_id} canonical과 query 추적값 제거
NAV_CONTINUITY: filter/display URL·일반 viewport sessionStorage·selected/group/sheet/scroll의 reload/back/forward 복원
공유 URL·analytics·error log에 exact viewport·현재위치·개인 주소 0
목록·지도·facet 공통 codec과 결과 public_id/제외사유 대사
진행 경매·공매에만 매각기일 범위를 적용하고 과거 포함·상태·KST 경계 대사
동일 revision·bbox·zoom에서 cluster→dot→overlay 결정론
AbortController·timeout·stale response 불수용·최신 viewport 우선
키보드·tab stop·aria-pressed·dialog name·focus trap/복귀·Esc·200%·screen reader
320·390·768px bottom sheet·touch target·가로 넘침·상세 전환
SDK·BFF·429·timeout·offline에서 지도만 닫고 마지막 성공 목록 유지
PUBLIC JSON·DOM·RSC·aria·cache·log에서 최대 4자리와 PNU·내부코드 0
bbox 필수·누락 전국 확대 금지·한국 bbox·최대면적·feature/payload hard cap·durable rate limit·malformed/unknown/국외/과대 4xx
승인 전 외부 truth surface는 outer owner gate 401 또는 제품 route 404, sitemap/link/공개 SDK 0
2차 잔여위험 추가 완료 게이트 · MAP UX NOT PASSED
고정 revision의 목록 total = renderable + 명시 excluded = 모든 cluster/count 합, mismatch 0
모든 cluster anchor가 child geometry 또는 child_bbox 안에 있고 클릭 확대가 해당 child 집합을 포함
목록·pin·cluster·group page가 같은 snapshot_at·positive projection_revision·query_hash/viewport_hash를 공유
bbox 필수; bbox 누락 전국 확대 금지; malformed·unknown·역전·국외·과대 bbox와 비숫자 level/limit을 명시 4xx
bbox·feature·payload·pagination cap, timeout·AbortController, page 범위 오류 4xx와 has_more/total 제공
PUBLIC 응답·DOM·RSC·aria·cache·log에 exact 좌표·PNU·m_code/g_code·현재위치·개인 식별자 0
ETag·Cache-Control과 durable multi-instance rate limit·Retry-After·quota proxy 차단
URL level과 실제 Kakao level을 동기화하고 cluster→dot→overlay 전환·확대 결과를 결정론적으로 검증
관심·저장필터·알림 객체마다 서버 소유권과 회원 UUID를 검증하고 무쿠키/타회원 접근 차단
모든 회원 mutation에 CSRF token·exact Origin·SameSite cookie 계약을 적용
관심·저장필터·알림 mutation은 멱등키·재시도·중복 write 0을 보장
read/read-all PATCH 실패 시 badge·목록 optimistic update를 원복하고 실패를 사용자에게 표시
명시 click 전 geolocation 요청 0; allow/deny/dismiss/unavailable/timeout을 구분하고 session restore 자동 요청 0; Permissions API 선확인; Permissions-Policy geolocation=(self); exact current location의 storage·URL·analytics·error log·server 저장 0; 국외 위치 silent fallback 0
관심·저장필터·알림 응답은 서버 Cache-Control: private, no-store이며 shared cache/RSC 누출 0
저장필터 삭제 confirm/undo와 회원 dialog의 accessible name·초점 진입/복귀·Esc 계약
잔여작업 통합 실행계획 · W0–W11
제이옥션 MAP UX PARITY 잔여작업 통합 실행계획 · SHA-256 547EB70A4F66FE37043E3B64B797417AF5C3B7B8568BF9510088C5538566ECD6
PUBLIC /map 404 · ALIASES 404 · PUBLIC PRODUCT SDK 0
| 착수 모드 | 명령 범위 | 자동 실행 | 종료점 |
|---|---|---|---|
M5_READY | 한 번의 구현·검증 요청 | 코드·PostGIS additive migration·BFF·owner-only 배포·CT104·168시간 Shadow·rollback | 공개 직전 승인 패킷 |
FULL_RELEASE | M5 공개와 사후검증까지 명시 | M5_READY 전체+공개 전 1/10/50/100% 미러 canary+atomic 공개+사후 24시간/7일 | 공개 안정화 완료 |
CREATED → PREFLIGHT → M2A_RECERTIFIED → DATA_APPROVED → PUBLIC_PROJECTION_READY → API_SECURITY_READY → COUNT_CLUSTER_READY → UX_STATE_READY → MEMBER_A11Y_READY → RELEASE_CANDIDATE → OWNER_SHADOW → SHADOW_7D_PASS → PREPUBLIC_CANARY_1 → PREPUBLIC_CANARY_10 → PREPUBLIC_CANARY_50 → PREPUBLIC_CANARY_100 → M5_APPROVED → PUBLIC_ATOMIC_RELEASE → POST_RELEASE_24H → POST_RELEASE_7D → COMPLETE
| 제어 ID | 고정 실행 계약 |
|---|---|
CAMPAIGN_LEDGER | MAP-<UTC timestamp>-<source SHA 8자리>와 immutable projection revision, LKG·rollback·evidence URI를 기존 PostGIS 원장에 기록 |
EXCLUSIVE_WRITE | 전용 worktree와 PostGIS advisory lock, Sites·CT104·Cloudflare deployment lease(5분 heartbeat·15분 TTL)로 중복 write/deploy 차단 |
DRIFT_RESUME | source·schema·projection·Kakao app·security rule·UI codec·env drift를 재개 전에 대사하고 영향받는 최소 게이트부터 재검증 |
M2A_RECERT | M0 변경 후 M2A를 재인증하고 M5 atomic 공개 24시간 이내 SDK·REST·tile·marker·clusterer·attribution·quota를 다시 확인 |
SAFE_MIGRATION | W2는 backup→expand→backfill→PUBLIC projection→positive revision 순서로 수행하고 serving=false를 유지 |
SHADOW_168H | CT104가 1분 heartbeat·15분 synthetic·시간별 집계·일별 서명 snapshot을 168시간 연속 남기며 critical/공백/drift 시 0부터 재시작 |
MIRROR_ATOMIC | M5 전 owner/shadow 미러 1/10/50/100%를 통과한 뒤 /map·nav·SEO·SDK/CSP를 한 release에서 atomic 공개 |
DURABLE_EVIDENCE | raw evidence를 CT104 내구 저장소와 NAS에 복제·hash 대사하고 secret/PII 제거 보고서와 manifest hash만 Git에 보존 |
POST_RELEASE | 공개 후 24시간과 7일을 같은 campaign으로 관측하고 incident 0·문서/runbook/manifest 마감 후에만 COMPLETE |
| 독립 증거 집합 | 개수 | 현재 판정 | 유지 규칙 |
|---|---|---|---|
| 기존 MAP UX 회귀 | 20 | 별도 20/20 PASS 필요 | 기존 ID·증거파일·실행시각·담당자를 합치거나 대체하지 않음 |
| 기존 활성화 게이트 | 15 | 별도 15/15 PASS 필요 | 과거 코드/계획 테스트 수를 운영 승인 증거로 승격하지 않음 |
| 2차 잔여위험 게이트 | 15 | 별도 15/15 PASS 필요 | COUNT_PARITY부터 DIALOG_FOCUS까지 독립 실행·증거 유지 |
| 잔여 상태 | 8 | 현재 0/8 CLOSED | PARTIAL/BLOCKED를 전부 CLOSED로 바꾼 증거가 있어야 W9 진입 |
| 작업 | 실행 단위 | 상태 | 선행 | 종료 기준 |
|---|---|---|---|---|
W0-LEDGER | 앱·키·도메인·rollback 원장 | PENDING | 없음 · W1과 병렬 | jauc 중복 도메인 0 · active key owner/rotation/rollback 승인 |
W1-GEO | 좌표 ground-truth 승인 | PENDING | 없음 · W0와 병렬 | 1km 초과 41건+미해결 7건 전건 판정 · precision/confidence/제외 정책 승인 |
W2-PROJECTION | PUBLIC projection·고정 revision | PENDING | W1 | backup→expand→backfill→projection→positive revision · metadata·행수/hash 대사 · serving=false 유지 |
W3-CONTRACT | Geo API·BFF 보안 계약 | PENDING | W2 | strict 4xx·service auth·fixed egress·secret·durable rate·cache namespace PASS |
W4-CLUSTER | 목록·pin·cluster 정합 | PENDING | W3 | 같은 revision public child·count mismatch 0 · anchor 위반 0 |
W5-UX | 마커·sheet·목록 공통 view model | PENDING | W4 | overlay·동일위치·3단 밀도·가격/면적 mode의 public_id/값 불일치 0 |
W6-STATE | URL·상세 전환·복원 | PENDING | W5 | new/same tab·reload·back/forward·selected/group/sheet/scroll 복원 PASS |
W7-MOBILE-A11Y | 모바일·접근성·레이어 | PENDING | W5·W6 · W8과 병렬 | 320/390/768·200%·키보드·focus/Esc·screen reader PASS |
W8-MEMBER-LOCATION | 회원·현재위치 | PENDING | W3·W6 · W7과 병렬 | ownership·CSRF·idempotency·rollback·private cache·위치 5분기 PASS |
W9-RC | 장애·성능·보안 RC | PENDING | W4–W8 | SLO·privacy·quota·failure·rollback·bundle/secret scan 전부 PASS |
W10-SHADOW | owner E2E·CT104·168시간 Shadow | PENDING | W9 | 1분 heartbeat·15분 synthetic 공백 없이 168시간 critical 0 · canonical runtime·rollback 훈련 PASS |
W11-M5 | 미러 canary·M5 atomic 공개 | BLOCKED BY W10 | W10·M2A 24h 재인증·공동 승인 | owner/shadow 1→10→50→100% PASS 뒤 route/nav/SEO/SDK atomic 공개 · 사후 24h/7d PASS |
W2–W4 최우선 보완점
| 게이트 | 첫 변경·검증 계약 |
|---|---|
SERVING-REVISION | upstream serving_enabled=true와 projection_revision>0, publication contract, snapshot freshness를 함께 확인하고 불일치는 503 fail-closed |
DURABLE-RATE | 프로세스 메모리 limiter가 아니라 Cloudflare+upstream 다중 인스턴스 rule ID·Retry-After·quota 차단의 실제 배포 증거 확보 |
PUBLIC-CLUSTER-CHILD | cluster 자식 전건이 같은 PUBLIC projection/revision임을 검증하고 lot publication 검사를 우회하지 못하게 차단 |
CACHE-NAMESPACE | public cache key에 release mode+upstream+projection revision+query/viewport를 포함하고 전환 시 purge |
ROUTE-REVISION | /api/v1/lots/map은 revision 존재가 아니라 양수 revision+serving을 강제하고 0·역행·stale을 차단 |
PRECISION-ALLOWLIST | M1 승인 전 rooftop·legacy 좌표는 PUBLIC 후보에서 제외하고 최대 4자리+precision metadata만 허용 |
검증 데이터면과 현재 jauc 제품면의 차이
| truth surface | 판본·건수 | 좌표·식별·cluster | 흡수 원칙 |
|---|---|---|---|
| 좌표 교차측정 모집단 | 표시 112,557건 · 20개 균등 offset · 표본 1,000건 | public_id·좌표·국내 bbox·상세경로·주소 각 1,000 | 측정 결과와 PUBLIC 승인 상태를 분리 |
| Legacy Shadow upstream | 실 feature 100건 | feature/list/detail 고유 public_id 각 100 · legacy revision · shadow_unverified | 내부 검수에만 사용하고 PUBLIC으로 자동 승격 금지 |
| PostGIS PUBLIC projection | migration 143 적용 | revision 0 · serving false · publication metadata 0 · public view 0 | 양수 revision·명시 metadata·serving 승인 전 fail-closed |
| Sites owner-only Shadow | v23 · env revision 4 | /admin/map-shadow · BFF/config 관리자 gate · local auth E2E PASS | 운영 owner UI E2E 전 M3 완료로 승격 금지 |
| 목표 PUBLIC geo projection | Court canonical lot 기준 | public_id·완화 좌표·precision·publication·lineage·detail_path | PostGIS 한 곳을 정본으로 하고 bbox·zoom·filter server cluster만 공개 |
KAKAO 하위 게이트 · 기존 M0–M5에 병합
canonical 앱·소유 원장
1514962 / 제이옥션을 canonical 앱으로 고정했고 JavaScript SDK origin은 https://jauc.co.kr과 https://jauction-court-platform.cpym352.chatgpt.site 두 개이며 임시 localhost 제거를 확인했습니다.
종료 조건: 다른 계정 앱의 jauc 중복 도메인 제거 · active key owner/rotation/rollback 원장 승인
좌표 provider 교차측정
20개 균등 offset에서 1,000건을 측정해 Kakao 해석 993·미해결 7과 거리·중복 분포를 확보했습니다. 이는 provider cross-check이며 정확도 99.3%나 ground-truth 승인으로 표현하지 않습니다.
종료 조건: 1km 초과 41건·미해결 7건 수동 판정 · confidence 하한과 ground-truth 승인
provider 기능 실증
Maps ON, 등록 origin SDK 200, 미등록 origin 401, Local REST 200, 실제 tile·marker·clusterer·attribution을 검증했습니다.
종료 조건: 2026-07-16 감사 evidence 고정 · 임시 localhost 제거 완료
server 경계·PUBLIC 데이터면
same-origin BFF /api/v1/lots/map, strict query/bbox, 명시 public_id, 4자리 좌표 완화, ETag, shadow no-store, server cache, 전역 projection_revision 역행 차단, bounded memory, public fail-closed와 PostGIS DDL을 구현·검증했습니다.
종료 조건: PUBLIC metadata·양수 revision·serving · service auth · fixed egress/IP · REST secret · durable edge rate limit
owner-only 제품 Shadow
/admin/map-shadow를 Sites v23/env revision 4에 비공개 배포했고 배포 빌드 로컬 인증 E2E와 운영 HTTP 경계를 통과했습니다. 운영 URL의 owner 로그인 후 UI E2E는 계정 allowlist 불일치로 대기합니다.
종료 조건: owner 운영 UI E2E · jauc.co.kr CT104 canonical runtime 통합 · 7일 관측
공개 projection·모바일
exact·parcel·district 공개 정밀도와 비공개 완화, 모바일 sheet, 회원 관심·저장검색, SEO noindex/follow와 sitemap 제외를 검증합니다.
종료 조건: 정밀좌표 누출 0 · 320/390/768px · 익명/회원 payload 분리
공개 승인
7일 shadow 뒤 1%→10%→50%→100% canary, 일/월 쿼터·429·비용 경보, kill switch, CSP, attribution, runbook과 롤백을 닫은 뒤에만 전역 메뉴와 /map을 함께 승격합니다.
종료 조건: 승인 기록 · 단계별 공개 smoke · 롤백 훈련 · nav/route/SEO 동시 배포
화면·상호작용 계약
목록 검색과 같은 query schema를 URL에 직렬화하고 법원·지역·용도·가격·기일·상태 필터를 양방향 동기화
지도 모드를 사용자가 선택하기 전 SDK 요청 0건을 유지하고 autoload=false loader를 한 번만 초기화
사용자가 지도분할 모드를 선택했을 때만 좌측 38% 결과 목록·우측 62% 지도를 사용하고 marker와 동일 public_id 카드를 강조
지도/목록 전환과 하단 sheet를 사용하고 선택 물건 요약·상세 이동·관심등록을 엄지 영역에 배치
zoom별 server cluster를 우선하고 pan마다 자동 요청하지 않으며 bbox 이동 후 ‘현 지도에서 검색’으로만 재조회; 결과 수 상한과 검색 범위 초과 안내
키보드로 조작 가능한 동일 순서 목록, marker 정보의 텍스트 대체, 색상 외 상태표시와 초점 복귀
좌표 없음·일부 지연·provider 장애·한도 초과를 구분하고 목록 검색은 계속 사용할 수 있게 독립 유지
오시는길 Daum RoughMap loader와 제품 지도검색 SDK loader를 분리하고 Kakao attribution을 모든 지도 상태에서 유지
브라우저에서 PostGIS까지의 단일 소유 경로
/admin/map-shadow에서 same-origin /api/v1/lots/map과 /api/v1/admin/map/config만 호출하고 DB·Kakao Local REST·RecoveryLab·내부 ops에 직접 연결하지 않음
exact same-origin·운영자 인증, strict query/bbox, allowlist projection, ETag·no-store·server cache·revision/rate hard cap을 적용; public mode는 live gate 미충족 시 503
AUCTIONHUB geo upstream을 server-only로 호출하고 explicit public_id만 수용; service auth 전에는 shadow에만 한정
migration 143의 additive·fail-closed 원장; revision 0·serving false·publication metadata 0·view 0을 유지하고 명시 승인 때만 양수 revision으로 전환
Court 원주소→정규주소→PNU→geocode→geo projection을 versioned event로 갱신하고 D1은 상담 원장에만 유지
Court 주소에서 공개 marker까지의 데이터 계약
| 계층 | 필드 | 저장·공개 원칙 | 완료 증거 |
|---|---|---|---|
| 식별 | public_id · court_code · case_year · case_serial · lot_no | Court 안정키와 1:1, marker·목록·상세에서 같은 public_id 사용 | 오병합 0건 |
| 원주소 | source_address · source_url · fetched_at · payload_hash · parser_version | Court 원문 계보를 변경 없이 보존 | 계보 누락 0건 |
| 정규주소 | road_address · jibun_address · address_status · normalized_at | 원문과 별도 version으로 저장하고 불명확 값은 pending_review | 표본 정확도 승인 |
| 필지 | pnu · pnu_provider · pnu_fetched_at · pnu_confidence | PNU는 보강값이며 Court 사실값을 덮어쓰지 않음 | 충돌 자동승격 0건 |
| 좌표 | latitude · longitude · geocode_provider · geocode_version · geocode_confidence | 원좌표/보정좌표와 provider 계보 분리 | M1 측정 완료 · confidence 하한·ground-truth 승인 대기 |
| 공간색인 | geom geography(Point,4326) · GiST · optional h3_cell | PostGIS GiST 기준선을 먼저 검증하고 H3는 cluster benchmark 이득이 있을 때만 추가; geohash 기본 중복 저장 금지 | 대표 bbox p95 예산 통과 |
| 공개등급 | publication_status · location_precision · redaction_reason | rooftop · parcel_centroid · road_center · administrative_centroid만 명시 검토 후 PUBLIC; legacy_unspecified · unresolved 자동 승격 금지 | DDL 적용 · publication metadata 0 · 공개 view 0 |
| 신선도 | geo_updated_at · source_event_id · projection_revision | LOT_UPSERTED·SCHEDULE_CHANGED·STATUS_CHANGED 영향 범위만 재투영 | event→지도 지연 SLO 통과 |
| 품질상태 | rooftop · parcel_centroid · road_center · administrative_centroid · legacy_unspecified · unresolved | 기존 PostGIS DDL enum을 단일 원장으로 사용하고 공개 DTO의 coordinate_precision으로 명시 변환; legacy_unspecified·unresolved는 비공개 | unresolved 별도 queue · enum 불일치 0 |
| 이관계보 | migration_batch_id · source_namespace · source_generated_at · source_payload_hash · canonical_public_id | 기존 지도 데이터는 staging backfill 후보로만 사용하고 브라우저 직접 의존·영구 정본 사용 금지 | 멱등 이관·canonical 결합·원천 hash 대사 |
| revision 일관성 | projection_revision · snapshot_at · viewport_hash · revision_source | projection_revision은 query와 무관한 upstream 전역 stream으로 역행 차단; legacy generated_at만 limit/offset을 뺀 query 범위 | 전역 ledger 128 · TTL 5분 · 역행 응답 격리 |
예약 API와 보호 한계
| 예약 계약 | 입력 | 출력 | 보호·성능 |
|---|---|---|---|
GET /api/v1/lots/map | 필수 bbox · zoom · q · item_type · min/max_price · max_fail_count · include_past · limit · offset | meta(contract_version·snapshot_at·projection_revision·viewport_hash·revision_source·publication_scope·mode·total_count·has_more), cluster 또는 명시 public_id lot, excluded(duplicate_public_id 포함) | bbox 누락 전국 확대 금지 · malformed/unknown/역전/국외/과대 4xx · 한국 면적·feature/payload 상한 · 4자리 공개 좌표 · ETag · shadow private/no-store · server cache 64/15초 · durable rate limit |
GET /api/v1/admin/map/config | 정확한 same-origin + 운영자 인증 | 등록 JavaScript SDK loader 설정 | shadow 전용 · 초기 HTML/RSC 저장 0 · REST key 반환 0 |
GET /api/v1/lots/{publicId}/public | publicId | 선택 marker의 공개 카드와 상세 canonical URL | 기존 PUBLIC_INDEX projection 재사용 |
GET /api/v1/lots/map/groups/{locationGroupId} | opaque location_group_id | 동일 공개 위치의 PublicMapLot 카드와 public_id 집합 | PNU·주소코드 역추론 금지 · feature cap · 중복/손실 0 · revision 일치 |
GET /api/v1/search/facets | bbox, 공통 filters | 현재 영역 법원·용도·상태·가격 facet | 목록과 동일 query codec·집계 버전 |
POST /api/v1/member/saved-searches | query, viewport, view=map, alert_policy | 지도 보기 상태를 포함한 기존 저장검색 | 로그인·소유권·빈도 제한 |
GET /api/v1/lots/{publicId}/nearby | radius_m, type | 인근 진행·매각·공매의 공개 허용 projection | 반경 상한·원천 분리·정밀좌표 보호 |
GET /api/v1/admin/geo/quality | 운영자 권한 | 미해결·저신뢰·provider 충돌·stale 집계 | ADMIN 전용, 원문·수정 감사 연결 |
GET /api/v1/admin/map/diagnostics | 운영자 권한 · bbox · selected_public_id? | 선택/전체 marker의 공개 4자리 좌표·precision·publication·revision·제외사유 | owner-only · no-store · 감사로그 · 원좌표는 별도 단건 권한에서만 조회 |
회원 기능과 색인 유입의 분리 계약
| 경계 | 고정 계약 |
|---|---|
| PUBLIC | marker·cluster에는 PUBLIC_INDEX와 동일한 가격·상태·기일·detail_path만 제공하고 비회원 상세 계약을 넘지 않음 |
| MEMBER | 관심등록·저장검색·알림은 로그인과 객체 소유권을 서버에서 검사하고 익명 응답·cache와 분리 |
| PRECISION | 회원 여부와 무관하게 제한 위치의 exact 좌표를 추가 공개하지 않고 location_precision·redaction_reason을 적용 |
| SAVED_VIEW | bbox·zoom·공통 filters만 저장하며 현재위치·정밀 viewport·개인 주소는 저장·분석 로그에서 제외 |
| SEO | /map은 공개 후에도 noindex,follow·sitemap 제외; 색인은 /search, 법원·지역 정적 landing, 물건 canonical 상세가 담당 |
| RETURN | 로그인 뒤 선택 marker·filter·view로 복귀하되 서명된 same-origin return_to만 허용하고 외부 redirect 차단 |
완성형 구현 작업 패키지
| 작업 ID | 현재 상태 | 우선순위 | 구현 범위 | 승격 증거 |
|---|---|---|---|---|
GEO-01 | PARTIAL · SCHEMA VERIFIED | P0 | migration 143으로 PostGIS PUBLIC projection과 lineage 저장 구조를 적용하고 Court canonical lot를 단일 소유 원장으로 유지 | 테이블 2·뷰 1·함수 3·트리거 2·제약 14·인덱스 4; revision 0·serving false·publication metadata 0·view 0 |
GEO-02 | PARTIAL · MEASURED | P0 | 20개 균등 offset·1,000건 provider cross-check를 입력으로 주소·좌표·confidence 검토 원장을 구성하고 ground-truth 승인을 별도 게이트로 유지 | 993/7 해석 분포·거리 백분위·중복 좌표 분포 보존; 승인 전 PUBLIC 승격 금지 |
API-01 | PARTIAL · CODE VERIFIED | P0 | Sites same-origin BFF /api/v1/lots/map에 bbox·zoom·공통 filter·limit/offset·ETag와 명시 public_id 투영을 구현 | targeted 11/11 · 전체 125/125; strict query/bbox·cross-site 403·public fail-closed |
CACHE-01 | PASS · APP BOUNDARY | P0 | query와 무관한 전역 projection_revision 원장으로 역행을 차단하고 shadow no-store·server cache와 bounded memory를 적용 | cache 64/15초 · revision ledger 128/5분 · rate bucket hard cap 2,000 |
KAKAO-SEC-01 | PARTIAL · OWNER LEDGER PENDING | P0 | JavaScript SDK origin 두 개를 canonical 앱에 고정하고 REST key는 fixed egress가 없는 Sites에 의도적으로 미배포 | 등록 SDK 200·미등록 401·번들/HTML/RSC key 0; key owner/rotation/rollback·고정 IP 대기 |
UI-01 | PARTIAL · PRIVATE DEPLOYED | P1 | /admin/map-shadow에 marker↔목록↔상세 public_id 동기화, clusterer, 선택 접근성, 목록 fallback을 owner-only로 구현 | tile 16·feature/list/detail 고유 public_id 각 100·aria-pressed/focus 각 1 PASS |
OPS-01 | PARTIAL · LIVE GATES PENDING | P1 | public release fail-closed·kill switch·운영 HTTP 경계를 유지하고 durable edge 제한·관측·복구 훈련을 연결 | root 200·/map 404·cross-site BFF 403·identity-less admin API 401; 7일 관측 대기 |
SEO-01 | PASS · CLOSED BOUNDARY | P2 | M5 전 공개 /map·별칭 404, sitemap 제외, 공개 전역 메뉴·제품면 SDK 요청 0건을 고정 | 공개 경로·링크·sitemap·SDK 회귀 테스트 |
운영·보안·쿼터·복구 제어
| 제어면 | 운영 정책 | 검증·복구 기준 |
|---|---|---|
| 키·origin | canonical Kakao 앱 1514962의 JavaScript SDK origin을 jauc와 Sites 두 개로 고정하고 임시 localhost를 제거 | 등록 origin 200·미등록 origin 401; 다른 계정 중복 도메인과 key owner/rotation/rollback 원장은 대기 |
| REST egress | fixed egress/IP가 없는 Sites에는 REST key를 의도적으로 배포하지 않고 운영 geo worker 확정 뒤 최소 allowlist로 제한 | 현재 Sites env 미배포 · 번들/HTML/RSC literal 0; 허용/비허용 IP E2E는 live gate |
| 캐시·revision | strict query allowlist, ETag, shadow no-store, server cache와 query 독립 전역 projection_revision 역행 차단을 적용 | cache 64/15초 · revision 128/5분 · stale revision fail-closed; legacy generated_at만 limit/offset 제외 query 범위 |
| 메모리·rate | 프로세스 메모리 악용을 막기 위해 캐시·revision·rate bucket에 hard cap을 두되 앱 limiter를 durable edge 제한으로 오인하지 않음 | rate bucket 2,000 상한 구현; durable edge rate limit 미완료 |
| 쿼터·비용 | daily quota 대비 70% 경고·85% 신규 지도 세션 절감·95% 지도 kill switch, 429 시 geocode 재시도 중단과 월별 비용 상한 | SDK·Local·BFF 분리 계측·경보 테스트·승인 없는 유료 초과 0 |
| 장애·복구 | provider 장애 시 지도 loader만 닫고 목록·상세·검색은 LKG PUBLIC projection으로 계속 제공 | kill switch 5분 이내·복구 후 cache purge·목록 기능 성공률 유지 |
| 개인정보·정밀도 | 현재위치는 opt-in session-only, 제한 주소는 district/grid 완화, exact viewport·정밀주소는 로그 금지 | 비공개/회원 전용 좌표 공개 0·redaction_reason 감사 가능 |
보안 결함 수정과 독립 재검토
| 결함면 | 수정 계약 | 판정 |
|---|---|---|
| legacy id 승격 | raw.id fallback을 제거하고 명시 raw.public_id만 공개 projection에 허용 | PASS |
| same-site 판정 | 느슨한 same-site 허용을 제거하고 exact same-origin·운영자 인증을 분리 | PASS |
| public gate | 코드의 release fail-closed는 구현됐지만 BFF가 PUBLIC metadata·projection_revision > 0·serving_enabled=true를 live source에서 직접 증명해야 승격 | PARTIAL · LIVE GATE PENDING |
| revision query 분리 | projection_revision은 query 독립 전역 upstream 원장, legacy generated_at만 정규 query 범위로 계산 | PASS |
| 메모리 상한 | cache 64·revision 128·rate bucket 2,000의 hard cap과 TTL 적용 | PASS |
| shadow cache | private Shadow 응답 no-store와 server cache 경계를 수정 | PASS |
| 독립 재검토 | 94461b6 보안 보완과 2b9b5daf 전역 revision 보완 뒤 최종 독립 재검토 | PASS |
Sites source·배포·rollback 계보
| 판본 | source | 배포 상태 | 복구·경계 |
|---|---|---|---|
| v22 | 94461b6 | 결함 발견 후 저장만 하고 미배포 | bbox 간 전역 projection_revision 10→9 역행 결함을 v23 source에서 보완 |
| v23 · env revision 4 | 2b9b5daf98501db09de03b5267e7290c8edf4330 | owner-only 비공개 배포 · 구현 기준판 | /admin/map-shadow 배포, public /map 404 유지 |
| v24 | 3fdcbb09c172da468f49427fb0f7049ff18131ba | owner-only 비공개 배포 · 계획 검증판 · 전체 127/127 PASS | implementation-plan HTTP 200 · public /map 404 · root 200 재검증 |
| M5_READY code target | 5b3a106 + REV17 final Git HEAD | owner-only 배포 대상 · 전체 218/218 PASS | BFF·지도 UX·회원 D1 구현 완료; AuctionHub runtime·PostGIS DB·PUBLIC /map은 변경하지 않음 |
| rollback | release mode OFF → 직전 성공판 재배포 | public fail-closed 유지 | migration 143은 additive이므로 자동 DROP 금지 |
지도 provider·권리·위치정보 보호 게이트
| 검토 영역 | 출시 전 고정할 규칙 |
|---|---|
| Court 출처 | 주소·사건·문서는 출처·조회시각·원문 URL을 유지하고 지도 보강값과 구분 |
| 민간 참고 경계 | 두인·GF·경매마당의 좌표·코드·이미지·타일은 재사용하지 않고 동결된 UX 기능 계약만 참고 |
| 지도 표시 | 지도 타일·로고·출처 attribution을 숨기거나 잘라내지 않고 provider 표시 규칙 준수 |
| 좌표 이용 | geocode 저장·cache·파생좌표·재배포 허용범위를 provider 선택 시 최신 약관으로 재검토 |
| 상업 이용 | 상업용 서비스·인쇄·캡처·로드뷰 연결 조건과 별도 비용·승인 여부를 출시 전 확정 |
| 키 분리 | JavaScript key는 등록 배포 도메인으로 제한하고 REST/server key는 브라우저 번들·로그에 포함하지 않음 |
| 현재 위치 | 사용자 opt-in 후 세션에서만 사용하고 기본 저장하지 않으며 거부해도 전체 검색 가능 |
| 분석 로그 | exact viewport·정밀주소·현재위치를 분석/오류 로그에 남기지 않고 격자·집계 단위로 축소 |
M0–M5 점진 활성화
앱 1514962와 두 SDK origin, localhost 제거는 완료했고 다른 계정 중복 도메인과 key owner/rotation/rollback 원장은 남았습니다.
종료 조건: 중복 0 · owner와 교체/복구 원장 승인
20개 균등 offset·1,000건 provider cross-check와 거리·중복 분포를 측정했으며 ground-truth 승인은 별도입니다.
종료 조건: 이상치 수동 판정 · confidence 하한 · 승인 기록
Kakao provider는 실증 PASS이고 PostGIS DDL·same-origin BFF·revision/cache 보안은 코드/스키마 검증 완료, PUBLIC live gate는 대기합니다.
종료 조건: PUBLIC metadata·양수 revision·serving·service auth·fixed egress·REST secret·durable rate limit
/admin/map-shadow를 Sites v23에 비공개 배포했고 로컬 인증 E2E·운영 HTTP 경계를 통과했으나 owner 운영 UI E2E는 대기합니다.
종료 조건: owner 운영 UI E2E · CT104 canonical 통합 · 7일 관측
P0 7개·P1 5개와 PublicMapLot adapter·20개 회귀를 owner-only 코드로 구현했습니다. 전국 고정 revision 실대사·owner 운영 E2E·CT104 168시간 Shadow 전까지 상위 판정은 NOT PASSED이며 공개 경로는 열지 않습니다.
종료 조건: 전국 성능·합계 대사 · owner 운영 E2E · CT104 168시간 Shadow · PUBLIC 원좌표/PNU/내부코드 0
owner-only preview에 bottom sheet, 지도/목록 전환, 관심·저장검색·알림·상세 복귀와 회원 소유권·멱등성·exact Origin 경계를 구현했습니다.
종료 조건: 운영 owner 320·390·768px·screen reader·알림 delivery E2E · private payload 누출 0건
provider 약관·비용·키 제한, SLO·경보·롤백, 7일 shadow를 닫은 뒤 메뉴와 제품 route를 함께 활성화합니다.
종료 조건: 활성 route·nav·sitemap/noindex 정책·runbook 동시 배포
자동화할 지도검색 테스트 매트릭스
Court lot→canonical_public_id→PUBLIC geo projection 1:1, orphan·duplicate·wrong lot 0
좌표 순서·국내 범위·면적·zoom·feature 상한과 antimeridian 비대상 입력 차단
목록·facet의 query_hash와 지도의 viewport_hash를 분리하고 snapshot_at·projection_revision·public_id 집합 대사
동일 revision·bbox·zoom에서 cluster_id·count·확장 zoom 결정론 보장
exact·parcel·district·unresolved 정책과 익명/회원 응답에서 제한 좌표 누출 0
등록 origin SDK 200, 미등록 origin 401, Local 200, tile·marker·clusterer·attribution
JavaScript/REST key 하드코딩·번들·HTML·RSC·로그·오류·보고서 노출 0
필터→지도→marker→목록 카드→상세→동일 상태 복귀와 목록 fallback
키보드 순서·screen reader 이름·초점 복귀·200% 확대·색상 외 상태표시
noindex,follow·sitemap 제외·canonical·동적 query 색인 차단·상세 SSR 유지
수도권·광역·농어촌 bbox p95, payload, cluster count, cache hit, SDK lazy-load 예산
Kakao/Local/BFF/replica/429 각각에서 지도만 닫고 목록·검색·상세와 LKG 유지
지도검색 활성화 완료 기준
M5 전에는 /map·/map-search·/search/map 404, 전역 링크·sitemap 0건, 검색 제품면 지도 SDK 요청 0건
앱 1514962를 단일 canonical로 고정하고 다른 계정 앱의 jauc 도메인 중복 등록·불명확 key owner 0건
JavaScript key는 등록 origin만 허용하고 REST key는 server secret·고정 egress IP allowlist를 사용하며 번들·RSC·로그 노출 0건
지도 공개 좌표 100%가 Court 주소 원문과 provider·조회시각·version으로 역추적
층화 표본 1,000건의 오좌표·타지역 좌표·공개등급 위반이 승인 임계값 이내
허용하지 않은 query를 정규화하고 동일 projection revision에서 generated_at·total·cluster가 반복 호출과 replica 간 일치
동일 query의 목록 public_id 집합과 지도 집합이 좌표 품질 제외 사유까지 대사
대표 수도권·광역·농어촌 bbox의 API p95·payload·cluster 예산 통과
localhost smoke가 아닌 https://jauc.co.kr 제품 화면에서 SDK·타일·marker·cluster·상세 이동·fallback E2E 통과
키보드만으로 필터→목록→선택→상세 복귀, 200% 확대와 screen reader 이름 검증
320·390·768px에서 지도/목록 전환·sheet·필터·상세 이동이 가로 넘침 없이 동작
제한 위치·개인 주소·회원 데이터가 공개 marker·RSC·캐시·로그에 포함되지 않음
provider 기능 활성화·배포 도메인·키 종류·일/월 한도·유료 승인·cache hit·초과 차단·비상 비활성화 검증
Court 출처와 지도 attribution, 저장·cache·파생좌표·상업이용·인쇄/캡처·로드뷰 조건 승인
provider/API 장애 때 지도만 안전하게 닫히고 목록·검색·상세는 마지막 정상 projection으로 유지
COMPREHENSIVE PRODUCT REVIEW
전체 검수와 추가 제안을
지도계획과 분리해 관리
| 영역 | 현재 확인 | 남은 연결 | 우선순위 | 승격 증거 |
|---|---|---|---|---|
| 메인·검색·결과 | 실 Court BFF와 검색폼·결과·추천 8건·detail_path 상세 연결을 owner-only에서 검증 | regions/sigungu/taxonomy 변환과 fixed revision·snapshot·query_hash 기반 정렬·전체 pagination, 회원 행동은 잔여 | C3→C6 | 고정 query 50개·fixed 100 lots·facet·URL·revision 대사 |
| 물건 상세 | 공개 summary와 canonical_id route, 입찰가 분석 연결 구현 | 일반 Court opaque public_id backfill과 PUBLIC/MEMBER/PRIVILEGED projection, 9개 보강 BFF·문서/권리/임차 전체 상세는 미접목 | C3→C6 | 상세 100건 12섹션 lineage·익명 누출·ID 대사 |
| 월간 법원 일정 | AuctionHub sale-events와 lots/facets fallback으로 월 달력·법원 필터 구현 | 월 최대 8×100 fallback 한계와 fixed revision·전국 전체성, SCHEDULE_CHANGED 소비 대사는 잔여 | C3→C6 | event 반영 지연·법원별 건수·전체 public_id 집합 대사 |
| 회사·오시는길 | 운영 화면 구현·법인정보 중복 제거 | 외부 지도 loader 장애 대체 유지 필요 | 유지 | 주소·CTA·모바일 회귀 |
| 컨설팅 | 허브·9단계·수수료·신청과 D1 접수 구현 | 수수료·계약·법률 문구 최종 승인 필요; 상담 row의 Court evidence 필드는 현재 미결합 | 운영 승인 | 폼·정책 버전·Court public_id 결합 E2E |
| 상담 인트라넷 | D1 저장·AES-GCM·CSRF·멱등·속도제한·마스킹·PII_VIEWED 코드 구현 | 허용 계정 목록·복호화 E2E 미완료, 외부 인트라넷 adapter disabled | P0 | 동일 접수 목록·상세·PII_VIEWED·outbox |
| 회원·관리자·결제 | 회원 세션·관심·최근·저장검색·in_app 알림·입찰분석, owner 고객/상담/analytics read·마스킹·감사를 구현 | 법률 DRAFT로 가입·신규 저장 차단; 상담 CRM write·알림 worker·checkout/webhook/refund/실 PG는 미구현 | C5→C7 | 권한 우회 0·hosted D1 0000~0007·실회원·PG 원장 E2E |
| Court 데이터 | 기존 AuctionHub BFF와 별도로 8종 Court event·service-auth feed client·D1 inbox/cursor/DLQ·고정 판본 검색/상세 projection 구현 | 운영 producer 실증거·DLQ replay 실행기·projection outbox 전달·달력/facet/법원·전체 9개 보강 projection은 잔여 게이트 | C0→C5 | 중복·역순·누락·충돌·DLQ·bounded drain·fixed revision E2E |
| 온비드 공매 | 15157768 420행 용도코드 reference와 LKG/status route 구현 | lotSearch NOT_CONNECTED; 실물건·상세·입찰·결과와 일간 Proxmox runner는 미연결 | 공식 원천 C5 | namespace·원문·갱신주기·물건 E2E |
| SEO·가입 전환 | metadata·canonical·robots·상세 JSON-LD·revision-safe sitemap·noindex 골격 구현 | owner-only라 실제 색인 불가; lot cap 500과 jauc.co.kr CT104 origin·DNS·TLS·canonical 실검증이 남음 | C7→C9 | 대표도메인·봇/비회원 동등·404·구조화데이터·sitemap 전체성 |
| 지도검색 | M2A provider PASS와 owner-only /demo/map-search 실DB 목록·marker·상세·viewport·focus 구현 | 원본 Geo 인증·migration144/PUBLIC v2·동일좌표 pagination·cluster parity·owner SDK E2E·CT104 168시간 관측이 남아 공개 별칭은 404 | M5_READY→C8→C9 | MAP UX 20개·활성화 15개·추가 15개·잔여 8개 해소·전국 mismatch 0; FULL_RELEASE NOT APPROVED |
| 배포·복구 | Sites 커밋·버전 추적·자동 테스트; 현재 custom 소유자 1명·익명 401 | 공개도메인·공개전환·복원훈련·자동 롤백 미완료 | P7→P8 | 별도 환경 복원·공개 smoke |
추가 제안 · 운영 완성도를 높이는 12개 우선 조치
모든 화면·원장·API에 SAMPLE / LIVE / PLANNED / STALE을 같은 enum으로 표시해 시안과 실자료를 혼동하지 않게 합니다.
검색·목록·달력·향후 지도가 같은 filter codec과 public_id를 사용해 결과 불일치와 중복 개발을 막습니다.
access mode를 바꾸기 전에 /admin·/mypage·/review·/preview·계획 원장과 API의 서버 권한·noindex·익명 응답을 자동 검사합니다.
운영자는 Sites SIWC·허용목록, 일반 회원은 별도 소비자 인증·객체 소유권으로 나눠 외곽 gate를 제품 권한으로 사용하지 않습니다.
outbox cursor·멱등 inbox·DLQ·replay를 먼저 연결하고 검색·달력·상담·지도를 같은 Court event에서 투영합니다.
접수번호 서버검증, 상태·배정·답변, outbox, 보존 만료·동의 철회·키 회전을 D1 운영 계약으로 묶습니다.
대표 호스트 하나에서 metadata·canonical·robots·sitemap·allowed origins·lastModified를 생성해 도메인 전환 분리를 막습니다.
수수료·VAT·계좌·약관·개인정보·지도 제3자 제공을 승인자·버전·시행일과 함께 관리합니다.
Court 원주소·정규주소·PNU·공급자 좌표·공개 좌표·정밀도·수동 승인 이력을 덮어쓰기 없이 분리하고 provider adapter를 둡니다.
bbox·feature 수·rate limit·server cluster·cache·quota를 계측하고 provider 장애에는 지도만 닫아 핵심 검색을 유지합니다.
버튼은 실제 동작·명시적 비활성·링크 중 하나여야 하며 현재 시안의 무동작 조작을 자동 검사해 단계별로 제거합니다.
commit·migration·권한·Court fixture·성능·접근성·운영 URL·롤백을 manifest로 남기고 운영자→회원→일부→전체 순서로 엽니다.
CRITICAL PATH
P0부터 P8까지 닫는 실행 로드맵
정본·권리·범위 기준선 고정
사실 출처 정본과 서비스 저장 원장을 분리하고 두인·GF 참고 범위와 종료조건을 먼저 고정합니다.
- 선행
- 없음
구현 작업
- 제이옥션 전용 테이블·migration·route·worker·공개 도메인 책임표와 source of truth를 이 저장소에 고정
- 신규 migration 순번과 SHA-256 ledger, rollback 조건을 Codex 자동검증으로 고정하고 파괴 변경만 DESTRUCTIVE_DOWNTIME 게이트 적용
- 대법원경매=PERMANENT_PRIMARY, 두인·GF=REFERENCE_SNAPSHOT, 제이옥션 PostgreSQL=TARGET_STORE lifecycle 고정
- 두인 65개 기능계약·75개 원본 표면을 target route·API·원천·인수조건에 연결하고 A/H/S/R 근거와 E2E 상태를 분리
- 세션 019eea6e…를 Court 생산자로 고정하고 outbox·cursor·service auth·DLQ/replay의 생산자/소비자 책임표 승인
- AuctionHub PostgreSQL/PostGIS를 제이옥션 내부 canonical·projection·enrichment 실행면으로 재정의하고 외부 공개 runtime은 검증 증거로만 분리
- Court·공식 공공 API source allowlist와 GF·두인 required/new write/fallback 0의 source sunset 원장 고정
- 학교알리미 등 외부 credential을 회전하고 0600 secret 한 곳 외 Git·HTML·URL·로그·보고서 원문 0 검사
- 민간 경매사이트 connector·자동로그인·credential·scheduler의 disable/revoke/delete/egress-deny 시점과 책임자 확정
- 사건 안정키·출처별 alias·canonical value status·수동 override 감사 규칙 승인
- WON-SEO-06 금지 fixture와 WON-SEO-08 source_event_key·중복·stale 상태 invariant를 Court schema 출시 차단조건으로 등록
단계 종료 조건
- 정본 DB·배포 SHA·migration ledger가 1개이며 사실 정본(Court)과 저장 원장(제이옥션)이 구분됨
- 65개 기능계약·75개 표면과 모든 공개 필드가 Court raw→canonical→event→API→화면→테스트로 역추적됨
대법원 파서 MVP·Raw·정규화
P2 화면보다 먼저 대법원 신규·변경 사건을 raw→canonical→projection까지 독립 갱신합니다.
- 선행
- P0
구현 작업
- 법원·날짜별 discovery, hot queue, 사건·물건·기일 상세 parser와 checkpoint/lease/DLQ를 최소 운영 단위로 구현
- source_system/raw_payload/source_record/file_object에 대법원 URL·취득시각·hash·parser/DOM version 메타 저장
- 현행 court_raw_payloads의 누락 열 source_url·fetched_at·http_status·parser_version·schema_version·rights/publication_status를 무손실 migration
- court_publication_outbox와 /internal/v1/court/changes·/evidence API를 추가해 실행 중 생산자를 중단 없이 연계
- 관리비·관공서·비교사례·배당·건축물·토지·학군·학교의 raw→normalized→canonical→publication schema bridge와 rollback을 additive migration으로 구현
- source run·checkpoint·watermark·projection revision·API freshness를 한 release ledger로 연결하고 정적 총계 대신 같은 snapshot 대사
- 법원 사건 안정키에 1회 legacy alias를 연결하되 valid_to 이후 legacy 값은 canonical 후보에서 제외
- present·unknown·none_confirmed·parsing_error·external_session_required·conflict·pending_review 상태를 필드 단위 적용
- canonical 모듈을 실제 ingest와 제이옥션 API에 등록하고 단일 route 계약으로 유지
- 검토 backlog와 법원 상세 공백을 위험도·공개영향 기준으로 분류하는 queue 구현
- WON-SEO-08 최신 검증 event 계산과 WON-SEO-10 publicId+content_version+transition_type IndexNow outbox를 기존 Court outbox에 병합
단계 종료 조건
- 두인·GF를 차단해도 Court 신규/기일변경 표본이 15분 이내 공개 projection까지 반영
- 대표 100건 원문↔정규값↔API lineage 100%, 정체성 오병합·민간값 자동승격 0건
검색·목록 워크벤치 통합
두인·GF의 장점을 참고해 만든 제이옥션 화면을 Court-sourced projection에만 연결합니다.
- 선행
- P1 Court ingest gate
구현 작업
- 사건/물건, 법원·지역 종속선택, 용도 계층, 상태·결과·유찰·기일·가격·면적·용도지역 필터를 event projection에 연결
- 특수조건 OR/AND/EXCLUDE, 저장검색, URL 직렬화, 예상건수, 초기화와 빈/오류/부분지연 상태 구현
- 안정 정렬·20/30/50/100건·페이지·PC 표/모바일 카드·선택보기·인쇄·엑셀·관심등록 구현
- 홈 10개 빠른검색 preset과 신규·예정·법원·일정·자동차·통계·전문가 화면을 공통 query schema로 연결
- 임의 검색결과는 noindex,follow로 두고 법원·지역·용도·기일 중 고유 설명과 실물건이 있는 landing만 색인
- 목록 카드·표·허브에 설명적인 SSR <a href>를 넣어 모든 공개 상세을 3단계 이내 발견 가능하게 연결
- WON-SEO-02 결정적 메타·WON-SEO-03 관련문서·WON-SEO-09 단일 HTTPS publication identity를 같은 PUBLIC_INDEX content version에서 생성
단계 종료 조건
- 고정 검색 50개에서 결과·facet·정렬·페이지·내보내기 대사 일치
- 320·390·768·1440px에서 가로 넘침·잘린 조작·12px 미만 본문 0건
상세 증거실·지도·문서 완성
판단 근거를 한 화면에서 확인하고 각 값의 출처와 최신성을 검증할 수 있게 합니다.
- 선행
- P1, P2
구현 작업
- 관련물건·사건/법원·기일이력·목록/감정·현황·임차인·등기/소멸·관련사건·실거래·역/관공서 projection 연결
- 모든 Court 공개값 옆에 출처·조회시각·원문 링크·SHA-256 요약·parser version·정정 이력을 표시하고 원문 증거 drawer 제공
- 사진, 사건/기일/송달, 현황조사, 부동산표시, 감정서, 토지/건물등기, 인근진행·매각·공매 자료 뷰어 구현
- PUBLIC_INDEX와 MEMBER_DETAIL projection을 스키마·API·cache key부터 분리하고 검색로봇/비회원에게 같은 공개 SSR을 제공
- 회원값을 초기 HTML·RSC·JSON-LD·prefetch에 넣지 않고 로그인 확인 뒤 private,no-store API와 만료 서명 URL로만 전달
- 예상 배당순서·입찰표·최우선변제 계산은 입력값·기준일·면책문구·계산 버전과 함께 저장
- 9개 canonical enrichment route를 제이옥션 service-authenticated origin·same-origin BFF로 연결하고 내부 UUID·PNU·원좌표·raw path·storage key를 제거
- 건축물대장·토지/공시가격/토지이용·관공서·공식학구/인접학교·관리비/관리사무소·비교사례를 상세 12섹션의 ready/empty/not-applicable/pending/stale/failed 상태로 구현
- 회원 배당 simulation은 공식 배당표와 분리하고 재원·비용·채권·미수치화 사유·입력·산식 버전을 private,no-store로 저장
- 지도·로드뷰·인근물건, 관심 분류·우선순위·메모·댓글·업로드·공유·선택 인쇄를 권한별 구현
- 600px 고정 내부 표를 모바일 요약카드+상세 펼침으로 교체하고 확대 제한 viewport 제거
- WON-SEO-01 핵심 사실표와 WON-SEO-07 사건·대상목록·기일결과·건축물 4종 SSR 표 팩을 실물건 100건 projection과 대사
단계 종료 조건
- 상세 100건의 필수값·사진·문서·기일·임차·등기 대조 통과
- 문서 공개등급·마스킹 위반 0건, 깨진 미디어/외부세션에 안전한 대체 상태 제공
회원·개인화·결제 경계
두인의 유용한 개인화 흐름을 참고하되 경매 알림은 Court event만 소비합니다.
- 선행
- P1, P3
구현 작업
- 가입·로그인·복구·세션회전·rate limit과 관심 분류·최근열람·저장검색·캘린더·알림 구현
- 가입 CTA의 내부 return_to·section·filter를 서명/allowlist 검증하고 가입 뒤 동일 물건 잠금 위치로 복귀
- 회원 상세 API·파일에서 401/403·객체 소유권·등급·권리상태를 서버 재검증하고 익명 누출 회귀테스트를 고정
- 프로필·비밀번호·휴대폰 검증·주소·선호·마케팅 동의를 목적·보존기간·철회 이력과 함께 관리
- 지역·기간형 이용권, 쿠폰, 결제·환불·영수증은 PG webhook 멱등성과 금액 원장 대사 후 활성화
- AUTH 조사에서 본 개인 계정 값은 설계·fixture·로그에 저장하지 않고 테스트 전용 계정만 사용
단계 종료 조건
- 회원 격리·CSRF·세션고정·결제 중복·webhook 재시도 E2E 통과
- 실사용자 개인정보·비밀번호·세션·결제값 fixture/log 포함 0건
콘텐츠·고객·상담·관리자
게시판·학습자료부터 CRM·운영감사까지 콘텐츠와 업무 흐름을 한 권한 모델로 완성합니다.
- 선행
- P1, P4
구현 작업
- 공지·FAQ·칼럼·대출·정책·뉴스, 용어·절차·서식·관할·관련사이트를 CMS와 검색·첨부 계약에 연결
- 고객 검색·분류·배분·메모·PII 열람, 상담 상태·담당·SLA·답변·알림을 append-only 이력으로 구현
- 법원기일 읽기전용과 직원일정 편집형 달력, 회원·운영자·등급·SMS·감사로그·반출 권한 분리
- 서비스안내·개인정보·이메일수집거부·사이트맵과 403/404/500/점검 화면을 실제 정책에 연결
단계 종료 조건
- 회원·상담원·관리자 권한 우회 0건
- PII 원문열람·배분·상태변경·다운로드가 사유와 함께 100% 감사됨
대법원 준실시간 운영·드리프트 복구
P1 Court 파서를 5–15분 목표의 장기 운영 파이프라인으로 강화하고 민간 경매사이트 의존을 0으로 만듭니다.
- 선행
- P0, P1
구현 작업
- 당일/향후 7일 5분, 신건/변경 15분, 진행사건 1시간, 전 법원 1일 cadence를 adaptive throttle로 오케스트레이션
- 대법원 ingest→raw→diff→canonical→projection→cache invalidation을 run_id·배포 SHA·checkpoint로 연결
- 신건·사건·물건·기일·상태·결과·문서·사진 event를 outbox cursor로 전달하고 중복·역순·누락·replay를 자동 검증
- 두인·GF scheduler·connector·credential이 존재하지 않음을 검사하고 source_record 신규 write와 outbound 요청을 계측
- 429/403/CAPTCHA/DOM 변경 시 우회하지 않고 자동 중단·격리·DLQ·백오프·경보하고 파괴적 재시작만 DESTRUCTIVE_DOWNTIME 승인
- 누락 법원·건수 급변·필수 필드·staleness·검토 backlog·파일 hash 변경 경보와 품질 대시보드 구현
- GF required timer·두인 watch·신규 민간 canonical write를 종료하고 Court·공식 공공 원천만 required인 freshness guard로 교체
- 15개 공공 timer의 enabled/active·next trigger·last success·checkpoint·DB/API watermark와 5분 contract guard 자가복구를 같은 운영 대시보드에서 검증
- 문서 178건 canonical·인증 후속 1,076건·매각명세서 source pending 8,862건을 availability 상태와 재가용 감시로 운영하고 다른 물건 문서 대체 0을 보장
단계 종료 조건
- 7일 shadow와 30일 Court-only burn-in에서 중복·상태전이 위반·민간 outbound·legacy 신규 write 0
- Court 장애 시 마지막 정상판+stale 표시를 유지하고 민간 fallback 호출 0
보안·접근성·SEO·복구 출시 게이트
공개 전환 전에 개인정보, 검색유입, 모바일 품질, 복원 가능성을 증거로 닫습니다.
- 선행
- P2–P6
구현 작업
- HTTPS·대표호스트·301·canonical·분할 sitemap·structured data·검색결과/회원/관리자 noindex 적용
- 공개 상세 200+self canonical·무효 ID 404/410·이전 ID 1:1 301·장애 503와 soft-404 0건을 검증
- Google·Naver 기준으로 봇/비회원 동등성, 내부링크, 공개 구조화데이터, 회원 payload 누출 0건을 자동 검증
- CSP/HSTS/보안헤더·rate limit·비밀회전·백업·복구·침해/수집중단 훈련 수행
- WCAG 키보드·초점·확대, 320–1440 반응형, 브라우저, API p95와 대용량 표·문서 성능 검증
- 공개 refresh 14회 실패와 mobile 404를 제거하고 ingest→canonical→render→public URL smoke 트랜잭션 구현
- WON-SEO-04 조건부 RSS·05 SERP 코호트·06 회귀팩·09 UA/alias 행렬·10 조건부 IndexNow를 한 publication gate에서 검증
단계 종료 조건
- 별도 환경 DB·파일·설정 복원 후 핵심 E2E 성공
- P0/P1 보안·critical 접근성·색인/404·공개 release smoke 오류 0건
병행운영·점진전환·완료판정
내부 운영자부터 공개 트래픽까지 단계적으로 옮기고 모든 계약을 증거 묶음으로 닫습니다.
- 선행
- P7
구현 작업
- 운영자→테스트회원→일부 공개→전체 공개 순으로 feature flag 전환하고 구 시스템은 읽기전용 유지
- 검색·상세·수집·회원·결제·상담·알림·SEO·404를 일일 대사하고 SLO/오류예산 초과 시 자동 롤백
- 65개 두인 기능계약·75개 표면과 GF 계약 화면의 E2E evidence, 데이터 lineage, 권리표, 복구 결과를 release bundle로 보존
- 두인·GF worker·scheduler·credential·DNS/egress 0건을 확인하고 참고 snapshot 보존기간·삭제일 승인
- 운영자 인수인계·장애 대응·자료 정정·출처 문의·비밀 회전·유지보수 SLA 승인
- WON-SEO-05 Search Advisor·익명 SERP·Yeti 로그를 4주/8주 대사하고 WON-SEO-10 수신 후 재수집 시간을 별도 KPI로 보존
단계 종료 조건
- 22개 완료 게이트와 65개 기능계약·WON-SEO-01~10 전부 통과, 미해결 P0/P1 0건
- 구·민간 사이트 접근 없이도 Court 신규·변경·결과와 전체 제품 기능이 정상
PAGE TO API CONTRACT
25개 제품 화면군을 실제 동작으로 완성
| 화면군 | 권한 | 완성할 실제 동작 | 재사용·보강 API |
|---|---|---|---|
| 메인·빠른검색 | PUBLIC | 추천·오늘신규·반값·장기유찰 등 10개 preset | /api/v1/lots · /stats · saved query schema |
| 통합 상세검색 | PUBLIC | 사건·주소·법원·용도·가격·면적·특수조건 조합 | /api/v1/search/options · /facets · /estimate-count |
| 검색결과 워크벤치 | PUBLIC | noindex,follow · 정렬·20/30/50/100·선택보기·인쇄·엑셀·관심 | /api/v1/lots · /exports · /member/favorites |
| 법원·지역·역세권 | PUBLIC | 종속 필터·역세권, 지도분할은 M5 이후 | /api/v1/search/facets · /stations · 예정 /api/v1/lots/map |
| 자동차·공장·특수물건 | PUBLIC | 유형별 필드와 특수조건 | /lots?asset_type · canonical traits |
| 기일·신건·예정 | PUBLIC | 날짜·법원별 일정과 상태전이 | /sale-events · /calendar-projection |
| 통계·전문가·샘플 | PUBLIC | 집계 근거·콘텐츠·상담 전환 | /stats · /content · /consulting-leads |
| 공매 | PUBLIC | SAMPLE·NOINDEX에서 온비드 공식 검색·상세·입찰 이동으로 게이트 승격 | 15157768 reference + Onbid 목록/상세/입찰 adapter |
| 물건상세 | MIXED | 공개 색인요약 SSR + 가입 후 권리·임차·문서·전체이력 | /lots/{public_id}/public · /member/lots/{public_id} |
| 사진·문서 증거실 | MIXED | 사진·송달·현황·감정·등기·인근사례 | /lots/{id}/files · evidence policy |
| 공공보강 요약 | PUBLIC | 건축물·토지·관공서·학교·관리비·비교사례 coverage와 같은 snapshot freshness | /lots/{public_id}/public-data · same-origin BFF |
| 건축물·토지대장 | MIXED | 공개 핵심값 + 회원 전체 대장·공시가격·토지이용 이력 | /lots/{public_id}/building-ledger · /land-ledger |
| 관공서·학군·학교 | PUBLIC | 공식 관할기관·공식 학구 배정·인접 학교·학교 교육지표 | /lots/{publicId}/public-offices · /school-zone · /schools/{schoolPublicId} |
| 관리비·비교사례 | MIXED | 확정 금액/연락처 분리·경매/RTMS 범위와 표본·fallback 근거 | /lots/{publicId}/maintenance-fee · /comparables |
| 지도·인근물건 | MIXED | PLANNED: 공개등급 좌표·역·관공서·진행/매각/공매 | 예정 /api/v1/lots/map · /lots/{publicId}/nearby · provider adapter |
| 입찰·배당 도구 | MEMBER | 입찰표·최우선변제·예상배당 · 공식 배당표와 추정 simulation 분리 | /lots/{publicId}/distribution-simulation · /calculators · versioned assumptions |
| 로그인·가입·복구 | MEMBER | 세션·검증·안전한 복귀 | /api/v1/member/* |
| 관심·저장검색·최근열람 | MEMBER | 분류·우선순위·변경알림 | /favorites · /saved-searches · /recent-views |
| 개인 캘린더 | MEMBER | 관심 기일과 개인 일정 분리 | /member/calendar · /sale-events |
| 이용권·결제·쿠폰 | MEMBER | 지역/기간 상품·결제내역·환불 | /plans · /payments · /coupons · PG webhook |
| 프로필·동의 | MEMBER | 비밀번호·연락처검증·주소·선호·동의이력 | /profile · /consents |
| 게시판·학습·서식 | PUBLIC | 공지·FAQ·칼럼·정책·용어·절차·다운로드 | /content · /attachments |
| 사이트 정책·오류 | PUBLIC | 안내·개인정보·거부·사이트맵·403/404/500 | static policy · incident status |
| 고객·상담 관리자 | ADMIN | 배분·메모·PII·SLA·답변·알림 | /admin/customers · /consulting-leads |
| 운영·품질 관리자 | ADMIN | 수집·검토큐·lineage·감사·release | /admin/operations · /quality · /audit |
화면 계약 밖에서 함께 완성할 운영 범위
DEFINITION OF DONE
22개 게이트가 전부 닫혀야 “완료”
두인 65개 기능계약·75개 표면과 GF/법원/온비드 계약이 route·API·원천·E2E에 100% 연결
공개 필드의 정본/보강/금지·조회일·원문·권리·lineage 100%
가상 운영자료 0건, conflict/pending_review를 확정값으로 노출 0건
공개·회원·관리자·API·파일의 정상/빈/오류/권한 route 계약 100%
사건·물건·기일·상태·결과·원문 증거와 REV21의 12개 상세 섹션 대사 통과
모든 링크·버튼·폼·필터·저장·결제·내보내기가 API/E2E로 검증
Court 5–15분 목표·일일 전체대사, 중복 0, 멱등 재실행, 부분완료 범위 정확 보고
9개 canonical route의 raw→normalized→canonical→PUBLIC/MEMBER lineage와 실 lot 100건 값·null·단위·중복 대사 100%
connector별 enabled/active·next trigger·last success·checkpoint·DB/API watermark·revision을 대사하고 LKG/stale 오판 0
GF·두인 required timer·신규 canonical write·운영 fallback·브라우저/공개 runtime 직접 호출 0
PointAuction 연결 및 두인·GF 자동로그인·scheduler·신규 write·fallback·outbound 0, Court-only 30일 통과
C2 source sunset 완료 뒤 새 기준선 0/30부터 Court 신규·변경·결과·장애복구와 민간 outbound 0을 30일 연속 증명
PUBLIC/MEMBER/ADMIN과 외부세션 경계의 서버 권한 우회 0건
PG sandbox 주문·승인·중복웹훅·취소·환불·이용권 원장 대사 통과
마스킹·열람사유·동의·보존·반출·비밀 로그 감사 100%
출처표시·원문 링크·공개등급·삭제/제한 요청과 파일 권리정책 100%
320·390·768·1024·1440px에서 표·필터·상세·지도·결제 핵심 흐름 조작 가능
320–1440px 넘침 0, axe critical 0, 핵심 API/화면 p95 예산 통과
대표호스트·301·canonical·sitemap·structured data·noindex·404 오류 0건
WON-SEO-01~10과 100건 PUBLIC_INDEX 표·event·publication·4주/8주 증거면 대사 통과
P0~P8와 열린 작업 100%에 Codex 실행·자동증거·C trigger·rollback을 지정하고 사용자 수동지시 0건
별도 환경 복원과 공개 URL smoke 실패 자동 롤백 후 핵심 E2E 성공