danuri
오늘의 기록
danuri
전체 방문자
오늘
어제
  • 오늘의 기록 (307)
    • java (150)
      • java (33)
      • spring (63)
      • jpa (36)
      • querydsl (7)
      • intelliJ (9)
    • kotlin (8)
    • python (24)
      • python (10)
      • data analysis (13)
      • crawling (1)
    • ddd (2)
    • chatgpt (2)
    • algorithm (33)
      • theory (9)
      • problems (23)
    • http (8)
    • git (8)
    • database (5)
    • aws (12)
    • devops (10)
      • docker (6)
      • cicd (4)
    • book (44)
      • clean code (9)
      • 도메인 주도 개발 시작하기 (10)
      • 자바 최적화 (11)
      • 마이크로서비스 패턴 (0)
      • 스프링으로 시작하는 리액티브 프로그래밍 (14)
    • tistory (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

태그

  • 자바 최적화
  • RDS
  • Spring
  • 도메인 주도 설계
  • Saving Plans
  • CICD
  • ChatGPT
  • docker
  • Jackson
  • reactive
  • Kotlin
  • 마이크로서비스패턴
  • S3
  • nuribank
  • Thymeleaf
  • DDD
  • Java
  • JPA
  • AWS
  • 트랜잭션
  • SWAGGER
  • gitlab
  • 등가속도 운동
  • PostgreSQL
  • Security
  • POSTGIS
  • mockito
  • connection
  • Bitmask
  • Database

최근 댓글

최근 글

hELLO · Designed By 정상우.
danuri

오늘의 기록

[Postgresql] PostGIS 설치 - MySQL이 아닌 PostgreSQL을 사용하는 이유
database

[Postgresql] PostGIS 설치 - MySQL이 아닌 PostgreSQL을 사용하는 이유

2023. 1. 11. 23:37

배경

프로젝트 도중 공간 데이터를 다룰 일이 있었다.

나는 주로 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 서버를 연동하자.

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

https://sihus.tistory.com/3

 

 

 

 

 

 

저작자표시 비영리 동일조건 (새창열림)

'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
    'database' 카테고리의 다른 글
    • [Database] MySQL InnoDB lock
    • [Database] 트랜잭션 격리 수준
    • PK: UUID vs Auto Increment
    • H2 데이터베이스 설치
    danuri
    danuri
    IT 관련 정보(컴퓨터 지식, 개발)를 꾸준히 기록하는 블로그입니다.

    티스토리툴바