Claude Code가 만들고, n8n이 연결하고, OpenClaw🦞가 분석한다 — 공공데이터 API로 부동산 시세 분석 자동화 구축기

노제승2026. 3. 31.조회 1

소개

안녕하세요. 부동산 업무에 AI를 접목하고 있는 부동산 크리에이터? '도시아재'입니다.

이번 GPTers 21기 OpenClaw 클래스에서 저는 텔레그램에서 "마포구 시세 알려줘"라고 말하면, AI가 국토교통부 실거래가 데이터를 실시간으로 조회하고 분석 리포트까지 자동 생성해주는 시스템을 만들었습니다.

왜 이걸 만들었냐면, 공인중개사 실무에서 매물 시세를 파악하려면 국토부 실거래가 공개시스템, 네이버 부동산, KB시세 등 여러 사이트를 돌아다녀야 합니다. 고객이 "마포구 요즘 얼마예요?"라고 물어보면, 그때마다 사이트 들어가서 일일이 검색하고 정리하는 게 일이었죠.

"그냥 AI한테 물어보면 바로 나오게 할 수 없을까?" — 이게 출발점이었습니다.

특히 이번에 제가 차별화한 부분은, 국토교통부 공공데이터 API를 MCP 서버로 커스텀 구축했던 경험을 OpenClaw와 n8n 연동에 그대로 활용했다는 점입니다. 이전에 Claude Code용으로 만들어둔 부동산 MCP 도구(실거래가, 전월세, 건축물대장 등 26개)가 있었는데, 이번에는 그 API를 n8n 워크플로우로 옮기고 OpenClaw(콜라🦞)가 호출하는 구조로 재설계했습니다.

---

진행 방법

🏗️ 전체 아키텍처

이번 프로젝트의 핵심은 역할 분리입니다.

숫자가 다른 가계도의 다이어그램

😀

- OpenClaw(콜라) = AI 두뇌. 사용자와 대화하고, 데이터를 분석하고, 리포트를 작성합니다.

- n8n = 자동화 엔진. 국토부 API를 호출하고 데이터를 가공합니다. API 키는 여기에만 보관됩니다.

- 국토교통부 OpenAPI = 실제 데이터 소스. 실거래가, 전월세 데이터를 제공합니다.

이 구조의 장점은 세 가지입니다:

- 🔒 보안: API 키가 n8n에만 있고, 콜라는 웹훅 URL만 알면 됨

- 👁️ 시각화: n8n에서 모든 API 호출 과정을 눈으로 확인 가능

- 💰 효율: 단순 API 호출에 AI 토큰을 낭비하지 않음

---

1단계: n8n 워크플로우 구축

먼저 n8n에서 부동산 데이터를 조회하는 워크플로우를 만들었습니다.

한국 게임 스크린샷

> 📸 [이미지 1: n8n 워크플로우 전체 캔버스 스크린샷]

워크플로우는 6개 노드로 구성됩니다:

1. Webhook — OpenClaw에서 POST 요청을 받는 입구

2. 지역코드 변환 — "마포구" → 법정동코드 "11440" 변환 (Code 노드)

3. 지역 확인 — 지역을 찾았는지 분기 (IF 노드)

4. 실거래가 조회 — 국토부 아파트 매매 API 호출 (HTTP Request)

5. 전월세 조회 — 국토부 아파트 전월세 API 호출 (HTTP Request)

6. 데이터 합산 — 두 API 결과를 합치고 통계 계산 (Code 노드)

핵심인 지역코드 변환 노드의 코드입니다. 서울 25개구 + 주요 경기도 지역을 지원합니다:

javascript
const body = $input.item.json.body || $input.item.json;

const query = body.query || body.region || '';

const yearMonth = body.year_month || '202603';

const REGION_MAP = {

  '종로구': '11110', '중구': '11140', '용산구': '11170',

  '성동구': '11200', '광진구': '11215', '동대문구': '11230',

  '중랑구': '11260', '성북구': '11290', '강북구': '11305',

  '도봉구': '11320', '노원구': '11350', '은평구': '11380',

  '서대문구': '11410', '마포구': '11440', '양천구': '11470',

  '강서구': '11500', '구로구': '11530', '금천구': '11545',

  '영등포구': '11560', '동작구': '11590', '관악구': '11620',

  '서초구': '11650', '강남구': '11680', '송파구': '11710',

  '강동구': '11740',

  '분당구': '41135', '수원시': '41110', '성남시': '41130',

  '용인시': '41460', '고양시': '41280', '화성시': '41590'

};

// 한글 지역명을 5자리 법정동코드로 자동 매핑

let regionCode = null;

let regionName = null;

for (const [name, code] of Object.entries(REGION_MAP)) {

  if (query.includes(name)) {

    regionCode = code;

    regionName = name;

    break;

  }

}

