종합부동산웹앱 워치리스트 투자지표 비교 구현
질의 원문
1. 모든 과정은 문서 작업을 기본으로 해주고 그 모든 문서는 현황판에서 모두 확인이 가능하도록 해줘.
2. 다음 단계로 진행해줘.
수집 경로와 시점
- 수집시점: 2026-08-11 14:48 KST
- 기준 설계:
docs/plans/2026-08-11-watchlist-investment-metrics-design.mddocs/plans/2026-08-11-watchlist-investment-metrics.md- 수집 경로: 로컬 저장소 코드, 임시 테스트 프로젝트 루트, Node 내장 테스트, Playwright Chromium headless
데이터 등급
- 내부 구현 데이터: A
- 테스트 시드 데이터: C
- 외부 부동산 원본 데이터: 수집하지 않음
구현 결과
WatchlistItem에 선택 숫자 필드current_price,jeonse_price,expected_contribution을 추가했다./api/watchlist생성·수정 payload에서 세 필드를 보존한다.- 새 필드는 미입력과 명시 0을 구분하기 위해
null을 허용한다. - 워치리스트 추가 폼에 현재가, 전세가, 예상 분담금 입력을 추가했다.
- 워치리스트 카드에 세 필드를
data-watch-*속성으로 렌더링한다. - 비교 패널에 다음 지표를 추가했다.
- 현재가
- 목표가 괴리
- 전세가율
- 예상 분담금
- 추정 총투입금
watchlist_logic.js가 명시 입력값만 기반으로 파생 지표를 계산하고, 필요한 값이 없으면미정으로 표시한다.- 리뷰 지적에 따라 예상 분담금이 미입력인 경우 추정 총투입금을 계산하지 않고
미정으로 표시하도록 보강했다. - 새 분석 문서가 늘어나도 모든 과정 문서가 현황판에서 확인되도록 투자 현황판의 분석 카드
limit=30제한을 제거했다.
TDD 기록
- RED:
test_watchlist_api_preserves_investment_metric_fields→current_price키 부재로 실패 - GREEN: 저장 모델과 API mapping 확장 후 동일 테스트 통과
- RED:
test_watchlist_page_renders_investment_metric_inputs_and_attrs→ 폼 입력 부재로 실패 - GREEN: 템플릿과 form payload 확장 후 동일 테스트 통과
- RED:
node --test tests/webapp_watchlist_logic.test.js→compareData().currentPrice부재로 실패 - GREEN: JS 계산 helper와 비교 컬럼 추가 후 Node 테스트 통과
- RED: Playwright E2E에서
62.5%기대 → fixture에 명시 지표가 없어미정으로 실패 - GREEN: E2E fixture에 명시 지표를 넣은 뒤 브라우저 비교 패널 검증 통과
- RED: 예상 분담금 미입력 후보가 총투입금을 계산하는 문제를 Node/API 테스트로 재현
- GREEN: nullable 저장값과 JS presence flag 추가 후 미입력 값은
미정으로 유지
검증
python -m pytest tests/test_webapp_watchlist_e2e.py tests/test_webapp_static_js.py tests/test_webapp_watchlist.py tests/test_webapp_pipeline.py -q→ 52 passedpython -m pytest tests/test_webapp_watchlist_e2e.py tests/test_webapp_static_js.py tests/test_webapp_watchlist.py tests/test_webapp_pipeline.py tests/test_investment_board.py -q→ 60 passedpython -m pytest -q→ 235 passednode --test tests/webapp_watchlist_logic.test.js→ 5 passednode --check src/realestate/webapp/static/app.js→ 통과node --check src/realestate/webapp/static/watchlist_logic.js→ 통과- 현황판 회귀:
test_investment_board_includes_dynamic_analysis_cards→ 1 passed python -m realestate.cli invest-board→reports/investment_board.html재생성git diff --check→ whitespace error 없음(LF→CRLF 안내만 출력)
가정
- 현재가, 전세가, 예상 분담금은 사용자가 직접 입력하거나 상위 API가 명시적으로 넘긴 값이다.
- 추정 총투입금은
현재가 - 전세가 + 예상 분담금의 단순 스크리닝 계산이다. - 전세가율은
전세가 / 현재가로 계산한다.
한계
- 실거래, 네이버 매물, 국토부, 경매 원본을 새로 확인하지 않았다.
- 계산값은 취득세, 중개보수, 대출 조건, DSR, 보증보험 가능성, 임차인 안전성, 재개발 권리관계 원본 확인을 반영하지 않는다.
- 원본 미확인 수치를 사실처럼 쓰지 않기 위해, 값이 없으면 자동 추정하지 않고
미정으로 둔다.
다음 결정
- 다음 단계는 파이프라인 보드에서 워치리스트 후보가 연결된 문서만 필터링하거나
/watchlist에source_doc_id필터를 넘기는 흐름을 검토한다. - 이후 실데이터 수집 API를 연결할 때는 데이터 등급, 수집시점, 원본 확인 여부를 별도 필드로 붙인다.
원문 Markdown: docs/analysis/2026-08-11-종합부동산웹앱-워치리스트-투자지표비교구현.md