[Pilot Test Analysis System] 공간 데이터 관리 및 프론트엔드 대시보드 렌더링 최적화

2 min read

스쿨존 및 사고 다발지 데이터를 조회하는 공간 데이터 처리 파이프라인과 사고 위험도 분석 모델을 구축했다. 프론트엔드 아키텍처의 비즈니스 로직과 UI 계층 결합도를 낮춰 지도 렌더링 성능을 개선했다.

[PostGIS / Architecture] 공간 데이터 아키텍처 도입

  • 단순 위경도 조회를 PostGIS Geometry 타입으로 변경해 공간 연산을 데이터베이스 단에서 처리하도록 아키텍처를 개선했다.
  • 스쿨존 반경 폴리곤 데이터를 데이터베이스 네이티브 쿼리로 GeoJSON 텍스트 형태 캐싱·반환하도록 응답 파이프라인을 개선했다.
  • 스쿨존 중심점과 영역 데이터를 분리하는 엔티티 정규화를 수행해 쿼리 조회 성능을 개선했다.

[Algorithm / Analysis] 정책 기반 사고 위험도 감쇠 모델 적용

  • 도로교통공단 데이터를 활용해 사고 다발지 위험도 모델을 개선했다.
  • EPDO(대물 피해 환산법) 알고리즘(사망 12점, 중상 3점, 경상 3점, 부상신고 1점)에 시간 감쇠 가중치 및 발생 빈도를 곱하는 수식을 적용했다. 민식이법 시행(2020년) 기준 0.85 지수 감쇠, 노란 횡단보도 도입(2022년) 기준 1.0 가중치를 부여해 최신 도로 인프라 개선 사항을 모델에 반영했다.
  • 위험도 점수를 비동기적으로 일괄 재계산하는 백그라운드 분석 파이프라인을 추가했다.

[PostgreSQL / Indexing] Bounding Box 공간 검색 및 인덱싱

  • 화면 줌 레벨과 지도 영역에 맞춰 데이터만 선별 조회하는 공간 쿼리 인터페이스를 구현했다.
  • 테이블에 GiST 공간 인덱스를 적용해 교차 영역 검색 쿼리 실행 속도를 개선했다.
  • 카테고리 및 연도별 검색 로직을 백엔드로 분리해 클라이언트 데이터 필터링 부하를 해결했다.

[React / Rendering] 맵 렌더링 레이어 모듈화

  • 사고 다발지 마커, 스쿨존 폴리곤, 클러스터링을 단일 컴포넌트에서 처리하던 구조를 분리해 독립적인 레이어 컴포넌트로 변경했다.
  • 레이어별 React state 구독을 최소화해, 마커 렌더링이나 정보 오버레이 시 전체 지도 렌더 트리가 리렌더링되지 않도록 개선했다.

[React / State Management] 비즈니스 로직 및 상태 관리 추상화

  • 데이터 패칭 및 에러 핸들링 로직을 커스텀 훅으로 분리해 뷰 계층 종속성을 제거했다.
  • 차트 줌, 마우스 인터랙션 등 상태를 별도 객체로 분리해 컴포넌트 복잡도를 개선했다.
  • 클라이언트 측 상태 파생을 제거하고, 위험도 점수 조건 등 비즈니스 판단 데이터를 서버에서 정렬·필터링해 수신하도록 구조를 변경했다.