배경
프로젝트 도중 공간 데이터를 다룰 일이 있었다.
나는 주로 MySQL을 사용하기 때문에 처음에는 MySQL이 지원하는 공간 데이터 타입(Point, LineString, ...)을 사용하기로 했다.
그러나 나는 유클리드 좌표계(좌표평면)가 아닌 WGS84 좌표계(위도, 경도)를 사용해야 했는데, MySQL의 공간 연산 함수는 WGS84 좌표계에 대한 지원이 미흡했다.
예를 들어, MySQL의 공간 연산 함수 중 하나인 ST_Intersection(두 선분의 교차점 계산)은 WGS84 좌표계를 쓰는 것과 관계없이 좌표평면을 기준으로 계산하기 때문에 예상한 값과 다른 값을 반환하게 된다.
여러 레퍼런스를 찾아보면 공간데이터를 다룰 때 MySQL 보다는 PostgreSQL의 PostGIS가 사용성과 성능 측면에서 월등하다고 한다.
실제로 PostGIS는 공식 문서에서 WGS84 좌표계 역시 지원한다고 나와있다.
그럼 이제 Postgresql에서 PostGIS를 적용해보자.
설치
PostgreSQL 설치
먼저 PostgreSQL을 설치한다. 설치는 Mac OS를 기준으로 한다.
아래 사이트에서 직접 다운로드 해도 되지만, 나는 homebrew로 설치했다.
https://www.postgresql.org/download/
homebrew로 postgres 설치
brew install postgresql # postgres 설치
brew services start postgresql # postgres 시작
PostgreSQL 접속
터미널에서 접속
psql postgres
GUI 툴 접속
위처럼 터미널에서 접속해도 되지만, DB를 몇번 만져봤다면 보통 GUI툴 쓰는게 편하다는 것을 깨닫는다.
pgAdmin4(mysql에서 workbench 느낌)를 사용하기도 한다는데, 나는 써보니까 UI가 영 불편해서 DBeaver로 갈아탔다.
아무튼 어떤 툴을 사용하던 각자 PostgreSQL 서버를 연동하자.
PostGIS 적용
DB를 연동했다면 각자 툴에서 쿼리 콘솔을 열어서 다음 쿼리를 작성하고 run하자.
CREATE EXTENSION postgis
이제 Function에 들어가보면 postgis에서 지원하는 함수들이 추가된 것을 볼 수 있다.
공간 데이터를 다루는데 앵간한 함수들은 PostGIS가 다 갖고 있으니 공식 문서를 참고해가며 각자 원하는 기능을 구현하길 바란다.
참고자료
https://dba.stackexchange.com/questions/10744/postgresql-vs-mysql-spatial-feature-comparison
https://steemit.com/kr-dev/@tmkor/db-2-mysql-vs-postgis-postgresql
https://postgis.net/docs/ST_Intersection.html
'database' 카테고리의 다른 글
[Database] MySQL InnoDB lock (2) | 2024.02.05 |
---|---|
[Database] 트랜잭션 격리 수준 (0) | 2023.12.24 |
PK: UUID vs Auto Increment (0) | 2023.07.19 |
H2 데이터베이스 설치 (0) | 2021.02.10 |