KHMI PROJECT PRESENTATION
KAIST · 클라우드컴퓨팅실습TEAM 2 / 2026.10

KOREA HOUSING MARKET INTELLIGENCE

한국 부동산 시장을,
한곳에서 쉽게 읽다.

흩어진 공공 통계와 공식 정책 발표를
하나의 흐름으로 연결하는 KHMI

www.khmi.kr
www.khmi.kr
KHMI 실제 홈 화면: 주택시장 가격 동향과 지역별 차트
4Open API 체계
3정책 수집 기관
6시장 해석의 동인

권태혁 · 노경수 · 박민영 · 박준우

만든 이유 → 화면 시연 → 기술과 데이터 → 다음 단계

WHY 01 / 업무에서 시작한 문제

시장 하나를 이해하려고,
너무 많은 사이트를 오갑니다.

팀원 모두 업무에서 부동산 시장과
직접 또는 간접으로 연결되어 있습니다.

가격만으로 판단하기 어렵고

인구·공급·금리·거래를 함께 봐야 하며

자료마다 지역·단위·공표 주기가 다릅니다.

“분석하기 전에, 자료를 찾고
맞추는 데 시간을 쓰고 있었습니다.”

R-ONE가격·수급
ECOS금리·금융
KOSIS인구·공급
국토부 실거래매매·전월세
KHMI

필요한 데이터를 한곳에
같은 기준으로 비교

찾는 시간을 줄이고, 시장을 읽는 데 집중할 수 있는 사이트가 필요했습니다.

WHY 02 / 숫자와 함께 읽어야 할 맥락

눈에 띄는 뉴스 너머,
정책의 방향과 흐름을 알고 싶었습니다.

확인하고 싶은 것누구에게?언제부터?어떤 조건으로?이전과 무엇이 달라졌나?
01

공식 발표를 모으고

국토교통부·행정안전부·금융위원회의 발표를 수집합니다.

02

핵심과 출처를 남기고

자동 발췌와 검토 자료를 구분하고, 원문으로 연결합니다.

03

시간의 흐름으로 읽기

새 발표 모니터링과 주요 정책 변화 연표를 함께 봅니다.

정량 데이터의 변화 옆에, 공식 정책이라는 맥락을 놓았습니다.

자동 요약은 원문 문장 발췌입니다. 정책의 시장 영향이나 시행 여부를 추정하지 않습니다.

FRONTEND / 먼저, 서비스로 보겠습니다

데이터와 정책을 탐색하는 하나의 입구

Vercel에 배포한 웹사이트에 개인 도메인 www.khmi.kr을 연결했습니다.

시연 화면 열기 ↗
KHMI · 실제 운영 화면
KHMI 홈 실제 화면
Home · 시장 흐름을 한눈에 / 2026.10.20 화면

FOR WHOM / 누구를 위한 서비스인가

실무에 필요한 깊이,
처음 배우는 사람을 위한 출발점

실수요자

우리 지역의 시장 흐름

가격·거래·금리와 정책을 함께 확인

투자자·금융 실무자

판단을 뒷받침할 데이터

지역 비교, 출처 확인, CSV·엑셀 내려받기

개발·사업 실무자

공급·수요·사업 환경

인구·공급 지표와 정책 변화를 교차 확인

BEGINNER FRIENDLY

낯선 용어에서
시장의 구조까지

  1. 용어전세가율 · 전월세전환율 · LTV
  2. 거래 절차매매 · 전세 · 월세의 단계와 점검
  3. 사업의 흐름부동산 개발 · 기관 투자 · 사업성 지표
부동산 기초 열기 ↗

준전문가의 분석 도구이면서, 입문자도 따라올 수 있는 길을 제공합니다.

AUTHENTICATION / 쉬운 로그인, 분리된 역할

Google 계정으로 로그인하고,
Supabase가 인증과 세션을 관리합니다.

01

브라우저

Google 로그인 선택

02

Supabase Auth

Google OAuth · PKCE

G

Google

사용자 인증·동의

