카테고리 없음
재난안전 앱 위치 전송 구조 개요
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 앱 초기화 및 네이티브 모듈 등록
- 포그라운드 서비스용 알림 채널 등록 등 기본 앱 설정
데이터 흐름 시나리오
- React Native UI → 네이티브 서비스 시작 요청 (IntentLauncherModule 통해)
- LocationSenderService 시작 → 위치 추적 시작 (LocationProvider 사용)
- 위치 변경 시 LocationCache 업데이트 → LocationSenderService가 주기적으로 LocationCache 최신 위치 읽음
- LocationWebSocketClient 통해 WebSocket 연결 유지 및 위치 데이터 { type: "location_update", data: {...} } 형식으로 서버 전송
- 서버 → WebSocket 응답 수신 및 처리 (필요시 UI에 상태 전달)
- React Native UI는 위치 전송 로직 제거하고, 필요 시 네이티브 상태 이벤트 구독 혹은 알림 표시용으로만 사용
정리
모듈명 | 역할 | 중요성 |
JwtManager.kt | 인증 토큰 관리 | 필수 |
LocationCache.kt | 위치 데이터 캐시 | 필수 |
LocationProvider.kt | 위치 수신 (Android API) | 필수 |
LocationSenderService.kt | 위치 추적, WebSocket 전송 서비스 | 핵심 |
LocationWebSocketClient.kt | WebSocket 연결 및 데이터 송수신 | 핵심 |
IntentLauncherModule.kt | React Native 서비스 제어 브릿지 | 필요 |
MainApplication.kt | 앱 초기화 및 네이티브 모듈 등록 | 필수 |