CMU02
프로젝트 목록
GitHub서비스 바로가기

CleanBreath

안양시 금연·흡연구역을 지도 폴리곤으로 시각화하는 웹 서비스 (6인 팀 프로젝트, PL/백엔드 담당)

TypeScriptReactJavaSpring BootMySQLKakao Map API

87%↓

쿼리 응답 개선

95%↓

API 호출 절감

74→91

Lighthouse 성능

6인

팀 규모

Topics

  • 현장 답사 및 데이터 수집 툴 개발
  • 쿼리 최적화 - 문서
  • 2중 캐싱 기반 데이터 효율화

Sections

  • 1. Problem
  • 2. Trade-off
  • 3. Architecture
  • 4. Verification
  • 5. Retrospective

현장 답사 및 데이터 수집 툴 개발

공공 데이터 한계를 극복하기 위한 직접 현장 답사와 수집 툴 설계

Problem

→ 공공 데이터만으로는 안양시 전체를 커버하기 부족하여, 팀원들이 직접 현장을 돌며 데이터를 수집하는 전략을 선택했습니다.

공공데이터포털에서 제공하는 금연·흡연 구역 데이터는 안양시 전체를 커버하기에 부족했고, 실제 현장 상황을 제대로 반영하지 못하고 있었습니다. '건물 단위' 정보는 있지만 어디까지가 금연/흡연 구역인지 경계가 시각적으로 보이지 않는 문제가 있었습니다.

  • ▸공공 데이터가 적고 실제 현장과 불일치하는 구간이 다수 존재
  • ▸좌표·경계 정보가 부정확하여 폴리곤 시각화에 바로 활용 불가
  • ▸팀원들이 현장에서 수집한 데이터를 체계적으로 입력할 도구가 없음
  • ▸현장 답사 데이터를 서비스 DB에 적재하는 파이프라인 부재

Trade-off

→ 공공 데이터 단독 사용 대신 현장 답사 + 자체 수집 툴 전략을 선택하여 실제 현장 데이터를 확보했습니다.

공공 데이터만 활용

장점

  • 추가 개발 불필요
  • 데이터 수집 비용 없음

단점

  • 안양시 전체 커버리지 부족
  • 실제 현장과 불일치하는 데이터 다수
  • 경계 정보 부정확으로 폴리곤 시각화 품질 저하
현장 답사 + 자체 수집 툴 개발

장점

  • 실제 현장 기반의 정확한 데이터 확보
  • 흡연 부스 위치, 금연 표지판, 실제 사용 장소까지 수집 가능
  • 팀원들이 쉽게 데이터를 입력할 수 있는 전용 툴 제공
  • 수집 데이터가 서비스 DB에 직접 적재되는 파이프라인 구축

단점

  • 수집 웹사이트 + 백엔드 API 추가 개발 필요
  • 팀원들의 현장 답사 시간 투자 필요

의사결정

공공 데이터만으로는 부족하다고 판단하여, 팀원들과 함께 직접 현장 답사 + 자체 데이터 수집 툴 전략을 선택했습니다. 안양시 동안구 내 3개 구역으로 나누어 팀원들이 직접 현장을 돌며 데이터를 수집했습니다.

Trade-off: 수집 툴 개발에 추가 공수가 들었지만, 실제 현장 데이터를 확보함으로써 서비스의 핵심 가치인 '정확한 시각화'를 실현할 수 있었습니다.

Architecture

→ 좌표·메타데이터 입력용 수집 웹사이트와 CleanBreath DB 적재 API를 구현하여 팀원들의 현장 데이터를 손실 없이 수집했습니다.

팀원들이 현장 답사로 모은 데이터를 잃지 않도록, 좌표/메타데이터 입력용 수집 웹사이트와 해당 데이터를 CleanBreath 서비스 DB에 적재하는 백엔드 API를 구현했습니다. 안양시 동안구 내 3개 구역(2곳, 2곳, 1곳)으로 나누어 팀원들이 직접 현장을 돌며 실제 흡연 부스 위치, 금연 표지판 위치, 시민들이 실제로 사용하는 흡연 장소를 조사했습니다.

구현 흐름

  1. 1안양시 동안구를 3개 구역으로 분할하여 팀원 배정
  2. 2현장에서 실제 흡연 부스 위치, 금연 표지판, 시민 사용 장소 조사
  3. 3좌표·메타데이터를 쉽게 입력할 수 있는 수집용 웹사이트 개발
  4. 4수집 데이터를 CleanBreath 서비스 DB에 적재하는 백엔드 API 구현
  5. 5수집된 좌표 데이터를 기반으로 폴리곤 경계 생성 및 시각화

Verification

→ 공공 데이터와 1주일 현장 수집을 병합하여 흡연구역 12개·금연구역 226개의 데이터 기반을 마련했습니다.

