차량 센서 데이터와 분산 처리를 활용한 저비용·고효율 도로 관리 솔루션
여수국가산업단지 인근 지방도 863호선을 모델로 하여, 민원 신고에 의존하던 기존 도로 관리 방식을 데이터 기반의 선제적 보수 체계로 전환합니다.
여수공단(여수국가산업단지) 주변 지방도 863호선은 화물차 통행량이 많아 무거운 차량 하중으로 인한 도로 피로 파손 및 포트홀이 빈번하게 발생합니다.
포트홀(Pothole): 아스팔트 도로포장이 파손되어 노면 일부가 항아리(pot) 모양으로 움푹 패인 형태. 차량 파손과 교통사고를 유발하여 ’도로 위의 지뢰’ 라 불립니다.
| 항목 | 내용 |
|---|---|
| 일간 교통량 | 약 5,000대 (화물차 비중 높음) |
| 위험 요소 | 위험 시설물 인접, 사고 시 2차 피해 가능성 |
| 유지관리 예산 | 전라남도 포장도 유지관리 사업비 83.19억 원 |
지방도는 PMS(Pavement Management System) 를 예산 문제로 사용하지 못해 포트홀 발견을 민원 신고에 의존하고 있습니다.
| 구분 | 비용 | 한계점 |
|---|---|---|
| 정밀 장비 도입 | 5~9억 원 | 초기 투자 비용 과다 |
| 2~3년 주기 조사 | 약 6.8억 원 | 실시간 모니터링 불가 |
| 상시 운영 시 | 약 2,482억 원 (추정) | 재정적 부담 과다 |
24시간 조치 골든타임 확보
- 차량 센서 데이터 수집 → 분석 → 서빙까지 24시간 이내 완료
- 주무관이 출근 직후 전날 리포트를 확인하고 즉시 보수 팀 디스패치
한정된 자원의 효율적 배분
- 충격 강도, 발생 빈도, 도로 등급을 결합한 보수 우선순위 자동 산정
- 가장 위험한 곳에 자원을 먼저 투입할 수 있는 객관적 지표 제공
차량 센서 데이터를 활용하여 포트홀을 탐지합니다.
| 단계 | 설명 |
|---|---|
| 이상 탐지 (Stage1) | 차량 센서 데이터에서 Z축 가속도 기반 충격 이벤트를 판별 |
| 공간 클러스터링 (Stage2) | 50m 단위 세그먼트(s_id)별로 그룹화하여 포트홀 구간 집계 |
| 우선순위 산정 | 충격 강도 + 발생 빈도 + 도로 등급을 결합한 스코어링 시스템 |
| 설명 | |
|---|---|
| 포트홀 관제 대시보드 | 긴급 보수가 필요한 구간을 최상단에 배치한 ‘Action List’ 제공 |
| 자동 이메일 리포트 | 매일 배치 완료 후 담당 주무관에게 보수 우선순위 리포트 자동 발송 |
포트홀 관제 대시보드
자동 이메일 리포트
| 관점 | 효과 |
|---|---|
| 경제적 | PMS 대비 90% 이상 비용 절감, 소형 포트홀 선제 보수로 재포장 예산 절감 |
| 사회적 | 타이어 파손·연쇄 추돌 등 대형 사고 미연 방지, 차량 파손 배상 건수 감소 |
| 기술적 | Spark 기반 수평 확장 가능, 현장 보수 결과 환류를 통한 탐지 정확도 고도화 |
- 차량 센서 데이터 — 가속도, 자이로, GPS 등 주행 측정값 (S3 Parquet)
- 방지턱 데이터 — 방지턱 위도, 경도 데이터 (CSV)
- ITS 표준노드링크 — 863호선 도로 속성 (Shapefile)
- 외부 API — Kakao 역지오코딩, 공공 민원 데이터
각 단계별 Input/Output 스키마는 아래 토글에서 확인할 수 있습니다.
[1] 센서 데이터 수집 및 Stage 1 이상탐지
Input — 차량 센서 데이터 (S3 Parquet)
| 컬럼 | 타입 | 설명 |
|---|---|---|
timestamp |
TIMESTAMP | 센서 수집 시각 |
trip_id |
STRING | trip 식별자 |
vehicle_id |
STRING | 차량 식별자 |
accel_x/y/z |
DOUBLE | 3축 가속도 (m/s²) |
gyro_x/y/z |
DOUBLE | 3축 자이로스코프 (°/s) |
velocity |
DOUBLE | 주행 속도 (km/h) |
lon, lat |
DOUBLE | GPS 경·위도 |
hdop |
DOUBLE | GPS 수평 정밀도 저하율 |
satellites |
INT | GPS 수신 위성 수 |
Output — 이상탐지 결과
| 컬럼 | 타입 | 설명 |
|---|---|---|
timestamp |
TIMESTAMP | 센서 수집 시각 |
lon, lat |
DOUBLE | GPS 경·위도 |
impact_score |
DOUBLE | 정규화 센서값 기반 충격 점수 |
is_pothole |
INT | 포트홀 여부 (1, 0) |
[2] Stage 2 공간 클러스터링 (Stage 1 결과 + 도로망 조인)
Input 1 — Stage 1 이상탐지 결과 (위 Output과 동일)
Input 2 — 도로 세그먼트 (build_segments.py · 50m 분할)
| 컬럼 | 타입 | 설명 |
|---|---|---|
s_id |
STRING | 세그먼트 ID |
start_lon, start_lat |
DOUBLE | 시작점 GPS 좌표 |
end_lon, end_lat |
DOUBLE | 끝점 GPS 좌표 |
Output — UPSERT → pothole_segments
| 컬럼 | 타입 | 설명 |
|---|---|---|
s_id |
VARCHAR(50) | 세그먼트 ID |
centroid_lon, centroid_lat |
DOUBLE | 세그먼트 중심 좌표 |
date |
DATE | 집계 날짜 |
impact_count |
INTEGER | 포트홀 탐지 횟수 |
total_count |
INTEGER | 전체 포인트 수 |
[3] 사전 구축 및 데이터 로더 (PostgreSQL 적재)
build_road_grade.py → segment_road_grade
| 컬럼 | 타입 | 설명 |
|---|---|---|
s_id |
VARCHAR(50) | 세그먼트 ID |
link_id |
VARCHAR(50) | ITS 링크 ID |
road_grade |
INTEGER | 도로 위험도 등급 (1~5) |
complaint_loader → pothole_complaints
| 컬럼 | 타입 | 설명 |
|---|---|---|
create_dt |
DATE | 민원 접수일 |
event_lon, event_lat |
DOUBLE | 민원 좌표 |
nearest_s_id |
VARCHAR(50) | 500m 이내 매칭 세그먼트 |
distance_m |
DOUBLE | 매칭 거리 |
reverse_geocoding → segment_address
| 컬럼 | 타입 | 설명 |
|---|---|---|
s_id |
VARCHAR(50) | 세그먼트 ID |
road_name |
VARCHAR(200) | 도로명 |
district |
VARCHAR(100) | 시군구 |
[4] Materialized Views 집계 및 Dashboard 서빙
| 테이블/뷰 | 설명 |
|---|---|
pothole_segments |
세그먼트별 일간 포트홀 집계 (Fact, 월별 파티션) |
segment_address |
세그먼트 주소 — Kakao 역지오코딩 (Dimension) |
segment_road_grade |
도로 위험도 등급 1~5 |
pothole_complaints |
공공데이터 포트홀 민원 (500m 매칭) |
| Materialized Views | heatmap · 우선순위 스코어 · 주간 통계 |
각 모듈의 상세 내용은 개별 문서를 참고해 주세요.
| 모듈 | 역할 |
|---|---|
| ingestion_service | 863호선 가상 센서 데이터 생성 및 S3 적재 (Parquet) |
| road_network_builder | 863호선 도로망 50m 세그먼트 분할 + 도로 위험도 등급 산출 |
| processing_service | Spark 2단계 배치 처리 (이상탐지 → 공간 클러스터링) |
| serving_service | S3 → PostgreSQL 적재, MV 기반 대시보드, 우선순위 스코어링 |
| infra | Spark Standalone 클러스터 구성, EC2 온디맨드 기동/종료 |
| airflow_service | 4개 TaskGroup으로 구성된 일간 배치 파이프라인 DAG |
- S3 인터페이스를 통한 모듈 간 의존성 분리
- Airflow 장애 알림 설계
- GitHub Actions CD — Spark 코드 자동 배포
- 인프라 관리 — EC2 클러스터 온디맨드 운영
| 라연 | 장현우 | 조현우 |
![]() |
![]() |
![]() |
| DE | DE | DE |






