종합부동산웹앱 6단계 경매·정비사업 원천 연결 구현
질의 원문
다음 단계 진행해줘
수집 경로와 시점
- 수집시점: 2026-08-11 23:39 KST
- 확인·수정 파일:
docs/plans/2026-08-11-watchlist-auction-redev-source-design.mddocs/plans/2026-08-11-watchlist-auction-redev-source.mdsrc/realestate/webapp/metric_collector.pysrc/realestate/webapp/watchlist.pysrc/realestate/webapp/templates/watchlist.htmlsrc/realestate/webapp/static/app.jssrc/realestate/webapp/static/app.csstests/test_webapp_metric_collector.pytests/test_webapp_watchlist.py
데이터 등급
| 항목 | 등급 | 설명 |
|---|---|---|
| 법원경매 최저매각가 | 1차/법원원문 경유 | courtauction.fetch_detail() 상세 응답을 auction.parser.build_case()로 파싱 |
| 법원경매 권리·임차인 | 원본 미확인 | 등기사항증명서와 임차인 현황은 자동 수집하지 않음 |
| 정비사업 식별자 | 사용자 입력/원문 링크 | redev_project_no, redev_zone_name, redev_source_url 보존 |
| 정비사업 단계·분담금 | 미확인 | 공식 수집기가 없어 자동 갱신하지 않음 |
구현 내용
WatchlistMetricCollector에auction_detail_func주입 지점을 추가했다.source_refs.court_case_no가 있으면 네이버 단지 수집보다 법원경매 상세 수집을 우선한다.court_code와court_goods_no는 필수로 두고, 프로젝트의COURT_CODES별칭을 지원한다. 물건번호가 없으면 임의로 1번 물건을 조회하지 않는다.- 법원 상세 응답에 실제 최저매각가 필드가 없으면 감정가로 대체하지 않고
SourceUnavailable로 실패한다. - 법원 상세 파싱 결과의
min_bid_price만current_price로 저장한다. - 법원 갱신값에는
metric_sources.current_price를 붙이며,original_verified=false로 둔다. source_refs허용 키에redev_project_no,redev_zone_name,redev_source_url을 추가했다.redev_source_url은http://또는https://URL만 저장한다.- 워치리스트 추가 폼과 후보 카드에 경매·정비사업 원천 식별자를 표시한다.
action_flags_for_item()에 경매 원본 재확인, 정비사업 권리산정 확인, 정비 원문 확인 플래그를 추가했다.
설계 결정
- 경매 후보의
current_price는 법원경매 최저매각가로 해석한다. - 경매 사건번호만 있고 물건번호가 없으면 갱신하지 않는다. 여러 물건 사건에서 잘못된 물건 가격을 저장할 수 있기 때문이다.
- 법원 상세에서 감정가가 있더라도 최저매각가 필드가 없으면 갱신 실패로 처리한다. 감정가를 현재가처럼 쓰면 입찰 판단이 왜곡될 수 있기 때문이다.
- 법원경매 원천 경유 수집도 사용자의 직접 원본 확인을 대체하지 않는다. 그래서 원본 확인 플래그는 계속 남긴다.
- 정비사업은 이번 단계에서 숫자 갱신 없이 식별자와 확인 플래그만 추가했다.
가정
- 법원경매 상세 수집은 CDP 실브라우저 연결이 가능한 환경에서만 동작한다.
- 워치리스트 후보가
court_case_no를 갖고 있으면 경매 후보로 보고 최저매각가 갱신을 우선한다. - 정비사업 원문 URL은 사용자가 입력하거나 향후 공식 수집기가 채운다.
한계
- 경매 자동 갱신은 최저매각가까지만이다. 말소기준권리, 선순위 임차인, 가처분·가등기, 유치권 성립 여부는 확정하지 않는다.
- 경매 최저매각가가 갱신되어도 낙찰 가능가, 총인수금액, 명도 리스크는 별도 원본 확인이 필요하다.
- 정비사업 단계·권리산정일·분담금은 아직 자동 수집하지 않는다.
- 정비 원문 URL이 있어도 대상 물건의 정확한 구역 편입과 조합원 지위는 사용자가 원문으로 확인해야 한다.
검증
- RED: 경매 상세 갱신 테스트 3건이
auction_detail_func미구현으로 실패하는 것을 확인했다. - RED: 정비사업 source refs와 경매·정비 플래그 테스트 3건이 미구현 상태에서 실패하는 것을 확인했다.
- GREEN:
python -m pytest tests/test_webapp_metric_collector.py::test_metric_collector_refreshes_current_price_from_court_detail tests/test_webapp_metric_collector.py::test_metric_collector_requires_court_code_for_court_refresh tests/test_webapp_metric_collector.py::test_metric_collector_rejects_court_detail_without_min_bid -q-> 3 passed - GREEN:
python -m pytest tests/test_webapp_watchlist.py::test_watchlist_api_preserves_auction_and_redev_source_refs tests/test_webapp_watchlist.py::test_watchlist_page_renders_auction_and_redev_source_ref_inputs_and_attrs tests/test_webapp_watchlist.py::test_watchlist_action_flags_identify_auction_and_redev_source_checks -q-> 3 passed - 코드 리뷰 보강 RED:
court_goods_no필수화, unsaferedev_source_url제거,data_go_lawd_cd단독 정비 플래그 오탐 방지 테스트 3건이 실패하는 것을 확인했다. - 코드 리뷰 보강 GREEN: 해당 테스트 3건 통과
- Focused:
python -m pytest tests/test_webapp_metric_collector.py tests/test_webapp_watchlist.py tests/test_webapp_static_js.py -q-> 63 passed - Focused+E2E+현황판:
python -m pytest tests/test_webapp_metric_collector.py tests/test_webapp_watchlist.py tests/test_webapp_pipeline.py tests/test_webapp_static_js.py tests/test_webapp_watchlist_e2e.py tests/test_investment_board.py -q-> 95 passed, 2 warnings - JS 문법:
node --check src/realestate/webapp/static/app.js-> 통과 - Node:
node --test tests/webapp_watchlist_logic.test.js-> 6 passed - 전체 테스트:
python -m pytest -q-> 270 passed, 2 warnings - whitespace:
git diff --check-> whitespace error 없음(CRLF 경고만 출력)
다음 과제
- 정비사업 정보몽땅·지자체 공식 페이지를 실제 구조화 수집기로 연결한다.
- 경매 원본 확인 체크리스트를 워치리스트 후보별 다음 행동으로 자동 제안한다.