barded
[투게덕] MYSQL의 공간 데이터타입 본문
프로젝트를 진행하던 중, 위치 경로를 이어서 지도에 표현해야 했다. 세가지의 선택지가 있었다.
- 좌표를 각각 테이블로 저장하기
- 좌표를 한 컬럼에 배열로 저장하기
- 공간 데이터 타입에 저장하기
여기서 공간 데이터 타입에 대해 알아보고자 한다.
공간 데이터 타입 ( 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 |