로컬 네트워크에서 GPS 신호를 공유하는 방법 — 스마트폰 하나로 모든 기기에 위치 정보를!

노트북으로 지도 작업을 하거나, 라즈베리파이로 뭔가를 만들다 보면 꼭 한 번씩 막히는 순간이 있습니다. "이 기기에 GPS가 없네." 외장 GPS 모듈을 사야 하나 검색해보면 가격도 제각각이고, 드라이버 설치도 복잡합니다. 그런데 생각해보면 주머니 속 스마트폰은 이미 완벽한 GPS 수신기입니다. 왜 그걸 그냥 쓰면 안 될까요?

오늘 소개할 방법은 바로 그겁니다. 스마트폰의 GPS 신호를 로컬 네트워크로 브로드캐스트해서, 같은 Wi-Fi에 연결된 어떤 기기든 실시간 위치 정보를 받아 쓰는 것. 외장 GPS 수신기 살 필요 없습니다. 추가 비용도 없습니다. 오픈소스 도구들 몇 가지만 알면 됩니다.

이게 왜 필요한가 — 생각보다 쓸모가 넓습니다

처음엔 "나는 그런 거 필요 없는데?"라고 생각하실 수 있습니다. 그런데 막상 따져보면 쓰임새가 꽤 많습니다.

첫째, 드론이나 RC 기기 제어 소프트웨어. 지상국(Ground Control Station) 소프트웨어인 Mission Planner나 QGroundControl을 노트북에서 실행할 때, 현재 지상 위치를 GPS로 잡아야 하는 경우가 있습니다. 노트북에 GPS 모듈이 없으면 스마트폰 GPS를 네트워크로 연결하면 됩니다.

둘째, 라즈베리파이 프로젝트. 차량 트래커, 야외 기상 관측, 자전거 컴퓨터 등 라즈베리파이 기반 프로젝트에서 GPS가 필요한데 모듈 구매가 번거로울 때 스마트폰을 GPS 서버로 활용할 수 있습니다.

셋째, 항법 소프트웨어 테스트. OpenCPN 같은 해양 항법 소프트웨어나 각종 위치 기반 앱을 개발·테스트할 때 실제 GPS 피드를 넣어야 할 상황이 생깁니다.

넷째, 사진 지오태깅. 미러리스 카메라나 DSLR로 찍은 사진에 자동으로 GPS 좌표를 붙이고 싶을 때, 촬영 중 스마트폰이 GPS 로그를 네트워크로 뿌려주면 나중에 일괄 태깅이 가능합니다.

핵심 개념 3가지 — 알고 쓰면 훨씬 쉽습니다

첫째, NMEA 0183 프로토콜. GPS 기기들이 데이터를 주고받는 표준 형식입니다. $GPRMC,... 같은 텍스트 줄로 위도, 경도, 속도, 시각 정보를 담습니다. 스마트폰 GPS 앱이 이 형식으로 데이터를 뿌려주면, 받는 쪽(PC, 라즈베리파이)에서 이걸 읽어 씁니다.

둘째, gpsd. Linux/macOS에서 GPS 데이터를 받아 여러 프로그램에 동시에 제공하는 데몬(백그라운드 서비스)입니다. GPS 장치(혹은 네트워크로 들어오는 GPS 스트림)를 하나 등록해두면, 어떤 프로그램이든 표준 방식으로 위치 정보를 가져갈 수 있게 해줍니다.

셋째, TCP 소켓 스트리밍. 스마트폰 앱이 NMEA 데이터를 특정 포트(보통 2947번)로 TCP 스트림으로 내보내고, 받는 쪽에서 그 IP:포트에 접속해 데이터를 읽는 방식입니다. 같은 Wi-Fi 안에서라면 아무 기기나 접속할 수 있습니다.

준비물과 설치 방법 — 단계별로 따라 해보세요

필요한 건 딱 두 가지입니다. GPS 있는 스마트폰 하나, 그리고 같은 Wi-Fi에 연결된 PC나 라즈베리파이 하나.

① 스마트폰에 GPS 브로드캐스트 앱 설치

안드로이드라면 GPS2Net 또는 Bluetooth GPS(네트워크 모드 지원)를 추천합니다. iOS라면 GPS2IP가 가장 널리 쓰입니다. GPS2IP는 유료($4.99)이지만 안정성이 검증됐고, 안드로이드 쪽은 무료 앱으로도 충분히 됩니다.

앱 설정에서 확인할 것:

  • 출력 형식: NMEA 0183 선택
  • 프로토콜: TCP 선택 (UDP도 되지만 TCP가 안정적)
  • 포트: 기본값 11123 또는 2947 (gpsd 기본 포트)
  • 스마트폰의 로컬 IP 주소 확인 (예: 192.168.1.42)

