barded

[투게덕] MYSQL의 공간 데이터타입 본문

프로젝트/투게덕

[투게덕] MYSQL의 공간 데이터타입

barded 2024. 3. 18. 04:23

프로젝트를 진행하던 중, 위치 경로를 이어서 지도에 표현해야 했다. 세가지의 선택지가 있었다.

  1. 좌표를 각각 테이블로 저장하기
  2. 좌표를 한 컬럼에 배열로 저장하기
  3. 공간 데이터 타입에 저장하기

여기서 공간 데이터 타입에 대해 알아보고자 한다.

공간 데이터 타입 ( Spatial Data Type )이란?

쉽게 설명하면 X, Y 좌표로 구성된 공간 데이터를 저장하고 연산할 수 있는 기능을 제공해주는 데이터베이스. 다른 말로, 공간 데이터의 저장 형태를 구분하는 공간 데이터 타입과 공간 데이터를 연산할 수 있는 공간 함수가 제공되는 데이터베이스라고 표현 가능.

우리가 일반적으로 사용하고 있는 RDBMS인 Oracle, MariaDB, MySQL, PostgreSQL 등에서 공간 데이터를 처리하기 위한 기능을 제공한다. 이 솔루션을 이용해 공간 데이터베이스를 생성/관리할 수 있다.

이제 공간 데이터베이스의 기초인 공간 데이터 타입에 대해 알아보자. 여기서는 MySQL에서 제공하는 공간 데이터 타입을 기준으로 설명한다.

공간데이터타입 정의 SQL 예

1 Point 좌표 공간에서 한 지점의 위치를 표시
2 LineString 다수의 Point를 연결해주는 선분
3 Polygon 다수의 선분들이 연결되어 닫혀 있는 상태인 다각형
4 Multi-Point 다수 개의 Point 집합
5 Multi-LineString 다수 개의 LineString 집합
6 Multi-Polygon 다수 개의 Polygon 집합
7 GeomCollection 모든 공간 데이터들의 집합

여기서 Polygon을 사용하고자한다.

INSERT INTO history
            (
                        route
            )
            VALUES
            (
                       polygonfromtext('POLYGON((37.3695862 127.1283285,                                                                    37.3703351 127.1274986,                                                                     37.3704658 127.1273503,                                                                     37.3678142 127.1198614,                                                                     37.3675945 127.11959,                                                                     37.3673733 127.1193852,                                                                     37.3697091 127.1294679,                                                                     37.3696397 127.1293714,                                                                     37.3693546 127.1290282,                                                                     37.369277 127.128936,                                                                     37.3691434 127.1288203,                                                                     37.3691417 127.128819,                                                                     37.3695862 127.1283285            ))')
            );

위와 같은 형식으로 입력하면 폴리곤을 만들 수 있다.

Polygon은 자바에 있는 Point를 쓰면 되어서 List<Point> 이렇게 쓰면 되고, 그 경우 polygon.x polygon.y 로 쓰면 된다.

이를 통해 지도에 경로를 표시할 수 있게 되었다.

하지만 시간상의 이유로… 그냥 한 컬럼에 좌표를 모두 넣고, 반환하여 프론트가 알아서 처리하는 방식을 선택했는데 지금와서 보면 이 방식이 조금더 재미있고? 프론트의 역할이 줄어들지 않을까? 라는 생각이 있다.

'프로젝트 > 투게덕' 카테고리의 다른 글

[투게덕] DooD vs DinD  (0) 2024.03.18
[투게덕] 자바17의 record란?  (0) 2024.03.18