서울시 소음·공사장·전월세 공공데이터를 통합해 조용한 이사 지역을 찾아주는 지도 서비스입니다.
- 소음 지도 — 서울 425개 행정동의 소음 수준을 색상 폴리곤으로 시각화
- 공사장 현황 — 진행 중인 대규모 공사장을 마커로 표시
- 전월세 정보 — 아파트/연립다세대/오피스텔 전월세 실거래가 요약
- 지역 검색 — 동 이름으로 검색 시 해당 위치로 지도 이동
- 지역 상세 — 소음/공사장/부동산 데이터를 탭으로 확인, 공사장 목록 더보기 지원
- 지역 비교 — 두 지역을 나란히 비교 (소음/공사장/부동산)
- 기간 필터 — 3개월/6개월/12개월 단위로 조회 기간 선택
- 다크 모드 — 라이트/다크 테마 전환 지원
| 구분 |
기술 |
| Frontend |
Next.js 15, React, TypeScript, TanStack Query |
| Backend |
FastAPI, SQLAlchemy (async), Pydantic v2 |
| Database |
MySQL 8.0, Redis 7.0 |
| Map |
Kakao Maps JavaScript SDK |
| Infra |
Docker Compose |
| 데이터 |
출처 |
용도 |
| 소음 측정 |
서울시 S-DoT (IoT 센서) |
동별 평균 소음 수준 |
| 대규모 공사장 |
행정안전부 공유플랫폼 (DSSP-IF-10684) |
공사장 마커 + 상세 정보 |
| 건설공사 현황 |
행정안전부 생활안전지도 (IF_0043) |
공사장 데이터 보완 (fallback) |
| 건축허가 |
국토교통부 건축인허가 (ArchPmsService_v2) |
공사장 데이터 보완 (fallback) |
| 비산먼지 공사장 |
행정안전부 비산먼지발생사업정보 |
진행 중인 공사장 수집 |
| 아파트 전월세 |
국토교통부 아파트 전월세 실거래가 |
전세/월세 평균, 범위 |
| 연립다세대 전월세 |
국토교통부 연립다세대 전월세 실거래가 |
전세/월세 평균, 범위 |
| 오피스텔 전월세 |
국토교통부 오피스텔 전월세 실거래가 |
전세/월세 평균, 범위 |
| 좌표 변환 |
카카오 로컬 API |
공사장 주소 → 좌표 지오코딩 |
데이터 수집은 자동 스케줄러 없이 sync API를 수동 호출하는 방식입니다.
수집된 데이터는 MySQL에 저장되고 Redis로 캐싱되어 사용자 요청 시 제공됩니다.
- Docker & Docker Compose
- 아래 API 키 발급 필요
# 1. 저장소 클론
git clone https://github.com/wpdlf/soeum-free.git
cd soeum-free
# 2. 환경변수 설정
cp .env.example .env
cp frontend/.env.local.example frontend/.env.local
# .env 파일을 열어 API 키 입력
# 3. Docker 실행
docker compose up -d
# 4. 접속
# Frontend: http://localhost:3000
# Backend API: http://localhost:8000/docs
서비스 시작 후 API를 호출하여 데이터를 수집합니다.
# 소음 데이터 수집
curl -X POST http://localhost:8000/api/v1/data/sync/noise \
-H "Content-Type: application/json" -d '{}'
# 공사장 데이터 수집 (SafetyData → SafeMap → 국토교통부 순으로 시도)
curl -X POST http://localhost:8000/api/v1/data/sync/construction \
-H "Content-Type: application/json" -d '{}'
# 비산먼지 공사장 수집
curl -X POST http://localhost:8000/api/v1/data/sync/dust-emission \
-H "Content-Type: application/json" -d '{}'
# 공사장 좌표 채우기 (카카오 지오코딩)
curl -X POST http://localhost:8000/api/v1/data/sync/construction/geocode \
-H "Content-Type: application/json"
# 전월세 데이터 수집 (특정 월)
curl -X POST http://localhost:8000/api/v1/data/sync/real-estate \
-H "Content-Type: application/json" -d '{"year_month": "202603"}'
soeum-free/
├── backend/
│ ├── app/
│ │ ├── models/ # SQLAlchemy 모델
│ │ ├── repositories/ # DB 접근 계층
│ │ ├── routers/ # API 엔드포인트
│ │ ├── schemas/ # Pydantic 스키마
│ │ ├── services/ # 비즈니스 로직 (데이터 수집, 캐시)
│ │ └── utils/ # 유틸리티
│ ├── alembic/ # DB 마이그레이션
│ ├── Dockerfile
│ └── requirements.txt
├── frontend/
│ ├── src/
│ │ ├── app/ # Next.js 페이지 (메인, 상세, 비교)
│ │ ├── components/
│ │ │ ├── layout/ # Header, 공통 레이아웃
│ │ │ ├── map/ # 카카오맵, 소음 폴리곤, 공사장 마커
│ │ │ ├── search/ # 지역 검색
│ │ │ └── ui/ # Card, Badge, ConstructionList 등
│ │ ├── contexts/ # Context (지도 상태)
│ │ ├── hooks/ # Custom hooks
│ │ ├── lib/ # API 클라이언트, 유틸
│ │ └── types/ # TypeScript 타입
│ ├── public/geo/ # 서울 행정동 GeoJSON
│ └── Dockerfile
├── db/init/ # DB 초기 시드 데이터 (75개 행정동)
├── docker-compose.yml
└── .env.example
| Method |
Path |
설명 |
| GET |
/api/v1/regions |
전체 지역 목록 |
| GET |
/api/v1/regions/search?q= |
지역 검색 |
| GET |
/api/v1/regions/{id} |
지역 상세 (소음+공사장+부동산) |
| GET |
/api/v1/compare |
두 지역 비교 |
| GET |
/api/v1/noise |
소음 데이터 목록 |
| GET |
/api/v1/noise/map |
소음 지도 데이터 |
| GET |
/api/v1/construction |
공사장 데이터 목록 |
| GET |
/api/v1/construction/map |
공사장 지도 데이터 |
| GET |
/api/v1/real-estate |
전월세 데이터 목록 |
| GET |
/api/v1/real-estate/map |
전월세 지도 데이터 |
| GET |
/api/v1/real-estate/link |
네이버 부동산 링크 |
| Method |
Path |
설명 |
| POST |
/api/v1/data/sync/noise |
소음 데이터 수집 |
| POST |
/api/v1/data/sync/construction |
공사장 데이터 수집 (3단계 fallback) |
| POST |
/api/v1/data/sync/dust-emission |
비산먼지 데이터 수집 |
| POST |
/api/v1/data/sync/construction/geocode |
공사장 좌표 변환 (카카오) |
| POST |
/api/v1/data/sync/real-estate |
전월세 데이터 수집 |
개인 포트폴리오 프로젝트로, 별도 오픈소스 라이선스를 적용하지 않습니다.
모든 권리는 저작권자에게 있으며, 코드의 복제·수정·재배포를 허용하지 않습니다.
수집 데이터는 각 공공데이터 제공기관의 이용약관을 따릅니다.