앱을 실행하고 브로드캐스트를 시작하면 스마트폰은 GPS 서버가 됩니다.

② 받는 쪽(Linux/라즈베리파이)에 gpsd 설치

sudo apt update
sudo apt install gpsd gpsd-clients

설치 후 gpsd가 네트워크 소스를 바라보도록 설정합니다:

sudo gpsd -N -n tcp://192.168.1.42:11123

여기서 192.168.1.42는 스마트폰의 로컬 IP, 11123은 앱에서 설정한 포트입니다.

제대로 연결됐는지 확인하려면:

gpsmon

터미널에 위성 정보와 위도·경도가 실시간으로 흘러나오면 성공입니다.

③ macOS에서 사용하는 경우

Homebrew로 gpsd를 설치할 수 있습니다:

brew install gpsd

이후 동일하게 gpsd -N tcp://스마트폰IP:포트 형식으로 실행합니다.

④ 더 간단한 방법 — socat으로 포트 포워딩

gpsd 없이 바로 NMEA 스트림을 가상 시리얼 포트로 넘기고 싶다면 socat을 쓸 수 있습니다:

socat TCP:192.168.1.42:11123 PTY,link=/tmp/gps,raw,echo=0

이렇게 하면 /tmp/gps라는 가상 시리얼 장치가 생기고, GPS 장치로 인식하는 프로그램에서 이 경로를 지정하면 됩니다.

실제 써보니 — 이런 상황에서 특히 유용했습니다

저는 처음에 라즈베리파이 기반 차량 대시캠 프로젝트에서 이 방법을 써봤습니다. GPS 모듈을 따로 달려니 배선도 복잡하고, 마운트 위치도 고민이었는데, 스마트폰이 어차피 거치대에 올라가 있으니 거기서 Wi-Fi 핫스팟을 켜고 라즈베리파이를 연결했습니다. 설정에 걸린 시간은 15분 정도. 이후로는 시동 걸면 자동으로 GPS 연결이 됩니다.

또 한 가지 의외로 유용했던 케이스는 사진 지오태깅이었습니다. 여행 중 미러리스로 사진을 찍을 때 스마트폰을 GPS 로거로 쓰고, 나중에 Lightroom에서 GPS 트랙을 매핑하는 방식을 쓰던 중, 아예 네트워크로 연결해두고 카메라 제어 소프트웨어에 실시간으로 좌표를 넣는 시도도 해봤습니다. 완벽하진 않았지만 가능성이 충분히 보였습니다.

신호 품질은 어떨까요? 실내에서는 당연히 GPS 정확도가 떨어지지만, 야외에서는 스마트폰 GPS가 일반 외장 GPS 모듈과 크게 다르지 않습니다. 요즘 스마트폰은 A-GPS(보조 GPS)와 GLONASS, Galileo 등 복수 위성 시스템을 지원해서 정확도가 상당히 높습니다.

비슷한 대안과 비교 — 선택지가 몇 가지 있습니다

외장 USB GPS 모듈 (예: u-blox 기반 제품, 2~5만 원)
장점: 전용 장치라 안정성이 높고, 설정이 단순합니다. 단점: 돈이 들고, 분실·파손 위험이 있으며, 스마트폰처럼 다목적으로 쓰기 어렵습니다.

Bluetooth GPS 리시버
장점: 무선이라 연결이 자유롭습니다. 단점: 배터리를 따로 충전해야 하고, 페어링 과정이 번거로울 수 있습니다.

스마트폰 GPS 브로드캐스트 (오늘 소개한 방법)
장점: 추가 비용 없음, 이미 갖고 있는 기기 활용, 스마트폰 배터리가 닳는 것 외에 별도 전원 불필요. 단점: 스마트폰이 GPS 서버 역할을 하는 동안 다른 용도로 쓰기 약간 불편, Wi-Fi 연결이 필수.

결론적으로 이미 스마트폰이 있고, 가끔 또는 프로토타입 수준에서 GPS가 필요하다면 오늘 소개한 방법이 압도적으로 경제적입니다. 본격적인 상용 제품이나 항상 켜둬야 하는 서버에는 전용 모듈이 낫겠지만, 개인 프로젝트나 테스트 환경에서는 이 방법으로 충분합니다.

이런 게 무료에 오픈소스라는 게 아직도 신기합니다. GPS 모듈 구매를 고민하고 있다면, 먼저 이 방법부터 시도해보세요. 15분이면 됩니다.

댓글

이 블로그의 인기 게시물

Arm AGI CPU 출시 완전 정리 — 내 스마트폰·PC가 바뀌는 이유

내 웹사이트가 진짜 작동하는지 자동으로 확인해주는 무료 도구 Upright 완전 정복

소프트웨어에 남은 길은 두 가지뿐 — 지금 당신이 써야 할 도구가 바뀌고 있습니다