도난 차량 추적 API 개발자 가이드
서비스 개요
도난 차량 추적 서비스는 차량 도난 시 앱을 통해 실시간으로 차량의 위치를 추적하고 모니터링할 수 있는 텔레매틱스 서비스입니다.
서비스 특징
- 법적 근거에 기반한 위치 추적 (경찰 신고 확인 후 활성화)
- 고주파수 실시간 위치 추적 (수초에서 수십 초 단위 간격)
- 앱 및 콜센터를 위한 독립적인 추적 세션 관리
- 차량 시동이 꺼진(OFF) 상태에서도 지속적인 추적 가능
법적 요구사항
- 대부분의 국가에서 위치 정보 보호법 적용 대상임
- 도난 상황에서만 제한적으로 추적 권한 허용
- 고객의 사전 동의 필수
- 법적 증거 목적으로 추적 로그 저장 및 관리
주요 시나리오
시나리오 1: 도난 신고 및 추적 시작
엔티티별 API 흐름:
📱 앱 (사용자):
- 추적 시작: 경찰 신고 번호와 함께 고주파수 추적 시작
- 실시간 모니터링: SSE를 통한 실시간 위치 업데이트 수신
- 상태 확인: 차량 배터리 및 통신 신호 강도 모니터링
- 안전 구역: 위험 지역에 대한 알림 설정
🚗 차량 (TCU):
- 명령 수신: 추적 명령 수신 및 시스템 헬스 체크 수행
- 실시간 전송: 플랫폼으로 10초마다 좌표 전송
🏢 콜센터:
- 차량 모니터링: 모든 활성 도난 추적 세션 모니터링
- 경찰 공조: 현지 사법 기관과 회수 작업 조율
- 이동 차단: 차량 이동을 방지하기 위해 원격으로 엔진 구동 차단
시나리오 2: 실시간 추적 모니터링 및 제어
엔티티별 API 흐름:
📱 앱 (사용자):
- 실시간 위치 모니터링: SSE를 통해 지도상에 실시간 위치 표시
- 추적 상태 확인: 배터리, 통신 상태 등 확인
- 추적 분석 확인: 이동 패턴, 통계 분석 확인
- 지오펜스 관리: 위험 지역 진입/이탈 알림 설정
🚗 차량 (TCU):
- 고주파수 위치 전송: 10초 간격으로 위치 정보 지속 전송
- GPS 신호 모니터링: GPS 수신 상태에 따른 위치 정확도 조정
- 배터리 상태 전송: 배터리 임계값 모니터링 및 상태 전송
- 지오펜스 감지: 설정된 구역 진입/이탈 시 알림 전송
🏢 콜센터:
- 다중 차량 모니터링: 여러 대의 차량 추적 세션 동시 모니터링
- 위치 패턴 분석: 이동 경로, 속도 패턴 분석
- 추적 이력 조회: 시간대별 위치 이력 분석
- 위험 구역 관리: 범죄 다발 지역에 대한 지오펜스 설정
시나리오 3: 추적 종료 및 데이터 관리
엔티티별 API 흐름:
📱 앱 (사용자):
- 추적 중지: 차량 회수 후 추적 종료
- 데이터 내보내기: 보험사/경찰 제출용 보고서 생성
- 이동 차단 해제: 차량 기능 정상 복구
🏢 콜센터:
- 감사 분석: 회수 효율성 분석
- 이력 검토: 사건 발생 시점부터의 전체 경로 검토
시나리오 4: 긴급 상황 협력 대응
엔티티별 API 흐름:
🏢 콜센터:
- 긴급 상황 평가: 추적 데이터를 기반으로 긴급 상황 심각도 평가
- 즉시 경찰 공조: 자동 경찰 지원 요청
- 차량 이동 차단: 원격 차량 엔진 잠금 수행
- 실시간 추적 지원: 경찰의 추적을 돕기 위해 실시간 위치 정보 제공
📱 앱 (사용자):
- 긴급 알림 수신: SSE를 통해 긴급 상황 즉시 수신
- 실시간 위치 공유: 경찰과 실시간 위치 정보 공유
- 콜센터 연결: 긴급 상황 시 콜센터 즉시 연결
- 차량 원격 제어: 긴급 상황 시 즉각적인 차량 이동 차단 수행
🚗 차량 (TCU):
- 긴급 이벤트 전송: GPS 방해, 배터리 부족 등 긴급 상황 즉시 전송
- 최우선 위치 전송: 긴급 상황 시 최고 빈도로 위치 정보 전송
- 이동 차단 실행: 즉각적인 원격 차량 이동 차단 수행
- 지속적 상태 전송: 긴급 상황 종료 시까지 상태 정보 지속 전송
주요 기능
📱 앱 구현 기능
1. 추적 시작 및 모니터링
- 라이브 스트림: 실시간 GPS 업데이트 연결
- 세션 시작: 고주파수/고우선순위 추적 개시
- 라이브 트래커: 실시간 이동 및 상태 대시보드 제공
- 이벤트 알림: 지오펜스 및 시스템 경고 수신
2. 회수 및 보고
- 세션 종료: 차량 회수 후 추적 중지
- 증거 내보내기: 보험사/경찰용 보고서 생성
- 이력 감사: 과거 모든 위치 데이터 검토
- 분석 뷰: 패턴 및 통계적 통찰력 제공
🏢 콜센터 구현 기능
1. 중앙 집중식 추적 운영
- 세션 대시보드: 모든 활성 추적 세션 모니터링
- 라이브 플릿 뷰: 글로벌 위치 업데이트 수신
- 사건 알림: 실시간 시스템 경고 처리
- 추적 제어: 세션 수명 주기 관리 및 세션 수명 주기 종료
2. 회수 제어 및 분석
- 이동 차단: 도난 방지를 위한 원격 엔진 구동 차단
- 기능 복구: 차량 회수 후 제어 권한 복원
- 경로 분석: 이동 경로에 대한 심층 분석
- 법규 준수: 인증된 증거 로그 생성
시퀀스 다이어그램
도난 차량 추적 시스템 흐름
![]()
API 엔드포인트
헤더, 응답 코드 및 에러 형식은 공통 API 사양을 참조하십시오.
도난 차량 추적 (Stolen Vehicle Tracking)
도난 차량 추적 시작
bash
curl -X POST "https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/start" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
-H "Content-Type: application/json" \
-d '{
"reason": "STOLEN_VEHICLE",
"priority": "HIGH",
"reportingInterval": 10,
"gpsAccuracy": 10.0,
"batteryThreshold": 20.0,
"maxDuration": 86400,
"emergencyContact": "+82-10-1234-5678",
"policeReportNumber": "20240115-001234",
"notes": "주차장에서 차량 도난 발생"
}'도난 차량 추적 중지
bash
curl -X POST "https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/stop" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "sess_001",
"reason": "VEHICLE_RECOVERED",
"notes": "경찰에 의해 차량 발견 및 회수 완료",
"recoveryLocation": {
"latitude": 37.5665,
"longitude": 126.9780,
"address": "서울시 중구 세종대로 110"
}
}'추적 상태 조회
bash
curl -X GET "https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/status" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d"추적 이력 조회
bash
curl -X GET "https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/history?period=1h&limit=1000" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d"추적 분석 데이터 조회
bash
curl -X GET "https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/analytics?period=24h" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d"추적 데이터 내보내기
bash
curl -X POST "https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/export" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
-H "Content-Type: application/json" \
-d '{
"sessionId": "sess_001",
"format": "PDF",
"includeDetails": true,
"includeMap": true,
"purpose": "INSURANCE_CLAIM",
"emailRecipient": "user@example.com",
"startTime": "2024-01-15T20:15:00Z",
"endTime": "2024-01-15T21:30:00Z"
}'지오펜스 관리 (Geofence Management)
지오펜스 생성
bash
curl -X POST "https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/geofence" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
-H "Content-Type: application/json" \
-d '{
"name": "Home Area",
"type": "CIRCLE",
"enabled": true,
"coordinates": {
"center": {
"latitude": 37.5665,
"longitude": 126.9780
},
"radius": 500
},
"schedule": {
"active": true,
"days": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"],
"startTime": "09:00",
"endTime": "18:00"
},
"alerts": {
"entry": true,
"exit": true,
"notificationChannels": ["PUSH", "EMAIL", "SMS"]
}
}'지오펜스 목록 조회
bash
curl -X GET "https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/geofence" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d"실시간 이벤트 수신 (SSE)
차량 위치 실시간 업데이트 (SSE)
참고: 브라우저를 통해 접속하거나 전용 SSE 클라이언트 사용을 권장합니다.
bash
curl -N -H "Accept: text/event-stream" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
"https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/location/stream"추적 알림 수신 (SSE)
참고: 브라우저를 통해 접속하거나 전용 SSE 클라이언트 사용을 권장합니다.
bash
curl -N -H "Accept: text/event-stream" \
-H "Authorization: Bearer sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d" \
"https://api.ecarus.run/api/v1/security/vehicles/KMHSH81C7LU123456/stolen-tracking/notifications"데이터 모델
도난 차량 추적 시작 요청 (Start Request)
json
{
"reason": "STOLEN_VEHICLE",
"priority": "HIGH",
"reportingInterval": 10,
"gpsAccuracy": 10.0,
"batteryThreshold": 20.0,
"maxDuration": 86400,
"emergencyContact": "+82-10-1234-5678",
"policeReportNumber": "20240115-001234",
"notes": "주차장에서 차량 도난 발생"
}도난 차량 추적 시작 응답
json
{
"vin": "KMHSH81C7LU123456",
"sessionId": "sess_001",
"status": "ACTIVE",
"startTime": "2026-03-11T14:30:00Z",
"trackingMode": "AGGRESSIVE",
"reportingInterval": 10,
"maxDuration": 86400
}도난 차량 추적 중지 요청 (Stop Request)
json
{
"sessionId": "sess_001",
"reason": "VEHICLE_RECOVERED",
"notes": "경찰에 의해 차량 발견 및 회수 완료",
"recoveryLocation": {
"latitude": 37.5665,
"longitude": 126.9780,
"address": "서울시 중구 세종대로 110"
}
}도난 차량 추적 중지 응답
json
{
"vin": "KMHSH81C7LU123456",
"sessionId": "sess_001",
"status": "STOPPED",
"stopTime": "2026-03-11T18:30:00Z",
"totalDuration": 14400,
"totalDistance": 15.7,
"locationCount": 480
}추적 상태 응답 (Status Response)
json
{
"vin": "KMHSH81C7LU123456",
"sessionId": "sess_001",
"status": "ACTIVE",
"startTime": "2026-03-11T14:30:00Z",
"duration": 600,
"trackingMode": "AGGRESSIVE",
"reportingInterval": 10,
"currentLocation": {
"latitude": 37.5665,
"longitude": 126.9780,
"address": "서울시 강남구 테헤란로",
"timestamp": "2026-03-11T14:45:00Z",
"accuracy": 5.0,
"speed": 25.5,
"heading": 180.0
},
"vehicleStatus": {
"batteryLevel": 85,
"signalStrength": -75,
"gnssStatus": "NORMAL",
"networkStatus": "CONNECTED",
"ignitionStatus": "OFF"
},
"trackingStats": {
"totalDistance": 2.3,
"averageSpeed": 23.9,
"maxSpeed": 35.2,
"locationCount": 60
}
}추적 이력 응답 (History Response)
json
{
"vin": "KMHSH81C7LU123456",
"sessionId": "sess_001",
"period": "1h",
"locations": [
{
"latitude": 37.5665,
"longitude": 126.9780,
"timestamp": "2026-03-11T14:45:00Z",
"speed": 25.5,
"heading": 180.0,
"accuracy": 5.0
},
{
"latitude": 37.5660,
"longitude": 126.9775,
"timestamp": "2026-03-11T14:44:30Z",
"speed": 22.3,
"heading": 175.0,
"accuracy": 4.8
}
],
"total": 120,
"trackingStats": {
"totalDistance": 15.7,
"averageSpeed": 23.9,
"maxSpeed": 45.2,
"trackingDuration": 3600,
"locationCount": 120
}
}추적 분석 응답 (Analysis Response)
json
{
"vin": "KMHSH81C7LU123456",
"sessionId": "sess_001",
"period": "24h",
"analytics": {
"summary": {
"totalDistance": 45.2,
"averageSpeed": 28.5,
"maxSpeed": 65.3,
"trackingDuration": 86400,
"locationCount": 2880
},
"speedAnalysis": {
"idleTime": 7200,
"lowSpeedTime": 14400,
"normalSpeedTime": 43200,
"highSpeedTime": 21600
},
"locationAnalysis": {
"urbanAreas": 65.5,
"highways": 25.3,
"ruralAreas": 9.2
},
"timeAnalysis": {
"daytimeTracking": 43200,
"nighttimeTracking": 43200,
"peakHours": 10800
}
}
}추적 데이터 내보내기 요청 (Export Request)
json
{
"sessionId": "sess_001",
"format": "PDF",
"includeDetails": true,
"includeMap": true,
"purpose": "INSURANCE_CLAIM",
"emailRecipient": "user@example.com",
"startTime": "2024-01-15T20:15:00Z",
"endTime": "2024-01-15T21:30:00Z"
}추적 데이터 내보내기 응답
json
{
"vin": "KMHSH81C7LU123456",
"sessionId": "sess_001",
"exportId": "EXP-20260311-001",
"status": "PROCESSING",
"format": "PDF",
"estimatedCompletion": "2026-03-11T18:45:00Z"
}지오펜스 생성 요청 (Geofence Creation Request)
json
{
"name": "Home Area",
"type": "CIRCLE",
"enabled": true,
"coordinates": {
"center": {
"latitude": 37.5665,
"longitude": 126.9780
},
"radius": 500
},
"schedule": {
"active": true,
"days": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"],
"startTime": "09:00",
"endTime": "18:00"
},
"alerts": {
"entry": true,
"exit": true,
"notificationChannels": ["PUSH", "EMAIL", "SMS"]
}
}지오펜스 생성 응답
json
{
"vin": "KMHSH81C7LU123456",
"sessionId": "sess_001",
"fenceId": "fence-001",
"name": "Home Area",
"status": "ACTIVE",
"createdTime": "2026-03-11T14:40:00Z"
}지오펜스 목록 응답 (Geofence List Response)
json
{
"vin": "KMHSH81C7LU123456",
"sessionId": "sess_001",
"geofences": [
{
"fenceId": "fence-001",
"name": "Home Area",
"type": "CIRCLE",
"coordinates": {
"center": {
"latitude": 37.5665,
"longitude": 126.9780
},
"radius": 500
},
"status": "ACTIVE",
"createdTime": "2026-03-11T14:40:00Z",
"lastTriggered": "2026-03-11T15:15:00Z",
"triggerCount": 3
}
],
"total": 1
}차량 위치 실시간 업데이트 (SSE)
json
{
"eventId": "EVT_001",
"type": "LOCATION_UPDATE",
"timestamp": "2026-03-11T14:45:00Z",
"priority": "HIGH",
"data": {
"sessionId": "sess_001",
"vin": "KMHSH81C7LU123456",
"location": {
"latitude": 37.5665,
"longitude": 126.9780,
"address": "서울시 강남구 테헤란로",
"timestamp": "2026-03-11T14:45:00Z",
"accuracy": 5.0,
"speed": 25.5,
"heading": 180.0
},
"vehicleStatus": {
"batteryLevel": 85,
"signalStrength": -75,
"gnssStatus": "NORMAL",
"networkStatus": "CONNECTED",
"ignitionStatus": "OFF"
}
}
}추적 알림 수신 (SSE)
json
{
"eventId": "EVT_002",
"type": "GEOFENCE_TRIGGERED",
"timestamp": "2026-03-11T15:15:00Z",
"priority": "MEDIUM",
"data": {
"sessionId": "sess_001",
"vin": "KMHSH81C7LU123456",
"fenceId": "fence-001",
"fenceName": "Home Area",
"alertType": "EXIT",
"location": {
"latitude": 37.5665,
"longitude": 126.9780,
"address": "서울시 강남구 테헤란로",
"timestamp": "2026-03-11T15:15:00Z"
}
}
}보안 및 프라이버시
인증 및 권한 부여
- 사용자 인증 토큰 필요 (JWT/OAuth2)
- 도난 추적 권한에 대한 사전 동의 확인
- 세션 기반의 접근 제어 적용
데이터 보안
- 모든 API 통신은 HTTPS/TLS 암호화
- 위치 데이터 전송 시 추가 암호화 적용
- 민감 정보는 서버측에만 저장하고 앱 내 저장은 최소화
프라이버시 보호
- 위치 정보 수집 목적의 사용 범위 명시
- 데이터 보존 기간 정책 준수
- 사용자 요청 시 데이터 삭제 권리 보장
- 법적 요구사항에 따른 추적 로그 저장
접근 제어
- VIN 기반 차량 접근 권한 확인
- 도난 신고 확인 후 추적 권한 부여
- 외부 기관(경찰) 접근을 위한 별도 인증 절차 적용
예외 처리
네트워크 관련
- 연결 실패: 오프라인 모드 지원, 마지막 데이터 캐싱
- 응답 지연: 로딩 인디케이터, 타임아웃 처리
- 서버 다운: 에러 메시지 표시, 재시도 제안
GPS/위치 관련
- GPS 수신 불량: 마지막 위치 표시 및 '위치 신뢰도 낮음' 알림
- GNSS 간섭: 위치 신뢰도 플래그 표시, Cell ID 기반 위치 추정 시도
- 지하 주차장: 마지막 실외 위치 유지 및 상태 메시지 표시
차량 상태 관련
- 차량 오프라인: 마지막 위치 및 오프라인 시점 표시
- 배터리 부족: 경고 알림 전송 및 추적 간격 자동 조제 제안
- 통신 음영 지역: 주기적 상태 업로드 지속 및 재연결 시 데이터 전송
앱 크래시/오류
- 앱 크래시: 데이터 복구 기능 및 세션 자동 복구
- 백그라운드 처리: 위치 업데이트를 위한 백그라운드 서비스 운영
- 메모리 부족: 데이터 최소화 및 캐시 정책 운영
사용자 오류
- 잘못된 사건 번호: 형식 검증 및 재입력 요청
- 중복 신고: 기존 신고 확인 메시지 노출
- 권한 없음: 권한 안내 및 동의 절차 안내
테스트 설정
Base URL: https://api.ecarus.run/api/v1/security
인증 토큰: sk_4f9c7b8e2d1a6c0f3e7a9b5d8c1e4f2a7c6d9e0b3f5a8c1d4e7f9b2c6a1e3d
샘플 VIN: KMHSH81C7LU123456
대화형 API 테스트를 위해 Swagger UI를 사용하십시오.
배포 고려사항
앱 스토어 등록
- 위치 정보 수집에 대한 명확한 설명 제공
- 개인정보 처리방침 제공
- 긴급 상황 알림 권한 요청
법규 준수
- 국가별 위치 정보 보호법 준수
- 데이터 국외 전송 규정 확인
- 수사 기관 정보 제공에 대한 절차 마련