소개
안녕하세요, 공인중개사이자 부동산 업무에 AI를 접목하고 있는 도시아재 입니다.
지난 주에 이어 이번에는 텔레그램의 OpenClaw 봇(콜라🦞)에게 "마포구 시세 알려줘"라고 말하면, 아파트 뿐만 아니라 다양한 주거형 부동산 유형, 빌라·단독주택·오피스텔까지 국토교통부 실거래가를 자동으로 조회하고, AI가 분석 리포트를 생성하는 시스템을 만들어 보았습니다.
솔직히 말씀드리면, 처음부터 순탄하지는 않았습니다.
새벽에 집 PC에서 테스트했을 때는 잘 됐습니다.(아파트에 한정된 시나리오) "성공이다!" 하고 사례글까지 썼습니다. 그런데 다음 날 회사에서 텔레그램으로 해보니 — 아예 작동하지 않았습니다.
거기서 포기하지 않고 Claude Code와 함께 원 인을 추적하고, 디버깅하고, 구조를 바꾸는 과정을 거치면서 오히려 처음보다 훨씬 좋은 시스템이 탄생했습니다. 아파트만 되던 것이 4종 부동산 전체로 확장됐고, 어디서든 텔레그램으로 작동하는 시스템이 됐습니다.(아파트, 단독/다가구, 다세대(빌라), 오피스텔, 상업용 건물 )
이 글은 "실패를 통한 확장의 과정" 사례입니다.
---
진행 방법
🏗️ 전체 아키텍처
| 역할 | 담당 |
|------|------|
| Claude Code | n8n 워크플로우 JSON 생성, API 코드 작성, 디버깅 파트너 |
| n8n | 국토부 API 8개 순차 호출 + 데이터 가공. API 키는 여기만 보관 |
| OpenClaw(콜라🦞) | 텔레그램에서 사용자와 대화, 데이터 분석, 리포트 작성 |
> 📸 [이미지 삽입 위치 1: 최종 v5 워크플로우 전체 캔버스 — 12개 노드가 일렬로 연결된 화면]
---
배경: 새벽에는 됐는데, 왜 안 됐나
새벽에 만든 시스템의 구조는 이랬습니다:
- n8n Webhook (POST 방식) → 실거래가 조회 → 전월세 조회 → 합산
- 콜라가 PowerShell로 직접 POST 요청을 보내서 테스트 → 성공!
그런데 퇴근 후 집에서 텔레그램으로 "송파구 시세 알려줘"를 보내니 — 콜라가 n8n을 호출하지 않고 일반 지식으로 대답했습니다.
n8n Executions를 확인하니 새 실행 기록이 아예 없었습니다. 새벽 2시 것이 마지막.
> 📸 [이미지 삽입 위치 2: n8n Executions 화면 — 새벽 기록만 있고 오후 기록이 없는 상태]
콜라에게 "왜 웹훅을 안 불러?"라고 물었더니 이런 진단이 왔습니다:
> "URL은 살아 있습니다. 하지만 제가 사용할 수 있는 웹 접근 도구는 GET이고, 해당 웹훅은 POST 전용입니다. 현재 이 세션에서는 직접 POST body를 전송하는 전용 연결이 없습니다."
핵심 원인: 새벽에는 콜라가 노트북 위에서 PowerShell을 직접 실행해서 POST를 보냈고, 텔레그램 채팅 환경에서는 단순 URL 접속(GET)만 가능했던 것입니다. 같은 노트북에서 돌아가는데도, 콜라가 어떤 도구로 호출하느냐에 따라 가능/불가능이 달랐습니다.
---
1단계: POST → GET 전환 (그래도 안 됨)
Claude Code와 함께 Webhook을 POST에서 GET으로 변경했습니다. 그리고 콜라에게 query parameter로 호출하라고 알려줬습니다:
https://n8n.shinhwa.xyz/webhook/realestate-analysis?query=송파구&action=both&year_month=202603콜라가 호출했지만 응답이:
json
{"error": "지역을 찾을 수 없습니다.", "query": ""}query parameter가 빈 값으로 들어왔습니다. URL 인코딩 문제인가 해서 %EC%86%A1%ED%8C%8C%EA%B5%AC로 인코딩해서 보내봤지만 — 여전히 빈 값.
그런데 제가 curl로 같은 URL을 호출하면 정상 작동했습니다. 콜라의 텔레그램 웹 접근 도구가 query parameter를 제대로 전달하지 못하는 것이었습니다.
---
2단계: 디버그 한 줄이 전환점
추측으로 코드를 고치다가 시간만 낭비하고 있었습니다. Claude Code가 제안한 디버그 방법:
> "n8n이 실제로 뭘 받는지 눈으로 봅시다."
지역코드 변환 노드의 코드를 이 한 줄로 교체했습니다:
javascript
// 디버그: n8n이 받은 전 체 데이터 구조 확인
return { json: $input.item.json };이걸로 n8n이 수신한 원본 데이터를 그대로 돌려받았습니다:
json
{
"params": { "region": "송파구" }, ← path parameter는 여기에!
"query": {}, ← query parameter는 비어있음!
"body": {} ← body도 비어있음
}> 📸 [이미지 삽입 위치 3: 디버그 결과 — params.region에 "송파구"가 들어있는 화면]
path parameter만 작동한다는 걸 확인! 이 한 줄이 3시간의 삽질을 30초로 줄여줬습니다.
> 💡 핵심 교훈: 안 될 때는 추측하지 말고, return { json: $input.item.json } 한 줄로 실제 데이터를 눈으로 확인하세요.
---
3단계: path parameter 방식으로 전환 → 성공!
Webhook path를 realestate/:region 형태로 바꿨습니다. 이제 URL이:
https://n8n.shinhwa.xyz/webhook/realestate-analysis/realestate/송파구지역명이 URL 경로 자체에 들어가니, 콜라가 단순히 URL을 접속하는 것만으로 데이터가 전달됩니다.
콜라에게 새 URL을 알려주고 "송파구 시세 알려줘"를 보냈습니다.
n8n Executions에 Succeeded 기록이 떴고, 콜라가 실데이터 기반 분석 리포트를 보내왔습니다!
> 📸 [이미지 삽입 위치 4: 텔레그램에서 콜라가 송파구 분석 리포트를 보내준 화면]
> 📸 [이미지 삽입 위치 5: n8n Executions에 Succeeded 기록이 뜬 화면]
⭐4단계: 아파트만 → 4종 부동산 전체 확장
여기서 멈출 수 있었지만, 공인중개사 실무에서는 아파트만으로 부족합니다. Claude Code에게 "빌라, 단독, 오피스텔도 다 넣어줘"라고 요청했습니다.
처음에는 n8n Code 노드 안에서 fetch로 8개 API를 동시에 호출하려 했으나:
에러: fetch is not definedn8n Code 노드는 fetch를 지원하지 않았습니다. 결국 검증된 HTTP Request 노드 8개를 순차 연결하는 구조로 변경:
Webhook → 지역코드변환 → 지역확인
→ 아파트매매 → 아파트전월세
→ 빌라매매 → 빌라전월세
→ 단독매매 → 단독전월세
→ 오피스텔매매 → 오피스텔전월세
→ 종합합산| | 새벽 버전 | 최종 버전 |
|---|---|---|
| API 수 | 2개 | 8개 |
| 매매 건수 (마포구) | 15건 | 60건 |
| 전월세 건수 | 15건 | 60건 |
| 지원 유형 | 아파트만 | 아파트+빌라+단독+오피스텔 |
> 📸 [이미지 삽입 위치 6: v5 워크플로우 — 12개 노드 모두 초록색 체크로 성공한 화면]
5단계: 10개 카테고리 실전 테스트
완성된 시스템으로 다양한 질문을 텔레그램에서 테스트했습니다:
유형별 조회
1. 동작구 아파트 시세 분석해줘 → ⭐⭐⭐ 15건 상세 리포트
2. 강남구 오피스텔 매매 현황 → ⭐⭐ 데이터 확인 (mixed data 개선 필요)
3. 송파구 빌라 전월세 어때? → ⭐⭐⭐ 전세/월세 구분 분석
4. 용산구 단독주택 실거래가 → ⭐⭐ 5건 확인
전세가율/투자 관점
5. 강북구 전세가율 분석 → ⭐⭐⭐ 50% + 월세 비중 해석
6. 강동구 오피스텔 월세 수익률 → ⭐⭐ 72% 전세가율 분석
동 단위 분석
7. 마포구 공덕동 아파트 시세 → ⭐⭐ 공덕동 필터링 부분 성공
8. 강남구 대치동 전세 현황 → ⭐⭐ 래미안대치팰리스 13억 확인
비교/종합
9. 마포구 vs 용산구 비교 → ⭐⭐⭐ 양 지역 동시 비교
10. 성동구 종합 분석 → ⭐⭐ 전체 유형 포함
> 📸 [이미지 삽입 위치 7: 텔레그램 답변 예시 - 디테일하고 신뢰성 있는 데이타 ]
---
6단계: 고객 상담용 대시보드
10개 카테고리 답변을 시각화 하고자 분석하였습니다.
이러한 결과를 계속 축적하여 고객별 FAQ HTML 대시보드로 만들 준비를 하였습니다.
선호하는 네오 브루탈리즘 디자인을 적용하여 가독성을 높이고, 고객 상담 시 바로 보여줄 수 있는 형태입니다.
- 왼쪽: 질문 목록 (클릭하면 해당 분석 결과 표시)
- 오른쪽: 분석 결과 (카드 + 테이블 + 전세가율 게이지 + 인사이트)
- 브랜드: 신화AI부동산 — 가치를 키워드립니다
- 매월 데이터 업데이트 구조
file:///C:/Users/pc/gpters21/openclaw_2nd/dashboard_v2_rev2_neobrutalism.html
> 📸 [이미지 삽입 위치 8: 대시보드 메인 화면 + 전세가율 비교 화면]
숨은 기반: 공공데이터 MCP 커스텀
이번 프로젝트가 가능했던 배경에는, 이전에 만들어둔 공공데이터 API 기반 MCP 서버가 있습니다. Claude Code에서 사용하기 위해 국토교통부, 건축물대장, 온비드 경매 등 26개 부동산 데이터 도구를 MCP로 구축해둔 상태였습니다.
이 MCP에서 검증한 API 엔드포인트와 파라미터를 그대로 n8n HTTP Request 노드에 옮긴 것이 핵심입니다. 한 번 배운 API 패턴은 어디서든 재활용할 수 있다는 걸 실감했습니다.
결과와 배운 점
📚 배운 점
1. "되는 것 같다"와 "진짜 된다"는 다르다
새벽에 PC에서 성공 → 텔레그램에서 실패. AI 에이전트가 어떤 도구로 호출하느냐에 따라 POST는 되고 GET query는 안 되고 path parameter만 됐습니다. 가장 제한된 환경(텔레그램/모바일)을 기준으로 설계해야 어디서든 작동합니다.
2. Webhook은 path parameter가 가장 안전하다
❌ POST body: /webhook/api + {"query":"송파구"} → 텔레그램에서 불가
❌ GET query: /webhook/api?query=송파구 → 파라미터 유실
⭕ GET path: /webhook/api/realestate/송파구 → 어디서든 작동!3. 디버그는 추측 말고 실제 데이터를 봐라
return { json: $input.item.json } 한 줄이면 n8n이 뭘 받는지 즉시 확인됩니다. 이것 때문에 params.region에 데이터가 있다는 걸 발견하고 바로 해결했습니다.
4. n8n Code 노드에서 fetch는 안 된다
fetch is not defined 에러. HTTP Request 노드를 사용해야 합니다. 또한 API 응답 필드가 숫자(`monthlyRent: 160`)일 수 있으므로 String()으로 감싸야 .trim() 에러를 방지합니다.
5. 워크플로우 교체 시 기존 것을 먼저 비활성화
같은 Webhook URL에 두 워크플로우가 동시에 연결되면 충돌합니다. 반드시 기존 비활성화 → 새 것 활성화 순서를 지켜야 합니다.
---
🔧 시행착오 타임라인
| 시간 | 문제 | 해결 |
|------|------|------|
| 19:40 | 텔레그램에서 콜라가 n8n 미호출 | POST → GET 전환 |
| 19:48 | GET으로 바꿨으나 query 빈값 | URL 인코딩 시도 (실패) |
| 19:52 | 여전히 빈값 | 디버그 코드로 실제 데이터 확인 |
| 19:57 | params.region에 데이터 있음 확인 | path parameter 방식 전환 |
| 20:03 | 텔레그램 호출 성공! | 콜라 스킬 업데이트 |
| 20:15 | 아파트만 → 전체 확장 시도 | fetch is not defined 에러 |
| 20:25 | HTTP Request 노드 8개로 변경 | v5 완성, 60건 데이터 확인 |
| 20:40 | 10개 카테고리 실전 테스트 | 대부분 성공, 일부 개선점 확인 |
| 21:00 | 대시보드 제작 | 네오 브루탈리즘 디자인 적용 |
---
💡도움이 필요한 부분
1. 유형별 필터링
현재 8개 API를 모두 호출 후 합산하므로, "강남구 오피스텔만"처럼 요청하면 mixed data가 옵니다. URL에 유형 파라미터 추가(`/realestate/강남구/오피스텔`)나 n8n 조건 분기 추가 방법에 대한 조언이 필요합니다.
2. 동 단위 정밀 필터링
구 단위 데이터를 콜라가 동 이름으로 필터링하는 방식인데, 누락이 생깁니다. n8n 단에서 동 필터를 추가하는 방법이 있을지 궁금합니다.
3. 대시보드 데이터 자동 갱신
현재는 수동으로 데이터를 넣은 정적 HTML입니다. n8n 워크플로우 응답을 대시보드에 자동 반영하는 구조로 만들고 싶습니다.
---
🚀 앞으로의 계획
단기 (이번 주)
- 유형별 필터 추가: /realestate/강남구/오피스텔
- 대시보드 매월 데이터 업데이트 체계 구축
- 고객 상담 시 실전 활용 시작
중기 (1~2주)
- 건축물대장 연동: 주소 → 층수, 용적률, 사용승인일 종합 분석
- 전세사기 위험도 분석: 전세가율 + 건물정보 종합 리스크 판단
- 백엔드 보강 + 데이터베이스 추가
장기 비전 — "누구나 쉽게, 부동산 전문가처럼"
궁극적으로 만들고 싶은 것:
- 부동산 투자 시뮬레이터: "전세 끼고 사면 5년 후 어떨까?" → 대출, 전세가율, 시세 추이 반영 시뮬레이션
- 맞춤형 매물 추천: 예산·선호지역·목적 입력 → 실거래가 기반 추천
- 뉴스+시세 연동 브리핑: 금리/규제 뉴스 → 관심 지역 시세 영향 자동 분석
부동산은 전문가만의 영역이라는 인식이 있지만, AI와 공공데이터를 결합하면 누구나 데이터 기반으로 판단할 수 있습니다. 그 접점을 신화AI부동산이라는 이름으로 만들어가고 있습니다.😀
---
도움 받은 글
- [GPTers 21기 OpenClaw 클래스 — 얼리어답터를 위한 OpenClaw로 내 삶 자동화 비서 만들기](https://www.gpters.org/ai-study-list-22wait/post/eolrieodabteoreul-wihan-openclawro-nae-salm-jadonghwa-biseo-mandeulgi-RMkn4nVaFyGSJcC)
- [OpenClaw + n8n Integration Pattern (awesome-openclaw-usecases)](https://github.com/hesamsheikh/awesome-openclaw-usecases/blob/main/usecases/n8n-workflow-orchestration.md)
- [국토교통부 실거래가 공개시스템 API](https://www.data.go.kr/data/15057511/openapi.do)