인증 결과 → Supabase 세션 → 사이트 로그인 상태

로그인 없이

지표·차트 열람, 지역 비교, 정책 확인, 기초 학습

로그인 후

CSV·엑셀 내려받기, 로그인·다운로드 이용 기록 저장

이메일·이름 등 인증 정보는 Supabase Auth가 관리합니다. 이용 기록에는 사용자 ID를 사용하고, RLS로 본인 기록 추가만 허용합니다.

QUANTITATIVE DATA / 4개 Open API 체계

가격 하나가 아니라, 시장을 움직이는 데이터

51화면 제공 변수

49API 자동 갱신 대상 변수

17비교 가능한 시·도

Open API대표 데이터읽고 싶은 시장의 모습
한국부동산원R-ONE · JSON매매·전세·월세지수, 전세가율, 수급동향가격 변화와 임대시장 수급
한국은행ECOS · JSON기준금리·대출금리, 가계대출, 물가·경기자금 조달과 거시 환경
통계청KOSIS · JSON인구·세대·이동·고용, 인허가·착공·준공지역의 수요와 공급 기반
국토교통부실거래 API · XML아파트 매매·전월세 신고 자료 → 월별 건수실제로 발생한 거래의 움직임

2026.10.20 코드·운영 상태 기준. KOSIS는 여러 작성기관의 통계를 제공합니다. API 갱신 대상이 아닌 2개 변수는 기존 전처리 패널을 유지합니다.

PROCESSING / 받은 값을 읽을 수 있는 형태로

정규화 → 저장 → 6개 동인 → 비교·해설

01 정규화지역·기간·단위 정리
02 필요한 가공누계의 월별 차분·비중·건수
03 변경분 저장같은 키의 값은 비교 후 갱신
04 기초 분석변화율·지역 비교·방향 설명

시장을 읽는 6개 동인

  1. 01임차수요 압력
  2. 02주택공급·재고
  3. 03매매·전세 시장
  4. 04임대시장 수급
  5. 05시장심리
  6. 06금리·대출·거시경제

차트와 해설에서 보여주는 것

최신값 · 전년동기 대비
최근 방향 · 지역별 차이

공표된 기준기간 값으로 비교하고,
출처·보완 방법·잠정값을 함께 표시합니다.

전년동기 대비 = (이번 값 ÷ 1년 전 값 − 1) × 100

지수·금액 등 해당하는 계열에 적용하며, 비율·금리 계열은 지표 성격에 맞춰 해석합니다.

관측한 사실을 설명합니다. 자동 해설과 가격 예측은 구분합니다.

QUALITATIVE DATA / 공식 발표를 같은 흐름으로

정책 수집 기관 3곳,
RSS와 공개 보도자료를 함께 사용합니다.

RSS

국토교통부

주택·공급·임대차 발표

RSS

행정안전부

지방·주거 관련 발표

웹 크롤링

금융위원회

대출·가계부채·금융 정책

발표 후보제목·날짜·원문 URL
정책 선별주택 관련성·변경 내용
원문 발췌핵심 문장 최대 3개
DB와 화면자동 요약·검토 자료 구분

왜 RSS인가?
기관마다 페이지 구조와 접근 제약이 달라, 제공되는 공식 피드로 발표 목록을 안정적으로 확인합니다.

원문을 읽지 못하면?
임의로 요약하지 않고 다음 실행에서 재시도합니다. 공식 본문·첨부 PDF를 제한적으로 읽습니다.

크롤링 원칙은?
robots.txt 확인 결과 3곳 모두 허용(2026.10.20) · 6시간마다 기관별 목록 1회 + 원문 최대 6건 · 같은 기관 사이트 안에서만 읽습니다.

추가 AI API 비용 없이, 출처로 돌아갈 수 있는 정책 요약을 만듭니다.

AUTOMATION / 실행은 예약하고, 수집은 서버에서

GitHub Actions가 깨우고,
FastAPI가 받아 DB에 쌓습니다.

정량 지표

09:40 KST · 매일

