DB

[MySQL] (GIS1️⃣) GIS란? 공간 데이터 타입(POINT, POLYGON 등) 완전 정리

인생아 2025. 7. 18. 12:42
반응형

MySQL에서도 위치 정보, 거리 계산, 지도 기반 검색 같은 지리정보(GIS: Geographic Information System) 기능을 지원한다.
그 핵심은 바로 공간 데이터 타입이다. 이번 글에선 GIS 기능을 이해하는 데 꼭 필요한 공간 타입들을 정리하고, 기본적인 구조를 알아보겠다.

🌍 GIS란 무엇인가?

GIS는 지리적 객체를 DB에서 표현하고 다루는 기술이다.
좌표, 거리, 경로, 면적, 포함관계 등을 SQL로 처리할 수 있다.

MySQL은 GIS를 지원하며 대표적인 기능은 다음과 같다:

  • 위치 좌표 저장
  • 거리 계산
  • 지역 포함 여부 판단
  • 반경 검색 (예: 2km 이내 매장 찾기)
  • 공간 인덱스를 통한 검색 최적화

MySQL 5.7부터 GIS 함수들이 많이 향상되었고, MySQL 8.0 이상에서는 더 강력한 성능을 발휘한다.

반응형

📌 MySQL이 지원하는 주요 공간 데이터 타입

🔹 POINT

  • 하나의 좌표(x, y)를 저장하는 타입
  • 주로 위도/경도 표현에 사용
CREATE TABLE locations (
  name VARCHAR(100),
  pos POINT,
  SPATIAL INDEX(pos)
);
INSERT INTO locations (name, pos)
VALUES ('카페A', ST_GeomFromText('POINT(126.9784 37.5665)'));

✅ 위 예제는 경도 126.9784, 위도 37.5665 좌표를 저장한 것

🔹 LINESTRING

  • 두 개 이상의 점을 이은 선을 표현
  • 경로, 도로 정보 등에 활용
ST_GeomFromText('LINESTRING(126.9784 37.5665, 126.9820 37.5700)')

✅ 도보 경로나 이동 경로를 표현할 때 유용

🔹 POLYGON

  • 닫힌 도형을 표현하는 타입
  • 지역 범위(예: 행정구역, 마커 영역 등)를 나타낼 수 있음
ST_GeomFromText('POLYGON((126.97 37.56, 126.98 37.56, 126.98 37.57, 126.97 37.57, 126.97 37.56))')

✅ 처음과 마지막 좌표가 같아야 하고, 시계방향으로 좌표 나열

🔹 MULTIPOINT, MULTILINESTRING, MULTIPOLYGON

  • 각각 POINT, LINESTRING, POLYGON의 다중 버전
  • 여러 개의 공간 객체를 하나로 묶어서 저장

예:

ST_GeomFromText('MULTIPOINT((126.97 37.56), (126.98 37.57))')
반응형

📌 공간 좌표계(SRID)

SRID(Spatial Reference System Identifier)는 좌표계 정의를 의미한다.
기본값은 SRID = 0으로 Cartesian 평면 좌표계다.
지리 좌표계(WGS 84)를 사용할 경우 SRID = 4326을 사용한다.

SELECT ST_SRID(ST_GeomFromText('POINT(126.9784 37.5665)', 4326));

✅ 실무에선 대부분 SRID 4326 (위도/경도 사용)

🧠 GIS 타입 저장 시 주의사항

  • 공간 컬럼은 반드시 SPATIAL INDEX를 설정해야 검색 최적화 가능
  • 공간 연산을 위해선 ST_함수 사용 권장 (예: ST_Contains, ST_Distance 등)
  • 공간 데이터 삽입 시 반드시 ST_GeomFromText() 또는 ST_GeomFromGeoJSON() 사용
  • GEOMETRY 타입은 모든 공간 타입을 포괄할 수 있는 상위 개념

✅ 정리 요약

타입 설명
POINT 위도/경도 좌표 1개
LINESTRING 선(경로)
POLYGON 다각형(지역 범위)
MULTI* 여러 공간 객체 묶음
GEOMETRY 상위 추상 타입 (POINT, POLYGON 등 포함)

GIS를 활용하면 MySQL에서도 지도 기반 서비스, 반경 검색, 공간 분석 등을 효과적으로 구현할 수 있다.
다음 글부터는 실제 공간 쿼리 작성과 거리 계산, 포함관계 검색 등을 실습해본다.

📘 공식 문서 참고

https://dev.mysql.com/doc/refman/8.0/en/spatial-types.html

 

반응형