카테고리 없음

재난안전 앱 위치 전송 구조 개요

creator7087 2025. 7. 20. 17:45

전체 구조 및 역할 상세 설명

        com.disasteraidplatform
│
        ├── auth/                  # JWT 인증 및 토큰 관리
│   ├── JwtManager.kt      # JWT 토큰 저장, 갱신, 전달
│   ├── JwtModule.kt
│   └── JwtPackage.kt
│
        ├── cache/                 # 위치 데이터 캐싱
│   ├── LocationCache.kt   # 현재 위치 저장, 최신 위치 제공
│   ├── LocationCacheModule.kt
│   └── LocationCachePackage.kt
│
        ├── kakao/                 # 카카오 API 기반 지역명 변환 (선택적)
│   ├── KakaoRegionApi.kt
│   ├── Region.kt
│   └── RegionParser.kt
│
        ├── location/              # 위치 수신 및 권한 관리
│   ├── LocationData.kt         # 위도/경도 등 위치 데이터 DTO
│   ├── LocationProvider.kt     # Android 위치 API 연동, 위치 수신 담당
│   └── LocationListener.kt     # 위치 콜백 및 이벤트 처리
│
        ├── network/                # 백엔드 REST API 통신 (위치 이외 기능)
│   └── BackendApi.kt
│
        ├── service/                # 위치 추적 및 전송 포그라운드 서비스
│   ├── ForegroundService.kt      # Android ForegroundService 기본 구현
│   ├── TrackingService.kt        # 출석 등 트래킹 관련 서비스 (별도)
│   ├── LocationSenderService.kt  # 위치 지속 추적 및 WebSocket 전송 담당 (핵심)
│   └── RegionSender.kt           # 시/구 정보 전송 (선택적)
│
        ├── util/                   # 공통 유틸리티
│   ├── Logger.kt            # 로그 출력 및 관리
│   └── ServiceHandler.kt    # 서비스 시작/중지 핸들러
│
        ├── websocket/              # WebSocket 클라이언트 및 관리
│   ├── LocationWebSocketClient.kt  # WebSocket 연결, 전송, 재연결 처리
│   └── WebSocketManager.kt          # 다중 WebSocket 관리(출석, 위치 등)
│
        ├── reactnative/            # React Native 네이티브 모듈 연동
│   ├── IntentLauncherModule.kt      # Foreground Service 실행/종료 인터페이스
│   ├── IntentLauncherPackage.kt
│   ├── LocationCacheModule.kt       # JS에서 위치 캐시 접근(필요시)
│   └── LocationCachePackage.kt
│
        ├── MainActivity.kt         # React Native 메인 액티비티
└── MainApplication.kt      # React Native 애플리케이션 설정

1. auth/ — JWT 토큰 관리

  • JwtManager.kt
    • JWT 토큰 저장, 갱신, 만료 체크
    • WebSocket 연결 시 HTTP 헤더 또는 쿼리 파라미터에 토큰 포함
  • 역할: 모든 서버 통신에서 인증용 토큰을 안전하게 관리

2. cache/ — 위치 데이터 캐싱

  • LocationCache.kt
    • 현재 위치 객체 저장(위도, 경도, 시간 등)
    • 위치 변경 시 최신 정보 업데이트
    • 네이티브 서비스와 React Native 간 데이터 공유 가능
  • 역할: 위치 수신과 전송 모듈 사이 데이터 공유 역할, 위치 정보의 싱글 소스 오브 트루스(SSOT)

3. location/ — 위치 수신 및 권한 관리

  • LocationProvider.kt
    • Android 위치 API(FusedLocationProvider 등)와 연동
    • 위치 권한 체크 및 위치 변경 이벤트 발생
  • LocationListener.kt
    • 위치 변화 콜백 구현
  • LocationData.kt
    • 위도/경도 등 위치 관련 데이터 클래스 정의
  • 역할: 디바이스 위치를 정확하고 안정적으로 수신

4. service/ — 위치 전송 및 추적 서비스 (중심)

  • LocationSenderService.kt
    • Foreground Service로 동작하여 앱이 백그라운드여도 위치 전송 유지
    • LocationCache에서 최신 위치 받아서 일정 간격(예: 1분)으로 WebSocket에 전송
    • WebSocket 연결 상태 관리 및 재연결 처리
  • ForegroundService.kt
    • 서비스 기본 구조 및 알림 채널 설정
  • TrackingService.kt
    • 출석 등 별도 트래킹 관련 서비스 (필요시 분리 관리)
  • 역할: 백그라운드 위치 추적과 서버 전송의 핵심 제어부

5. websocket/ — WebSocket 통신 모듈

  • LocationWebSocketClient.kt
    • OkHttp 기반 WebSocket 클라이언트 구현
    • 서버 연결, 메시지 전송, 재연결 로직 구현
    • 서버 메시지 수신 시 콜백 처리 가능
  • WebSocketManager.kt
    • 여러 WebSocket 클라이언트 관리 (출석용, 위치용 분리 가능)
  • 역할: WebSocket 네트워크 통신 담당, 위치 정보 실시간 전송 담당

6. reactnative/ — React Native 네이티브 연동

  • IntentLauncherModule.kt
    • React Native에서 네이티브 서비스 시작/중지 인터페이스 제공
  • LocationCacheModule.kt
    • 필요시 React Native 쪽에서 위치 캐시 데이터 접근용 모듈
  • 역할: React Native ↔ 네이티브 Android 간 브릿지 역할

7. MainActivity.kt / MainApplication.kt

  • React Native 앱 초기화 및 네이티브 모듈 등록
  • 포그라운드 서비스용 알림 채널 등록 등 기본 앱 설정

데이터 흐름 시나리오

  1. React Native UI → 네이티브 서비스 시작 요청 (IntentLauncherModule 통해)
  2. LocationSenderService 시작 → 위치 추적 시작 (LocationProvider 사용)
  3. 위치 변경 시 LocationCache 업데이트 → LocationSenderService가 주기적으로 LocationCache 최신 위치 읽음
  4. LocationWebSocketClient 통해 WebSocket 연결 유지 및 위치 데이터 { type: "location_update", data: {...} } 형식으로 서버 전송
  5. 서버 → WebSocket 응답 수신 및 처리 (필요시 UI에 상태 전달)
  6. React Native UI는 위치 전송 로직 제거하고, 필요 시 네이티브 상태 이벤트 구독 혹은 알림 표시용으로만 사용

정리

모듈명 역할 중요성
JwtManager.kt 인증 토큰 관리 필수
LocationCache.kt 위치 데이터 캐시 필수
LocationProvider.kt 위치 수신 (Android API) 필수
LocationSenderService.kt 위치 추적, WebSocket 전송 서비스 핵심
LocationWebSocketClient.kt WebSocket 연결 및 데이터 송수신 핵심
IntentLauncherModule.kt React Native 서비스 제어 브릿지 필요
MainApplication.kt 앱 초기화 및 네이티브 모듈 등록 필수