Skip to content

도난 차량 추적 API 개발자 가이드

서비스 개요

도난 차량 추적 서비스는 차량 도난 시 앱을 통해 실시간으로 차량의 위치를 추적하고 모니터링할 수 있는 텔레매틱스 서비스입니다.

서비스 특징

  • 법적 근거에 기반한 위치 추적 (경찰 신고 확인 후 활성화)
  • 고주파수 실시간 위치 추적 (수초에서 수십 초 단위 간격)
  • 앱 및 콜센터를 위한 독립적인 추적 세션 관리
  • 차량 시동이 꺼진(OFF) 상태에서도 지속적인 추적 가능

법적 요구사항

  • 대부분의 국가에서 위치 정보 보호법 적용 대상임
  • 도난 상황에서만 제한적으로 추적 권한 허용
  • 고객의 사전 동의 필수
  • 법적 증거 목적으로 추적 로그 저장 및 관리

주요 시나리오

시나리오 1: 도난 신고 및 추적 시작

엔티티별 API 흐름:

📱 앱 (사용자):

  1. 추적 시작: 경찰 신고 번호와 함께 고주파수 추적 시작
  2. 실시간 모니터링: SSE를 통한 실시간 위치 업데이트 수신
  3. 상태 확인: 차량 배터리 및 통신 신호 강도 모니터링
  4. 안전 구역: 위험 지역에 대한 알림 설정

🚗 차량 (TCU):

  1. 명령 수신: 추적 명령 수신 및 시스템 헬스 체크 수행
  2. 실시간 전송: 플랫폼으로 10초마다 좌표 전송

🏢 콜센터:

  1. 차량 모니터링: 모든 활성 도난 추적 세션 모니터링
  2. 경찰 공조: 현지 사법 기관과 회수 작업 조율
  3. 이동 차단: 차량 이동을 방지하기 위해 원격으로 엔진 구동 차단

시나리오 2: 실시간 추적 모니터링 및 제어

엔티티별 API 흐름:

📱 앱 (사용자):

  1. 실시간 위치 모니터링: SSE를 통해 지도상에 실시간 위치 표시
  2. 추적 상태 확인: 배터리, 통신 상태 등 확인
  3. 추적 분석 확인: 이동 패턴, 통계 분석 확인
  4. 지오펜스 관리: 위험 지역 진입/이탈 알림 설정

🚗 차량 (TCU):

  1. 고주파수 위치 전송: 10초 간격으로 위치 정보 지속 전송
  2. GPS 신호 모니터링: GPS 수신 상태에 따른 위치 정확도 조정
  3. 배터리 상태 전송: 배터리 임계값 모니터링 및 상태 전송
  4. 지오펜스 감지: 설정된 구역 진입/이탈 시 알림 전송

🏢 콜센터:

  1. 다중 차량 모니터링: 여러 대의 차량 추적 세션 동시 모니터링
  2. 위치 패턴 분석: 이동 경로, 속도 패턴 분석
  3. 추적 이력 조회: 시간대별 위치 이력 분석
  4. 위험 구역 관리: 범죄 다발 지역에 대한 지오펜스 설정

시나리오 3: 추적 종료 및 데이터 관리

엔티티별 API 흐름:

📱 앱 (사용자):

  1. 추적 중지: 차량 회수 후 추적 종료
  2. 데이터 내보내기: 보험사/경찰 제출용 보고서 생성
  3. 이동 차단 해제: 차량 기능 정상 복구

🏢 콜센터:

  1. 감사 분석: 회수 효율성 분석
  2. 이력 검토: 사건 발생 시점부터의 전체 경로 검토

시나리오 4: 긴급 상황 협력 대응

엔티티별 API 흐름:

🏢 콜센터:

  1. 긴급 상황 평가: 추적 데이터를 기반으로 긴급 상황 심각도 평가
  2. 즉시 경찰 공조: 자동 경찰 지원 요청
  3. 차량 이동 차단: 원격 차량 엔진 잠금 수행
  4. 실시간 추적 지원: 경찰의 추적을 돕기 위해 실시간 위치 정보 제공

📱 앱 (사용자):

  1. 긴급 알림 수신: SSE를 통해 긴급 상황 즉시 수신
  2. 실시간 위치 공유: 경찰과 실시간 위치 정보 공유
  3. 콜센터 연결: 긴급 상황 시 콜센터 즉시 연결
  4. 차량 원격 제어: 긴급 상황 시 즉각적인 차량 이동 차단 수행

🚗 차량 (TCU):

  1. 긴급 이벤트 전송: GPS 방해, 배터리 부족 등 긴급 상황 즉시 전송
  2. 최우선 위치 전송: 긴급 상황 시 최고 빈도로 위치 정보 전송
  3. 이동 차단 실행: 즉각적인 원격 차량 이동 차단 수행
  4. 지속적 상태 전송: 긴급 상황 종료 시까지 상태 정보 지속 전송

주요 기능

📱 앱 구현 기능

1. 추적 시작 및 모니터링

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를 사용하십시오.

배포 고려사항

앱 스토어 등록

  • 위치 정보 수집에 대한 명확한 설명 제공
  • 개인정보 처리방침 제공
  • 긴급 상황 알림 권한 요청

법규 준수

  • 국가별 위치 정보 보호법 준수
  • 데이터 국외 전송 규정 확인
  • 수사 기관 정보 제공에 대한 절차 마련

Released under the MIT License.