실거래가 조회 노드는 국토교통부 OpenAPI를 호출합니다:

GET https://apis.data.go.kr/1613000/RTMSDataSvcAptTrade/getRTMSDataSvcAptTrade

파라미터: LAWD_CD(지역코드), DEAL_YMD(연월), type=json

> 💡 핵심 포인트: type=json 파라미터를 꼭 넣어야 합니다. 안 넣으면 XML로 응답이 와서 파싱이 복잡해집니다.

그리고 데이터 합산 노드에서 실거래가 + 전월세 데이터를 합치고, 중위가격/최고가/최저가/전세가율까지 자동 계산합니다.

---

2단계: OpenClaw(콜라)에 스킬 등록

n8n 워크플로우가 완성되면, 텔레그램의 콜라🦞에게 이 웹훅을 사용하는 방법을 알려줘야 합니다.

콜라에게 보낸 메시지입니다:

새로운 스킬을 추가하고 싶어. "부동산 매물 분석" 스킬이야.

사용자가 부동산 관련 질문을 하면 (예: "마포구 시세 알려줘"),

n8n 웹훅을 호출해서 국토교통부 실거래가 데이터를 가져온 후

분석 리포트를 작성해줘.

n8n 웹훅 정보

- URL: https://n8n.shinhwa.xyz/webhook/**********-********

- Method: POST

- Content-Type: application/json

요청 형식

{

"query": "지역명 (예: 마포구, 강남구)",

"action": "both",

"year_month": "202603"

}

금액은 만원 단위야. 95000 = 9억 5,000만원으로 변환해서 보여줘.

면적은 ㎡ × 0.3025 = 평으로 함께 표시해줘.

전세가율이 70% 이상이면 갭투자 리스크 경고해줘.

