개인 프로젝트

SweetHome

#데이터#풀스택#Azure#AI 활용

서로 다른 공공데이터를 같은 기준으로 보는 주거 의사결정 서비스

기간
2026.06 ~ 진행 중
담당 역할
제품 경계 · Data Pipeline · Backend (1인 개발)

01 / 서비스 소개

주거 환경 선택에 어려움을 겪는 친구들의 불편을 관찰해, 흩어진 공공데이터를 공통화해서 지역을 비교하는 주거 의사결정 서비스입니다.

02 / 선택과 실행

흩어진 정보 → 같은 지역 기준으로 막연한 선택 → 근거를 보고 비교하기

가격·교통·생활 환경을 따로 찾아보던 수고를 줄이고 싶었습니다. 데이터를 한곳에 모으는 것만으로는 비교가 어려워, 서로 다른 지역 기준을 맞추고 믿고 볼 수 있는 값인지 확인하는 데 집중했습니다.

  1. 01

    서로 다른 지역 기준 맞추기

    실거래는 법정동, 시설은 좌표, 통계는 행정동 기준이었습니다. 행정동을 공통 기준으로 정하고, 좌표는 경계와 연결했습니다. 여러 행정동에 걸친 거래에는 가중치를 적용해 중복 집계를 막았습니다.

  2. 02

    비교 전에 데이터 검증하기

    지역 코드 누락·중복과 표본 부족을 검사하고, 검증에 실패하면 서비스 데이터 갱신을 멈추도록 했습니다. 값이 없는 곳은 0으로 채우지 않고 출처와 기준일을 함께 보여줬습니다.

  3. 03

    찾기부터 비교까지 연결하기

    예산과 생활 우선순위로 후보를 찾고, 지도에서 확인한 뒤 두 지역을 비교하도록 연결했습니다. 반복되는 집계는 미리 계산하고 API 시작 시 준비해, 요청마다 같은 데이터를 다시 읽고 계산하는 일을 줄였습니다.

03 / 결과와 배움

서울 426개 행정동의 데이터를 연결하고, 조건에 맞는 후보 탐색부터 지도 확인·두 지역 비교까지 이어지는 서비스를 구현해 공개했습니다.

데이터 계약으로 검증한 결과2026.08.27 저장소 기록 기준
426개
서울 현행 행정동
1,084,937행
유효 전월세 거래 연결
0건
최종 mart 지역 키 null·중복
426 / 426
교통 근거 제공 범위

운영 성과가 아니라 로컬 원천과 산출물의 품질 검증 결과입니다. 원천별 기준일과 최신 가용월은 서비스 메타데이터에서 따로 제공합니다.

데이터를 많이 모으는 것보다 같은 기준으로 연결하고, 값이 없는 이유까지 보여주는 일이 중요했습니다. 하나의 추천 점수로 답을 정하기보다 사용자가 자신의 우선순위로 지역을 비교할 수 있도록 설계했습니다.

트러블슈팅

같은 거래가 여러 번 집계되는 문제

하나의 법정동이 여러 행정동에 연결되면, 단순히 데이터를 합칠 때 같은 거래가 반복됩니다. 연결된 행정동이 n개라면 각 지역에 1/n의 가중치를 적용해 전체 거래량이 부풀려지지 않도록 했습니다.

거래 1건 → 행정동 2곳에 연결
↓ 각각 1/2씩 반영
A동 · 0.5건
B동 · 0.5건

합계는 1건으로 유지됩니다. 실제 주소를 특정하는 대신 지역 간 배분으로 중복을 줄인 방식입니다.

콜드 스타트로 첫 요청이 느려지는 문제

서버 비용을 아끼려고 접속이 없을 때는 Web과 API가 모두 꺼지도록 설정했습니다. 그런데 한동안 사용하지 않다가 접속하면 서버가 다시 켜지고 데이터를 읽는 동안 첫 화면이 늦게 뜨는 문제가 있었습니다.

서버가 준비되는 동안 조회 요청을 다시 시도하도록 횟수와 대기 시간을 정했습니다. 또 FastAPI가 시작할 때 데이터를 한 번 읽어 캐시에 보관해, 이후 요청에서는 같은 파일을 읽고 계산하는 일을 반복하지 않도록 했습니다.

지금은 비용을 줄이는 설정을 유지하고 있지만, 사용자가 늘면 서버를 항상 켜 두는 쪽도 고려하는 등 개선해 나갈 예정입니다.

Azure 인프라 구성

공개 웹과 내부 API를 분리한 서비스 구조
사용자 브라우저
↓ HTTPS
AZURE CONTAINER APPS
Easy Auth · Google / GitHub 로그인
↓
공개 웹Next.js · BFF화면 제공 · 허용된 API 요청 전달
→내부 통신
내부 APIFastAPI지역 탐색 · 비교 · 리포트
↓ FastAPI에서 데이터 조회
검증된 데이터 파일공공데이터 → Python 가공·검증
비교용 데이터 미리 준비
PostgreSQLTLS 연결
인증 식별자 · 약관 · 저장 리포트
컨테이너 빌드와 배포
  1. GitHub ActionsWeb / API 이미지 빌드
  2. Azure Container Registry이미지 저장
  3. Container AppsBicep으로 배포 구성 적용

GitHub OIDC로 배포를 인증하고, Managed Identity로 이미지를 가져옵니다. 별도 Migration Job이 데이터베이스 스키마를 반영합니다.