이 프로젝트는 스마트폰의 가속도 및 자이로스코프 센서 데이터를 실시간으로 PC로 전송하여 저장합니다. 스마트폰 브라우저의 보안 정책을 준수하기 위해 로컬 환경에서 사설 인증서를 사용한 HTTPS 서버를 구축합니다. 안드로이드에서 동작 확인하였으며, IOS에서는 확인되지 않았으나 동작할 것으로 예상합니다.
터미널(CMD, PowerShell, 맥 터미널)을 열고 프로젝트 폴더로 이동한 뒤 순서대로 진행하세요.
파이썬 패키지 관리를 위해 가상환경을 사용하는 것을 권장합니다.
Windows 사용자:
python -m venv venv
venv\Scripts\activateMac / Linux 사용자:
python3 -m venv venv
source venv/bin/activate가상환경이 켜진 상태에서 아래 명령어를 입력합니다.
pip install -r requirements.txtHTTPS 서버를 열기 위해서는 인증서 파일이 필요합니다. 포함된 스크립트를 실행하면 개발용 사설 인증서가 자동으로 생성됩니다.
python create_cert.py실행 후 폴더에 cert.pem 파일과 key.pem 파일이 생성되었는지 확인하세요.
아래 명령어를 입력하여 서버를 시작합니다.
uvicorn main:app --host 0.0.0.0 --port 8000 --ssl-keyfile key.pem --ssl-certfile cert.pem --timeout-graceful-shutdown 1서버가 정상적으로 실행되면 터미널 화면에 아래와 같은 접속 주소가 표시됩니다.
https://192.168.0.x:8000
PC 브라우저 주소창에 아래 주소를 입력합니다.
https://localhost:8000
화면이 나오면 [PC (모니터링)] 버튼을 클릭하여 대기 상태로 둡니다.
반드시 PC와 스마트폰이 **동일한 와이파이(Wi-Fi)**에 연결되어 있어야 합니다.
- 스마트폰 브라우저(Chrome 또는 Safari)를 켭니다.
- PC 터미널에 표시된 IP 주소를 입력합니다.
(예:
https://192.168.0.5:8000) - 주의: 주소 앞에 반드시
https://를 붙여야 합니다.
우리가 직접 만든 인증서를 사용하므로 브라우저에서 안전하지 않은 사이트라는 경고를 띄웁니다. 이는 해킹 위험이 있는 것이 아니라 공인된 인증서가 아니라는 뜻이므로 무시하고 진행하면 됩니다.
- 화면에 [연결이 비공개로 설정되어 있지 않습니다] 경고가 뜹니다.
- 하단의 [고급] 버튼을 누릅니다.
- 맨 아래에 나타나는 [xxx.xxx.xxx.xxx(으)로 이동(안전하지 않음)] 링크를 누릅니다.
- 화면에 [연결이 비공개로 설정되어 있지 않습니다] 경고가 뜹니다.
- 문구 아래 [세부사항 보기] 또는 [Show Details]를 누릅니다.
- 스크롤을 맨 아래로 내려 [이 웹사이트 방문] 또는 [visit this website] 링크를 누릅니다.
- 팝업창이 뜨면 [웹사이트 방문]을 한 번 더 누릅니다.
- 스마트폰 화면에 메뉴가 나오면 [스마트폰 (센서 전송)] 버튼을 누릅니다.
- [START] 버튼을 누릅니다.
- 아이폰은 [동작 및 방향 접근] 권한 요청 팝업이 뜨면 [허용]을 눌러야 합니다.
- 상태 메시지가 Connected로 바뀌면 전송이 시작됩니다.
- PC 화면을 보면
Mobile-1,Mobile-2와 같이 접속한 순서대로 ID가 부여되어 데이터가 들어오는 것을 확인할 수 있습니다.
사용을 마친 후 서버를 끄려면, 서버가 실행 중인 터미널 창에서 다음 단축키를 입력하세요.
- Windows / Linux / Mac 공통:
Ctrl+C
입력 후 Application shutdown complete 메시지가 뜨면 서버가 종료됩니다.
-
접속이 안 될 때: PC와 폰이 같은 와이파이(공유기)에 연결되어 있는지 확인하세요. 윈도우 방화벽이 포트 8000을 막고 있다면 허용해 주어야 합니다.
-
센서 값이 0으로만 나올 때: 스마트폰 화면이 꺼지면 브라우저가 절전 모드로 들어가 전송이 멈출 수 있습니다. 화면을 켜 둔 상태로 유지하세요.
-
데이터 파일 위치: 수집된 데이터는 프로젝트 폴더 내
data/sensor_log.csv파일에 저장됩니다.