📌 개요
GIS 데이터는 단순한 속성 데이터가 아니라 공간 정보를 포함해야 합니다. GISuite에서는 OGC 표준을 준수하는 JPA 엔티티를 사용하여 PostGIS와 연동합니다.
이 문서에서는 GisEntity를 설계하고, PostGIS의 Geometry 타입을 활용하여 공간 데이터를 효율적으로 저장하는 방법을 설명합니다.
🏗️ 1. GisEntity 설계
Spring Data JPA와 Hibernate Spatial을 활용하여 GIS 데이터를 저장하는 GisEntity를 설계합니다.
package com.gisuite.entity;
import jakarta.persistence.*;
import org.locationtech.jts.geom.Geometry;
@Entity
@Table(name = "gis_data")
public class GisEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(columnDefinition = "Geometry")
private Geometry geometry;
public GisEntity() {
}
public GisEntity(String name, Geometry geometry) {
this.name = name;
this.geometry = geometry;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Geometry getGeometry() {
return geometry;
}
public void setGeometry(Geometry geometry) {
this.geometry = geometry;
}
}🔹 주요 필드 설명
@Entity&@Table(name = "gis_data")→ 데이터베이스의gis_data테이블과 매핑@Id @GeneratedValue(strategy = GenerationType.IDENTITY)→ 기본 키 자동 생성@Column(nullable = false)→name필드는 반드시 값이 있어야 함@Column(columnDefinition = "Geometry")→ 공간 데이터를 저장하는geometry필드
📌 2. PostGIS 연동을 위한 Hibernate 설정
Hibernate가 PostGIS의 Geometry 타입을 인식하도록 application.yml에 다음 설정을 추가합니다.
spring:
jpa:
database-platform: org.hibernate.spatial.dialect.postgis.PostgisDialect
hibernate:
ddl-auto: update
show-sql: true
properties:
hibernate:
format_sql: true🔹 설정 설명
database-platform: org.hibernate.spatial.dialect.postgis.PostgisDialect→ PostGIS 지원을 위한 Hibernate 설정ddl-auto: update→ 테이블 구조 자동 생성 (운영 환경에서는validate또는none추천)show-sql: true→ SQL 쿼리 출력 활성화
📌 3. 공간 데이터를 효율적으로 저장하는 방법
PostGIS는 GIS 데이터를 효율적으로 저장하기 위해 **공간 인덱스(Spatial Index)**를 사용할 수 있습니다.
데이터베이스에서 geometry 필드를 효율적으로 검색하기 위해 다음 쿼리를 실행하여 인덱스를 생성합니다.
CREATE INDEX gis_data_gix ON gis_data USING GIST (geometry);이렇게 하면 공간 검색 성능이 향상되며, 복잡한 지리 정보 쿼리도 빠르게 실행할 수 있습니다.
🎯 마무리 및 다음 단계
이제 GisEntity를 정의하고 PostGIS와 연동하는 방법을 알게 되었습니다.
✅ 다음 단계: GIS 데이터를 관리하는 JPA Repository 및 공간 검색 기능 구현 🚀