## 📝 한줄 요약
지역별 아파트 가격과 거래량을 한 화면에서 비교하기 위해 Codex와 함께 데이터 수집부터 품질검사, 시각화까지 완성했습니다. 서울 25개 자치구를 13개 차트로 보여주고, 원본 숫자와 화면 숫자가 일치하는지도 자동으로 검증했습니다.
## 🎯 이런 분들께 도움돼요
- AI 코딩 도구를 실제 업무에 어떻게 활용할지 궁금한 비개발자
- 코드를 모두 이해하지 못해도 데이터 수집과 대시보드 제작을 경험해보고 싶은 분
- AI가 만든 결과의 정확성을 어떻게 검증해야 할지 고민하는 분
## 😫 문제 상황 (Before)
부동산 가격이 올랐다는 뉴스와 거래가 줄었다는 뉴스를 따로 보면 지역별 상황을 한눈에 이해하기 어려웠습니다. 같은 시점의 가격 변화와 거래량을 서울 자치구별로 나란히 비교할 수 있는 화면이 필요했습니다.
문제는 대시보드 화면만 만드는 것으로 끝나지 않았습니다. 공공 API에서 데이터를 받아야 했고, 지역명과 날짜 형식을 맞춰야 했으며, 누락이나 중복이 있는지도 확인해야 했습니다. 차트가 멋지게 보여도 원본과 다른 숫자를 표시하면 분석 도구로 사용할 수 없기 때문입니다.
그래서 이번 작업의 목표를 단순히 “그래프를 그린다”가 아니라 “실제 데이터를 수집하고, 검증한 뒤, 같은 숫자를 화면에 표시한다”로 정했습니다.
## 🛠️ 사용한 도구
- AI 도구: Codex
- 모델: GPT-5 기반 Codex
- 데이터: 국토교통부 아파트 실거래가, KB부동산 통계, 서울 시군구 경계 데이터
- 분석 환경: Python, DuckDB, pandas, Polars
- 시각화: Streamlit, Plotly, ECharts
- 특이사항: API 실패 시 가짜 데이터를 만들지 않고 실제 오류를 공개하도록 작업 규칙을 먼저 정했습니다.
## 🔧 작업 과정
### 먼저 데이터가 믿을 만한지 확인했다
처음부터 화면을 만들지는 않았습니다. 현재 프로젝트에 어떤 데이터가 있는지, 서울 25개 자치구를 모두 포함하는지, 가격 변화율을 계산할 만큼 과거 데이터가 있는지부터 확인했습니다.
### API 수집은 성공 여부보다 검증 기준이 먼저였다
데이터 수집을 요청할 때 지역, 기간, 저장 위치뿐 아니라 실패했을 때의 처리 방법까지 구체적으로 적었습니다.
### 너무 느린 수집을 전체 재설치 없이 고쳤다
가장 어려웠던 부분은 서울 25개 구 데이터를 순서대로 받는 과정이었습니다. 한 지역의 18개월을 모두 받은 다음 다음 지역으로 넘어가는 방식이라 예상보다 훨씬 오래 걸렸습니다.
이때 중요한 판단은 “기다리면 언젠가 끝나겠지”가 아니었습니다. 아직 결과 파일을 쓰기 전이었기 때문에 실행을 안전하게 중단하고, 수집 방식만 제한적인 병렬 처리로 바꿨습니다. 전체 환경이나 관련 없는 패키지를 다시 설치하지 않았습니다.
개선된 방식은 여러 지역을 동시에 요청하되 요청 수를 제한하고, 실패한 지역을 따로 추적했습니다. 그 결과 서울 25개 구×18개월을 모두 수집할 수 있었습니다. 실패한 부분만 수정하고 같은 검증을 다시 실행하라는 원칙이 실제 시간을 줄여준 사례였습니다.
### 지도부터 시계열까지 같은 기준으로 연결했다
데이터가 준비된 뒤에는 네 가지 핵심 지표를 만들었습니다.
- 매매가격 전년동월대비 증감률
- 전세가격 전년동월대비 증감률
- 전세가율
- 아파트 거래량
### 화면과 데이터를 분리해 다시 쓸 수 있게 만들었다
동적 대시보드에서 사용한 분석을 정적 지역 대시보드에서도 재사용하기 위해 모든 차트가 같은 데이터 형식을 사용하도록 정했습니다.
각 차트는 어떤 질문에 답하는지, 어느 데이터에서 왔는지, 단위와 기준 기간이 무엇인지, 표본이 몇 개인지를 스스로 설명합니다. 화면은 공통 데이터 파일을 한 번만 읽고 13개 차트를 그립니다. 숫자가 바뀌어도 화면을 다시 고치지 않고 데이터 파일만 교체할 수 있습니다.
첫 차트를 독립적으로 통과시킨 뒤 같은 구조를 다른 차트에 적용했습니다. 로딩 중, 데이터 없음, 오류, 정상 상태를 구분하고 화면 폭이 바뀌면 차트 크기도 다시 맞추도록 했습니다.
### “차트가 보인다”보다 “숫자가 같다”를 확인했다
가장 인상적이었던 순간은 같은 데이터가 지도, 차트, QA 표에서 실제로 일치하는지 자동으로 확인했을 때였습니다.
원본의 표본 수와 화면에서 다시 계산한 값을 나란히 비교했습니다. KB와 지도 지역 매칭, 서울 자치구별 가격 변화, 히트맵 셀 수, 거래량 합계, 노원구 매매·전세 표본 등 10개 항목의 차이가 모두 0이었습니다.
또한 데스크톱과 모바일 화면에서 13개 차트가 모두 실제 크기로 렌더링되는지, 빈 차트가 있는지, 화면이 가로로 넘치는지도 확인했습니다. 눈으로 차트가 보인다는 사실과 숫자가 정확하다는 사실은 별개의 검증이라는 점을 배웠습니다.
### 예상과 다른 결과도 그대로 보여줬다
마지막으로 매매가격과 거래량이 함께 증가한 지역을 찾는 버블 차트를 추가했습니다.
2026년 6월 기준으로 서울 25개 구의 KB 매매가격 전년동월대비 증감률을 가로축, 매매 거래량 증감률을 세로축에 배치했습니다. 버블 크기는 해당 월의 거래량을 나타냈습니다.
결과는 예상과 달랐습니다. 25개 구 모두 가격지수는 상승했지만 거래량은 감소했습니다. 가격과 거래량이 동시에 증가한 지역은 0개였습니다. 원하는 이야기에 맞춰 결과를 바꾸지 않고, 실제 데이터가 보여주는 패턴을 그대로 제시했습니다.
## ✅ 결과 (After)
### Before vs After
| 항목 | Before | After |
|------|--------|-------|
| 지역 비교 | 가격과 거래량을 여러 자료에서 따로 확인 | 서울 25개 구를 한 화면에서 비교 |
| 분석 화면 | 정리된 시각화 없음 | 지도·시계열·히트맵·버블 차트 등 13개 차트 |
| 정확성 확인 | 화면 숫자의 근거를 별도로 추적 | 원본과 화면을 비교하는 QA 10개 항목 PASS |
| 데이터 갱신 | 화면과 데이터를 함께 수정해야 함 | 공통 데이터 파일 교체로 차트 갱신 가능 |
| 작업 경험 | AI로 전체 데이터 파이프라인을 만든 경험이 없음 | 수집·오류 해결·검증·시각화 과정을 직접 수행 |
### 결과물
- 서울 25개 자치구 KB부동산 공간·시계열 대시보드
- 개별 아파트 매매·전세 가격과 거래량 분석
- 13개 ECharts로 구성된 반응형 지역 정적 대시보드
- 매매가격·거래량 B1 포지셔닝 버블 차트
- 원본과 화면 숫자를 비교하는 QA 표
- 재사용 가능한 데이터 수집·전처리·검증 절차
가장 큰 변화는 특정 도구 하나를 만든 것보다, 데이터 수집부터 화면 검증까지 AI와 협업하는 전체 흐름을 익혔다는 점입니다.
## 💬 이 과정에서 배운 AI 활용 팁
### 효과적이었던 것
1. 화면 요구와 숫자 검증을 함께 요청하기
- “차트를 만들어줘”에 그치지 않고 원본 행 수, 기간, 결측, 중복과 화면 집계값을 다시 비교하도록 요청했습니다.
2. 지역·기간·지표를 구체적으로 적기
- 서울 25개 구, 2025년 1월~2026년 6월처럼 범위를 명시하니 누락 여부를 판단할 기준이 생겼습니다.
3. 실패 처리 원칙을 먼저 정하기
- API가 실패하면 가짜 데이터를 만들지 않고 실제 오류를 보여달라고 명시했습니다.
4. 큰 작업을 독립 검증 단위로 나누기
- 첫 차트 하나를 먼저 통과시킨 뒤 같은 구조를 나머지 차트에 적용했습니다.
### 이렇게 하면 안 돼요
1. 차트가 보인다는 이유만으로 완료라고 판단하기
- 렌더링 성공과 숫자 일치는 서로 다른 문제입니다.
2. 오류가 났다고 전체 환경을 다시 설치하기
- 이번 사례에서는 느린 수집 방식만 변경해 문제를 해결했습니다.
3. 원하는 결론에 맞춰 없는 값을 채우기
- 데이터가 없는 기간은 보간하지 않았고, 가격과 거래량 동시 증가 지역이 0개라는 결과도 그대로 표시했습니다.
## 🌍 다른 업무에 적용한다면?
이 방식은 부동산에만 적용되는 것이 아닙니다. 매출 대시보드라면 원본 주문 수와 화면 매출 합계를 비교할 수 있고, 마케팅 대시보드라면 광고 플랫폼의 원본 클릭 수와 보고서 숫자를 대조할 수 있습니다. 재고·고객지원·운영 지표도 같은 구조로 만들 수 있습니다.
핵심은 AI에게 화면 제작자 역할만 맡기는 것이 아니라 데이터 검사자 역할도 함께 맡기는 것입니다. 어떤 업무든 “원본 숫자 → 집계 규칙 → 화면 숫자”의 연결을 명시하면 결과를 더 신뢰할 수 있습니다.
## 🚀 앞으로의 계획
다음 단계는 정기적으로 데이터를 갱신하고 이상 변화를 알려주는 자동화입니다. 새 데이터가 들어오면 기존과 같은 결측·중복·기간 검사를 실행하고, 가격이나 거래량이 정한 기준 이상으로 변한 지역을 알려주는 흐름으로 발전시킬 수 있습니다.
자동화에서도 가장 중요한 원칙은 유지할 계획입니다. API가 실패하면 이전 값이나 가짜 값으로 조용히 대체하지 않고, 실패한 지역과 기간을 정확하게 알리는 것입니다.