실거래 수집 시작 → 기관별 API 확인
→ 변경분 반영 → 화면용 캐시 준비

40 0 * * *UTC 기준 cron

정책 발표

6시간 마다

발표 목록 수집 → 관련 정책 선별
→ 원문 발췌 → 자동 요약 저장

17 */6 * * *KST 03:17 · 09:17 · 15:17 · 21:17
Actions관리자 수집 API 호출 →Render · FastAPI수집·가공·저장 →Supabase

매일 새 수치를 만드는 것이 아니라, 기관의 새 공표분과 수정치를 확인합니다.

실제 실행 시각은 GitHub Actions 대기열에 따라 늦어질 수 있습니다. 실패 기록과 마지막 성공 시각을 따로 확인합니다.

API CONTRACT / 화면과 다른 프로그램이 함께 쓰는 인터페이스

입력값과 응답 구조를 공개한 API

GET/api/indicators/{var}

변수·지역·기간 → 시계열 값과 출처

GET/api/policies

정책 목록 → 자동 요약·검토일·수집 결과

GET/api/usage

기간·상위 개수 → 이용 횟수·다운로드 순위

POST/api/policies/refresh

관리자 인증 → 수집·요약 실행 결과

지표 시계열 요청 예시
GET /api/indicators/V043
    ?regions=전국
    &start=2026-07

JSON 응답의 주요 필드

var · label · unit
변수 ID · 이름 · 단위
periods · series
시점 배열 · 지역별 값 배열
source · fetched_at
출처 · 마지막 수집 시각
실제 JSON 응답 열기 ↗
Swagger에서 API 확인 ↗API 입력·응답 상세 → 부록 A수집 API는 X-Admin-Token이 필요합니다.

DATABASE / SUPABASE POSTGRESQL

같은 값은 한 번 저장하고,
변경 이력과 이용 기록은 따로 남깁니다.

정량 · 6개 테이블

indicator_variables변수 정의 · 출처 · 상태

1 → N FK

indicator_observationsPK: 변수 + 지역 + 시점

수집 로그 · 화면 계열과 값
실거래 월별 집계·진행 기록

정성 · 5개 테이블

policy_documents원문 URL 유일 · 발표 정보

1 → N / 1 → 0..1 FK

versions / briefs수정 이력 / 자동 요약

출처별 상태
검토 콘텐츠 스냅샷

이용 기록 · 2개 테이블

auth.usersSupabase 관리 인증 테이블

1 → N FK

activity_logs로그인 · 로그아웃 · 다운로드

usage_events: 익명 지표·정책 조회
기간별 집계 · 다운로드 순위

(variable_id, region, period)동일 키의 값 비교 → 새 값 추가 / 바뀐 값 갱신 / 같은 값 건너뛰기
테이블·PK·FK 상세 → 부록 B·CSQL 스키마 ↗애플리케이션 테이블 13개 + Supabase 관리 인증 영역

OPERATIONS / 무엇이 쓰이는지 관찰하며 운영

방문과 데이터 이용을 나누어 보고,
반복 작업을 줄여 비용을 관리합니다.

방문 분석

Vercel Web Analytics

페이지 방문과 유입을 파악하는 기본 분석

실제 데이터 이용

Supabase 이용 로그 + /usage

지표 다운로드·차트 열람·정책 상세·원문 클릭 집계

상세 이용 통계 보기 ↗

낮은 비용으로 시작하기

  1. 실거래 원자료 대신 월별 건수화면에 필요한 집계값 중심으로 보관
  2. 바뀐 값만 저장같은 데이터를 다시 받아도 중복 행 방지
  3. DB + 브라우저·CDN·메모리 캐시반복 외부 호출과 DB 조회 감소
  4. 관리형 서비스의 제공량 활용사용량을 보고 운영 규모 조정

차트는 50% 이상 2초 표시 시, 정책은 상세 펼침·원문 클릭 시 기록합니다. 조회는 탭별 중복을 제외하며 계측 도입 이후부터 집계합니다.

