도시아재
도시아재
🏅 AI 마스터
🚀 SNS 챌린지 달성자

Claude Code가 만들고, n8n이 연결하고, 콜라🦞가 분석한다 — 공공데이터 API로 유형별 부동산 시세 분석 자동화 구축기 - 2번째.(실패를 통한 확장)


소개

안녕하세요, 공인중개사이자 부동산 업무에 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 defined

n8n 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)

2

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요