MySQL에서 두 지점 간의 거리 계산이 필요할 때 가장 간단하고 빠르게 사용할 수 있는 함수가 ST_DISTANCE_SPHERE입니다. 이 함수는 위도(latitude)와 경도(longitude) 좌표를 기반으로 지구를 구형(Sphere)으로 가정하고 두 지점 사이의 직선 거리(구면 거리)를 미터(meter) 단위로 계산해 줍니다.
이 포스트에서는 ST_DISTANCE_SPHERE 함수의 사용법, 예제, 주의사항 등을 상세히 설명하며, 위치 기반 서비스를 개발할 때 어떻게 활용할 수 있는지 소개하겠습니다.

ST_DISTANCE_SPHERE 함수란?
ST_DISTANCE_SPHERE는 MySQL에서 두 지리 좌표 간의 구면 거리를 계산하는 내장 함수입니다. 좌표 간의 거리를 빠르게 계산할 수 있어, 위치 기반 검색 기능(예: 반경 내 매장 찾기, 사용자 주변 음식점 추천 등)에 매우 유용합니다.
✅ 기본 문법
ST_DISTANCE_SPHERE(point1, point2)
- point1, point2: 각각 POINT(longitude, latitude) 형식의 좌표.
- 반환 값: 두 지점 간의 거리 (단위: 미터)
예제: 서울과 부산 간의 거리 계산
SELECT ST_DISTANCE_SPHERE(
POINT(126.9780, 37.5665), -- 서울 (경도, 위도)
POINT(129.0756, 35.1796) -- 부산 (경도, 위도)
) AS distance_in_meters;
💡 결과
대략적으로 325000 미터, 즉 약 325km가 반환됩니다. 이처럼 ST_DISTANCE_SPHERE는 대도시 간 거리나 위치 기반 추천 시스템에서 빠르게 활용될 수 있습니다.
사용 시 주의할 점
⚠️ 좌표 순서
MySQL의 POINT 함수는 POINT(경도, 위도) 순서로 입력해야 합니다. 흔히 사용하는 (위도, 경도) 형식과 반대이므로 실수하기 쉽습니다.
잘못된 예:
POINT(37.5665, 126.9780) -- ❌ 위도 먼저: 잘못된 순서
올바른 예:
POINT(126.9780, 37.5665) -- ✅ 경도 먼저
⚠️ 정확도 제한
- ST_DISTANCE_SPHERE는 지구를 완전한 구(Sphere)로 간주합니다.
- 실제 지구는 타원형이기 때문에 극지방이나 아주 긴 거리 계산에서는 오차가 발생할 수 있습니다.
- 높은 정확도가 필요한 경우에는 SRID 4326 기반의 ST_Distance 함수를 사용하는 것이 더 적합합니다.
위치 기반 서비스에서의 활용 예
1. 반경 내 매장 검색
SELECT *
FROM stores
WHERE ST_DISTANCE_SPHERE(
POINT(stores.longitude, stores.latitude),
POINT(126.9780, 37.5665) -- 현재 사용자 위치
) <= 1000;
→ 위 쿼리는 서울 중심으로부터 반경 1km 이내에 있는 매장을 검색합니다.
2. 사용자 간 거리 측정
사용자 간 거리를 빠르게 계산하여, 예를 들어 배달 기사와 고객 간 거리를 실시간으로 파악하거나, 택시 호출 거리 계산에 활용할 수 있습니다.
ST_DISTANCE_SPHERE vs ST_Distance 차이점
항목 ST_DISTANCE_SPHERE ST_Distance
지구 모델 | 구형 (Sphere) | 타원체 (Ellipsoid, 정확도 높음) |
단위 | 미터(m) | SRID에 따라 다름 |
SRID 필요 여부 | ❌ 필요 없음 | ✅ 필요함 |
속도 | 빠름 | 상대적으로 느림 |
정확도 | 보통 (짧은 거리엔 충분히 정확) | 높음 |
MySQL의 ST_DISTANCE_SPHERE 함수는 위도와 경도를 기반으로 한 거리 계산이 필요한 모든 상황에서 빠르고 간편하게 사용할 수 있는 강력한 도구입니다. 특히 정확도보다 속도가 중요한 위치 기반 서비스에 매우 적합합니다.
하지만 극단적으로 높은 정확도가 필요한 경우에는 ST_Distance + SRID 설정을 활용하는 것이 더 나을 수 있습니다.
'스마트웹앱콘텐츠전문가 > 데이터베이스' 카테고리의 다른 글
Oracle 호환 RDBMS, 티베로 SQL의 모든 것 (0) | 2025.03.20 |
---|---|
PostgreSQL에서 테이블과 뷰만 조회하는 쿼리 작성법: 오라클과의 차이점 (0) | 2025.03.14 |
PostgreSQL에서 테이블 조회 오류 해결: 스키마 지정 및 대소문자 처리 방법 (0) | 2025.03.14 |
Oracle ALL_TAB_COLUMNS와 PostgreSQL information_schema 비교 (0) | 2025.03.12 |
information_schema를 활용한 PostgreSQL 데이터베이스 객체 관리 및 조회 (0) | 2025.03.12 |