수집된 Wi-Fi AP 데이터를 기반으로 사용자의 현재 실내 위치를 파악하고, 재난 발생 시 최적의 대피 경로를 안내하는 백엔드 API 서버입니다.
본 프로젝트는 GPS가 작동하지 않는 실내 환경에서, Python과 FastAPI를 기반으로 한 백엔드 서버를 구축하여 사용자의 위치를 측위하고 최적의 대피 경로를 제공하는 캡스톤 디자인 프로젝트입니다.
저는 이 프로젝트에서 백엔드 API 서버 개발을 전담했습니다.
- FastAPI를 이용한 REST API 설계 및
POST /locate엔드포인트 구현 - 클라이언트(Android)의 Wi-Fi AP 스캔 데이터를 받아 처리
- RSSI 가중 평균(Weighted Average) 알고리즘을 Python으로 구현하여 사용자 (x, y, z) 좌표 추정
- 추정된 위치에서 비상구까지의 최단 경로를 탐색하는 A* (A-star) 알고리즘 적용
- 계산된 위치 좌표 및 대피 경로를 클라이언트에 JSON 형태로 반환
- **GCP(Google Cloud Platform)**를 이용한 서버 배포 및 운영
- 실시간 상태 확인: (SAFE, DANGER, CHECKING) 서버로부터 재난 상태 및 위치 정보를 받아와 UI에 반영합니다.
- 실내 위치 측위: 클라이언트가 측정한 Wi-Fi AP 신호 세기(RSSI)를 API 서버로 전송합니다.
- 알고리즘 연산: 서버는 RSSI 가중 평균 알고리즘을 통해 사용자의 실내 위치 좌표를 계산합니다.
- 경로 안내: 계산된 위치를 그래프의 가장 가까운 노드에 매핑 후, A* 알고리즘으로 비상구까지의 최단 대피 경로를 탐색하여 반환합니다.
- 문제: 안드로이드 OS 자체의 Wi-Fi 스캔 주기가 30초에 2-3회로 제한되어, 2층에서 1층으로 이동해도 앱의 지도 상에서 위치가 즉시 갱신되지 않는 치명적인 문제 발생.
- 해결: 클라이언트 팀과 협의하여 안드로이드 개발자 모드를 활성화하고, 스캔 주기를 7-8초로 단축하도록 설정을 변경함. 이를 통해 서버가 더 자주 데이터를 수신하여, 사용자의 움직임을 거의 실시간으로 추적하고 경로를 재탐색할 수 있도록 '실시간성'을 확보함.
- 문제: 초기 테스트 배포에 사용한 Railway의 싱가포르 리전 서버와 국내 사용자(클라이언트) 간의 물리적 거리로 인해 네트워크 지연(high latency)이 발생.
- 해결: 서버를 **Google Cloud Platform(GCP)**의 서울 리전(
asia-northeast3)으로 이전 배포하여, 국내 클라이언트와의 API 통신 속도를 크게 개선하고 안정적인 서비스를 제공함.
- Backend (ME): ala1012sin
- Client (Android): Dohyeongx3
- Database / Login: LeeYoungw