SERVICE ARCHITECTURE / 조회와 수집, 두 흐름으로 이해하기

화면을 보는 흐름과 데이터를 모으는 흐름

A 사용자 조회 요청은 아래로, 응답은 위로

B 자동 수집 예약 실행으로 새 자료 반영

사용자 브라우저 프론트엔드

www.khmi.kr · 차트 · 정책 · 다운로드

Vercel에서 HTML·CSS·JavaScript 화면을 받음

Vercel CDN 전달·캐시

화면의 /api/* 요청을 Render로 전달

캐시에 저장된 지표 응답이 있으면 먼저 제공

Render · FastAPI 백엔드

조회 요청 처리 + 외부 자료 수집·가공

사용자에게 DB 값을 반환하고, 수집 결과는 DB에 저장

Supabase PostgreSQL DB

지표 · 실거래 건수 · 정책 · 이용 기록 보관

수집·가공한 데이터를 저장하고, 바뀐 값만 갱신

B 자동 수집

방문자가 없어도 데이터는 갱신됩니다.

Actions는 실행을 요청하고,
Render가 자료를 모아 DB에 저장합니다.

GitHub Actions ① 예약 실행

정량 매일 09:40 KST · 정책 6시간마다

Render의 관리자 수집 API 호출 → 수집 시작

외부 데이터 ② Render가 수집

Open API 4개: 부동산원 · 한국은행 · 통계청 · 국토부

정책 3곳: 국토부·행안부 RSS / 금융위 웹 크롤링

초기 데이터 적재 서비스 시작 시

DFMBA 전처리본 → Supabase DB

과거 데이터로 시작한 뒤, 예약 수집으로 계속 갱신
/api 요청 ↕ 응답캐시로 응답하지 못한 요청 전달DB 조회 · ③ 수집 결과 저장 ① 수집 시작② 자료 요청·응답초기 적재
별도 연결로그인: 브라우저 ↔ Supabase Auth ↔ Google로그인·다운로드 기록: 브라우저 → Supabase DB

홈·대시보드는 DB·캐시를 조회하고, 예약 수집은 DB를 갱신합니다.

BUSINESS MODEL / 검증할 가설

먼저 데이터와 이용 경험을 쌓고,
필요로 하는 가치에서 수익을 찾겠습니다.

현재

01

공개 서비스

지표·정책·기초 학습
수집 이력과 이용 데이터 축적

다음

02

관심 기반 큐레이션

조회·다운로드 수요를 반영한
이달의 차트, 관심 지역·지표

사업 가설

03

맞춤 리포트

관심 지역·프로젝트에 맞춘
정량 + 정성 데이터 해석

검증 이후

04

선택적 유료 기능

의미 있는 예측 성능과
실무 수요가 확인된 기능

유료화의 출발점은 기능의 수가 아니라, 반복해서 찾는 정보와 검증된 효용입니다.

현재 ‘이달의 차트’는 금리 3종 비교로 고정되어 있습니다. 이용량 기반 선정·맞춤 리포트·예측 모델·유료화는 향후 계획입니다.

WHAT'S NEXT / 데이터를 모으는 기반에서, 판단을 돕는 도구로

사람들이 무엇을 찾는지 배우고,
우리만의 예측 모델을 검증하겠습니다.

지금

수집·조회·로그의 기반

공공 데이터 자동 수집
정책 발췌 · API · DB · 상세 이용 통계

다음

이용 패턴과 관심사

조회·다운로드 수요 분석
인기 지표 선정 · 관심 지역 기능

검증 후

예측·맞춤 리포트

공표 시차·수정치를 고려한 백테스트
기준 모형 대비 성능과 실무 활용 검증

흩어진 데이터에서, 함께 읽는 시장으로. KHMI

APPENDIX A / API 설명 문서

주요 API의 기능 · 입력값 · 응답 형식

기본 주소 https://www.khmi.kr/api · 응답 JSON · 전체 명세는 Swagger ↗

요청 · 기능주요 입력응답 핵심 필드
GET /indicators제공 변수·수집원 목록없음variables, sources, refresh_hours
GET /indicators/{var}개별 시계열var ID / regions 쉼표 목록
start YYYY-MM / scope 지역 단위
var, label, unit, periods, series,
source, fetched_at, origin
GET /indicators/bundle복수 지표 묶음set=live|all, vars, regions, startmetrics, regions, missing, panel
GET /indicators/status수집 상태·로그limit 1~300, 기본 50변수 상태 · 수집 로그 · 패널 규모
GET /policies검토 자료 + 자동 요약없음policies, automation, reviewed_at,
last_checked_at, storage, sync
GET /policies/monitor새 발표 후보limit 1~300, 기본 100items, sources, last_checked_at
GET /usage익명 집계 통계days 1~365, 기본 30
top 1~50, 기본 10
available, totals, daily, downloads
POST /indicators/refresh정량 수집 · 관리자X-Admin-Token 헤더
source, vars, force
출처별 수집 결과 · 변경 여부
POST /policies/refresh정책 수집·요약 · 관리자X-Admin-Token 헤더status, sources, briefs

기타: /health, /knowledge, /policies/history, 실거래 작업 시작 POST /indicators/rtms/collect 및 상태 GET /indicators/rtms/job(관리자 인증).

APPENDIX B / DB 테이블 문서 · 정량

변수 정의, 원값, 화면 계열과 수집 이력

PK = 기본키 · FK = 외래키 · ORM 모델 ↗ · 운영 문서 ↗

테이블 · 역할PK주요 컬럼 · FK
indicator_variables수집 변수 정의·상태idlabel, source, freq, unit, last_period,
last_fetched_at, last_status
indicator_observations정규화 관측값variable_id
+ region + period
value, fetched_at
FK variable_id → indicator_variables.id
indicator_fetch_logs수집 1회당 기록idstarted_at, duration_ms, status,
rows_received, rows_upserted

FK variable_id → indicator_variables.id
indicator_series화면용 계열 정의idvar_id, scope, label, unit, periods,
source, method, provisional_from
indicator_series_values화면용 계열 값series_id
+ region + period
value
FK series_id → indicator_series.id
rtms_progress실거래 집계·수집 진행kind
+ lawd_cd + deal_ym
count_all, count_monthly, count_jeonse,
count_canceled, calls, fetched_at

원값 → 화면 계열은 전처리 코드로 연결합니다. indicator_series.var_id는 선언된 FK가 아닙니다.

APPENDIX C / DB 테이블 문서 · 정성·이용

원문, 변경 이력, 자동 요약과 이용 기록

정책 스키마 ↗ · 로그인·다운로드 ↗ · 익명 열람 기록 ↗

테이블 · 역할PK주요 컬럼 · 제약
content_snapshots검토 콘텐츠·자동화 상태keycontent, content_hash, updated_at
policy_source_states기관별 수집 상태idlast_checked_at, last_success_at,
status, error, item_count
policy_documents수집한 발표 문서idsource_id, source_url, title, agency,
published_at, revision
/ URL 유일
policy_document_versions문서 변경 이력idFK document_id → policy_documents.id
(document_id, revision) 유일
policy_briefs자동 요약 · 문서당 최대 1건document_id
동시에 FK
FK document_id → policy_documents.id
content, algorithm_version, status,
last_attempt_at, last_success_at
activity_logs로그인·로그아웃·다운로드idFK user_id → auth.users.id
occurred_at, event, page, target, detail
usage_events익명 지표·정책 조회event_idsession_id, event, target, occurred_at
탭·동작·대상 조합 유일 / 계정 FK 없음

집계 뷰: v_activity_daily, v_download_by_target. source_id는 출처 코드에 대한 논리 연결입니다. activity_logs는 본인 행 추가만 허용하고, usage_events는 서버 API만 읽고 씁니다.

발표 마무리로 돌아가기 ↑구현 확인 2026.10.20 · 내용: 현재 KHMI 코드·문서

발표 목차

01–16 본문 · A–C API·DB 문서 부록