2024년 7월 10일부터 17일까지 약 1주일간, 팀원 5명이 안양시 동안구를 3개 구역으로 나눠 직접 현장을 돌며 데이터를 수집했습니다. 수집 툴을 통해 입력된 좌표·메타데이터가 CleanBreath 서비스 DB에 정상 적재되고, 지도 위 폴리곤으로 시각화되는 전체 파이프라인을 검증했습니다.

12개

흡연구역

공공 데이터 + 현장 수집 합산

226개

금연구역

공공 데이터 + 현장 수집 합산

약 1주일

현장 답사 기간

2024.07.10 ~ 07.17, 팀원 5명 참여

  • 안양시 동안구 3개 구역 현장 답사 완료 — 팀원 5명이 구역 분담하여 흡연 부스·금연 표지판·실사용 장소 조사
  • 수집 웹사이트를 통한 좌표 입력 → DB 적재 → 폴리곤 렌더링 파이프라인 정상 동작 확인
  • 공공 데이터 단독 대비 현장 실측 데이터 병합으로 폴리곤 커버리지 및 경계 정확도 향상

Retrospective

→ 현재 안양시 특정 구역에 집중된 데이터 커버리지를 크라우드소싱 모델로 확장할 수 있습니다.

한계점

현재 CleanBreath는 안양시 특정 구역에 집중된 데이터를 다루고 있어, 전국/광역 서비스로 보기엔 데이터 커버리지가 부족합니다. 팀원들의 현장 답사에 의존하는 구조라 지속적인 데이터 갱신에 한계가 있습니다.

보완 방향

수집 툴을 일반 사용자/지자체도 쉽게 사용할 수 있는 형태로 확장하여 크라우드소싱 기반 데이터 수집 모델을 도입하거나, 지자체·보건소와 협업하여 공식 데이터와 현장 데이터를 병합하는 전략을 고려할 수 있습니다.

Gallery

→ 현장 답사에서 직접 촬영한 사진입니다.

빨간색으로 표시한 구역이 답사 완료 구역. 동안구를 3개 구역으로 나눠 팀원 5명이 분담했습니다.
답사 지도

빨간색으로 표시한 구역이 답사 완료 구역. 동안구를 3개 구역으로 나눠 팀원 5명이 분담했습니다.

학운공원 — 금연공원으로 지정되어 금연구역 표시가 많지만, 버스기사님들이 버스정류장 앞에서 흡연하는 실태를 현장에서 확인했습니다.
현장

학운공원 — 금연공원으로 지정되어 금연구역 표시가 많지만, 버스기사님들이 버스정류장 앞에서 흡연하는 실태를 현장에서 확인했습니다.

한가람한양 아파트 — 금연아파트로 지정되어 곳곳에 금연구역 표시가 있습니다.
현장

한가람한양 아파트 — 금연아파트로 지정되어 곳곳에 금연구역 표시가 있습니다.

직접 개발한 수집 툴로 현장 데이터를 입력하는 모습. 금연지정 아파트에서는 흡연구역이 없어 대부분 경비실 앞이나 금연구역에서 흡연하는 패턴을 발견했습니다.
수집 툴

직접 개발한 수집 툴로 현장 데이터를 입력하는 모습. 금연지정 아파트에서는 흡연구역이 없어 대부분 경비실 앞이나 금연구역에서 흡연하는 패턴을 발견했습니다.

샛별한양 아파트 — 공식 흡연구역이 아닌 암묵적 흡연 장소 2곳을 현장에서 발견. 공공 데이터에는 없는 정보입니다.
암묵적 흡연구역

샛별한양 아파트 — 공식 흡연구역이 아닌 암묵적 흡연 장소 2곳을 현장에서 발견. 공공 데이터에는 없는 정보입니다.

동안구청 앞 흡연구역 — 공공기관 앞 실제 흡연 실태.
흡연구역

동안구청 앞 흡연구역 — 공공기관 앞 실제 흡연 실태.

범계역 신한은행 앞 — 정확한 주소 특정이 어려운 케이스로, 공공 데이터만으로는 파악 불가능한 흡연 장소입니다.
흡연구역

범계역 신한은행 앞 — 정확한 주소 특정이 어려운 케이스로, 공공 데이터만으로는 파악 불가능한 흡연 장소입니다.

역할

  • PL / 백엔드 개발
  • 프론트엔드 유지보수 병행

기술 스택

  • Spring Boot + JPA
  • MySQL (복합 인덱스)
  • Next.js + TypeScript
  • Kakao Map SDK
  • TanStack Query + IndexedDB

AI 도구 활용

  • Kiro IDE — 유지보수 시 오류 재현 → 원인 분석 → 수정 → 검증 에이전틱 워크플로우로 문제 해결

추가 자료

  • GitHub Repository
  • 서비스 바로가기