종합부동산웹앱 AI 분석 워크벤치 후보 등록 흐름 구현
질의 원문
계속 진행해
수집 경로와 시점
- 수집·구현시점: 2026-08-12 14:53:35 +09:00
- 확인 경로: 로컬 저장소
src/realestate/webapp/analyst.py,src/realestate/webapp/orchestrator.py,src/realestate/webapp/templates/index.html,src/realestate/webapp/static/app.js,src/realestate/webapp/static/app.css - 직전 맥락: AI 투자분석 워크벤치가 원천 실행 결과로
watchlist_candidates를 반환하므로, 사용자가 후보를 확인하고 워치리스트에 등록하는 승인 흐름이 필요했다.
데이터 등급
| 항목 | 등급 | 비고 |
|---|---|---|
| 사용자 지시 | 1차 사용자 입력 | 본 대화에서 직접 제공 |
| 구현 코드 | 로컬 코드 원본 | 자연어 가격조건 추론, 실행 후보 정규화, 후보 등록 UI |
| 테스트 executor 결과 | 테스트 대역 | 네트워크 없이 후보 반환·정규화·API 응답 계약 검증 |
| 실제 원천 수집값 | 미수집 | 이번 검증은 후보 등록 흐름 구현이며, 실제 서울/전국 정비사업 파일 다운로드 검증은 포함하지 않음 |
구현 내용
build_analysis_plan()이 “노원 재건축 5억 이하 찾아줘”처럼 질의에 가격조건이 들어 있는 경우 max_price=500,000,000을 추론해 계획 제약에 넣도록 했다. 따라서 화면 입력값이 없어도 질의 자체만으로 목적과 목표가가 맞춰진다.
run_analysis_plan()은 executor가 반환한 watchlist_candidates를 워치리스트 등록 가능한 payload로 정규화한다. 후보명, 지역, 유형, 목표가, 점수, 근거, source_refs를 정리하고, 정비사업 후보는 redev_project_no가 있으면 redev_zone_name을 보강한다.
홈 화면 AI 투자분석 워크벤치에 실행 후보 영역을 추가했다. 분석 실행 후 후보가 있으면 후보명, 지역·유형, 목표가, 점수, 원천 식별자를 보여주고, 사용자가 워치리스트 등록 버튼으로 기존 /api/watchlist에 바로 저장할 수 있다.
가정
- “계속 진행”은 직전 문서의 다음 단계였던
watchlist_candidates승인·저장 흐름을 뜻한다고 해석했다. - AI 실행 후보는 자동 매수 추천이 아니라, 사용자가 후속 확인을 위해 워치리스트에 올릴 수 있는 추적 대상이다.
- 후보 목표가는 사용자 질의나 명시 제약에서 나온 가격조건이며, 실제 현재가 또는 확정 매수가가 아니다.
한계·미확인
- 실행 후보 등록은 원천 식별자와 목표가를 저장할 뿐, 권리산정일·조합원 지위·분담금·현재 시세를 확정하지 않는다.
naver_complex,molit_trade,building_ledger같은 원천은 아직 후보별 식별자 보강이 있어야 자동 실행된다.- 실제 API 호출은 테스트에서 수행하지 않았다. 네트워크·키·원천 파일 상태에 따른 실패는 실행 결과의
source_status에 남기는 설계를 유지한다. - 현재 planner는 deterministic 규칙 기반이며, 외부 LLM API로 계획을 생성하지 않는다.
검증
- RED:
$env:PYTHONPATH='src'; python -m pytest tests/test_webapp_analyst.py::test_build_analysis_plan_infers_price_constraint_from_query tests/test_webapp_analyst.py::test_run_analysis_plan_enriches_watchlist_candidates_for_direct_registration tests/test_webapp_app.py::test_homepage_prioritizes_ai_investment_workbench tests/test_webapp_app.py::test_analyst_run_endpoint_uses_injected_executor_when_enabled -q-> 4 failed - GREEN:
$env:PYTHONPATH='src'; python -m pytest tests/test_webapp_analyst.py::test_build_analysis_plan_infers_price_constraint_from_query tests/test_webapp_analyst.py::test_run_analysis_plan_enriches_watchlist_candidates_for_direct_registration tests/test_webapp_app.py::test_homepage_prioritizes_ai_investment_workbench tests/test_webapp_app.py::test_analyst_run_endpoint_uses_injected_executor_when_enabled -q-> 4 passed - Focused:
$env:PYTHONPATH='src'; python -m pytest tests/test_webapp_analyst.py tests/test_webapp_app.py tests/test_webapp_watchlist.py -q-> 75 passed - JS 문법:
node --check src/realestate/webapp/static/app.js-> 통과
다음 단계
- planner가
source_refs입력을 받아 네이버 단지번호, 법원 사건번호, 정비사업 원문 URL이 있을 때 해당 수집기를 실행한다. - 분석 결과 저장 시 방금 등록한 워치리스트 후보와 분석 문서를 연결하는 후속 자동화 여부를 검토한다.
- 후보별 원천 실행 결과를 카드형 요약으로 정리해 현재가·전세가·예상 분담금 입력/갱신 흐름으로 확장한다.