```

콜라는 이 내용을 바탕으로 skills/public/real-estate-analysis/SKILL.md 스킬 파일을 자동 생성해주었습니다. 그리고 자연어 질문 → 지역명/의도 자동 판단 → 웹훅 호출 → 리포트 생성까지 일련의 흐름을 스스로 설계했습니다.

> 💡 인사이트: OpenClaw의 강점은 스킬 문서를 자연어로 알려주면, 그 규칙을 기억하고 이후 대화에서 자동으로 적용한다는 점입니다. 코딩 없이 "이렇게 해줘"라고 말하면 됩니다.

---

3단계: 실전 테스트

Publish 후 텔레그램에서 콜라에게 직접 테스트했습니다.

입력: 마포구 아파트 시세 알려줘

콜라답변:

무지개 배경이 있는 페이지의 스크린샷

> 📸 [이미지 2: 텔레그램에서 콜라에게 질문하고 리포트를 받은 화면]

결과:

콜라가 자동으로 n8n 웹훅을 호출하고, 받은 데이터로 아래와 같은 분석 리포트를 생성했습니다:

마포구 아파트 시세 분석 (2026년 3월 기준)

[실거래가]

• 공덕SK리더스뷰 | 97.8㎡ (29평) | 9층 | 26억원

• 더클래시 | 59.97㎡ (18평) | 10층 | 22억 6,000만원

• 공덕1삼성래미안 | 59.74㎡ (18평) | 16층 | 16억 8,000만원

  ... (총 15건)

[요약]

• 중위가격: 12억 4,500만원

• 최고가: 26억원 / 최저가: 3억원

[전월세]

• 전세 7건 / 월세 8건 (총 15건)

• 전세가율: 63% → 안정적 수준

[공인중개사 관점]

• 마포구는 공덕권, 상암권, 합정권 등 생활권별 가격 편차가 큼

• 신축 선호 입지 단지 중심으로 상단 가격 강하게 형성

다양한 장치를 보여주는 컴퓨터 화면의 스크린샷

> 📸 [이미지 3 : n8n 실행 로그 - 워크플로우가 성공적으로 실행된 화면]

---

💡 공공데이터 MCP 커스텀 — 이번 프로젝트의 숨은 기반

사실 이번 프로젝트가 가능했던 배경에는, 이전에 만들어둔 공공데이터 API 기반 MCP 서버가 있습니다.

Claude Code에서 사용하기 위해 국토교통부, 건축물대장, 온비드 공매 등 26개 부동산 데이터 도구를 MCP로 구축해둔 상태였습니다:

| MCP 도구 | 기능 |

|---------|------|

| get_apartment_trades | 아파트 매매 실거래가 조회 |

| get_apartment_rent | 아파트 전월세 조회 |

| get_building_title_info | 건축물대장 표제부 조회 |

| smart_building_lookup | 건물 종합 정보 자동 조회 |

| get_onbid_thing_info_list | 온비드 공매 물건 조회 |

| calculate_loan_payment | 대출 원리금 계산 |

| ... 등 총 26개 | |

이 MCP에서 사용하는 API 엔드포인트와 파라미터를 그대로 n8n HTTP Request 노드에 옮긴 것이 이번 프로젝트의 핵심입니다. 이미 검증된 API 호출 패턴을 재활용한 셈이죠.

> 💡 : 공공데이터포털(data.go.kr)에서 API를 발급받을 때, Decoding 키를 사용해야 합니다. Encoding 키를 넣으면 이중 인코딩 되어 오류가 납니다.

---

결과와 배운 점

📚 배운 점

1. OpenClaw + n8n은 AI 에이전트의 이상적인 조합이다

OpenClaw(콜라)은 대화와 분석을, n8n은 API 호출과 데이터 가공을 담당합니다. 각자 잘하는 일을 하는 거죠. 특히 API 키가 n8n에만 보관되니 보안도 좋고, n8n 화면에서 API 호출 과정을 눈으로 볼 수 있어서 디버깅이 쉽습니다.

2. 공공데이터 API + MCP 경험이 큰 자산이 된다

이전에 Claude Code용 MCP 서버를 만들면서 공공데이터 API의 파라미터, 응답 구조, 인코딩 이슈 등을 이미 파악해둔 상태였습니다. 그 경험 덕분에 n8n 워크플로우 구축이 훨씬 빨랐습니다. 한 번 배운 API 패턴은 어디서든 재활용할 수 있다는 걸 실감했습니다.

3. 스킬 등록은 자연어로 충분하다

OpenClaw에 스킬을 추가할 때, 코드를 직접 작성할 필요 없이 "이 웹훅을 이렇게 호출해줘"라고 자연어로 알려주면 됩니다. 콜라가 알아서 스킬 문서를 만들고, 이후 대화에서 자동으로 적용합니다.

---

🔧 시행착오

1. 전월세 데이터가 안 나오는 버그 (1시간 소요)

처음 테스트했을 때 실거래가는 15건 나오는데, 전월세가 0건이었습니다. 원인을 추적해보니 국토부 전월세 API의 monthlyRent 필드가 문자열이 아닌 숫자로 반환되는데, 코드에서 .trim()(문자열 전용 함수)을 호출해서 에러가 났던 것이었습니다. try-catch에 에러가 숨겨져 있어서 찾기 어려웠습니다.

javascript

// ❌ 버그: monthlyRent가 숫자(160)일 때 .trim() 에러

monthlyRent: (r.monthlyRent || '').trim().replace(/,/g, '')

// ✅ 수정: String()으로 감싸기

monthlyRent: String(r.monthlyRent || 0).trim().replace(/,/g, '')

> 💡 교훈: 공공데이터 API는 같은 테이블이라도 필드마다 타입이 다를 수 있습니다. 금액은 문자열("65,000"), 월세는 숫자(160)처럼요. String()으로 감싸는 습관을 들이면 이런 버그를 예방할 수 있습니다.

2. n8n 병렬 실행 문제

처음에는 실거래가 조회와 전월세 조회를 병렬로 실행했는데, n8n에서 한쪽만 실행되고 다른 쪽은 무시되는 문제가 있었습니다. 순차 실행(실거래가 → 전월세 → 합산)으로 바꾸니 해결되었습니다.

3. Windows 환경 한글 인코딩

curl로 테스트할 때 한글이 깨지는 문제가 있었습니다. JSON 파일로 저장해서 --data-binary @파일.json으로 보내는 방식으로 해결했습니다.

---

🚀 앞으로의 계획

단기 (이번 달)

- 건축물대장 연동: 주소 입력 → 층수, 용적률, 사용승인일까지 조회

- 지역 비교 분석: "마포구 vs 강남구 비교해줘" 기능

중기 (1-2주)

- 전세사기 위험도 분석: 전세가율 + 건물정보 종합 리스크 판단

- 매물 분석 보고서 PDF 자동 생성: 고객에게 바로 보낼 수 있는 형태

장기

- 상가/오피스텔 분석 확장

- 온비드 공매 모니터링 자동화

- 공인중개사 동료들과 함께 쓰는 텔레그램 그룹 봇

궁극적으로는 "공인중개사의 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 Guide (awesome-openclaw-usecases)](https://github.com/hesamsheikh/awesome-openclaw-usecases/blob/main/usecases/n8n-workflow-orchestration.md)

- [국토교통부 실거래가 공개시스템 API (data.go.kr)](https://www.data.go.kr/data/15057511/openapi.do)

댓글 0

로그인하고 댓글을 작성하세요

Claude Code가 만들고, n8n이 연결하고, OpenClaw🦞가 분석한다 — 공공데이터 API로 부동산 시세 분석 자동화 구축기 | GPTers