0Pricing
SQL Academy · 강의

공간 데이터 유형

SQL에서 점, 선, 다각형을 다룹니다

공간 데이터 유형은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

공간 데이터란 무엇인가요?

공간 데이터는 실제 세계의 위치, 도형, 영역을 설명합니다. 일반적인 숫자나 문자열과 달리 공간 값에는 지도상의 한 점, 도로 구간, 국가의 경계처럼 기하학적 의미가 담겨 있습니다.

PostGIS는 강력한 공간 데이터 유형과 함수를 추가하는 PostgreSQL 확장 기능으로, 데이터베이스를 완전한 지리 정보 시스템(GIS)으로 바꿔 줍니다.

-- Enable the PostGIS extension
CREATE EXTENSION IF NOT EXISTS postgis;

GEOMETRY 유형

PostGIS의 핵심 공간 유형은 geometry입니다. 이 유형은 평면(유클리드) 좌표 공간에 도형을 저장합니다. 열을 생성할 때 POINT, LINESTRING, POLYGON과 같은 하위 유형을 제약 조건으로 지정할 수 있습니다.

하위 유형과 함께 SRID(공간 참조 ID)를 지정하면 데이터에 사용되는 좌표계를 PostGIS에 알려 줄 수 있습니다.

CREATE TABLE locations (
  id      SERIAL PRIMARY KEY,
  name    TEXT,
  geom    geometry(POINT, 4326)
);

POINT 삽입

POINT는 X(경도) 및 Y(위도) 좌표로 하나의 위치를 나타냅니다. ST_GeomFromText 함수는 잘 알려진 텍스트(WKT) 문자열을 기하 도형 값으로 변환합니다.

SRID 4326은 전 세계 GPS 장치에서 사용하는 WGS 84 좌표계입니다.

INSERT INTO locations (name, geom)
VALUES
  ('Eiffel Tower',  ST_GeomFromText('POINT(2.2945 48.8584)', 4326)),
  ('Big Ben',       ST_GeomFromText('POINT(-0.1246 51.5007)', 4326)),
  ('Colosseum',     ST_GeomFromText('POINT(12.4922 41.8902)', 4326));

SELECT name, ST_AsText(geom) AS wkt FROM locations;

LINESTRING 유형

LINESTRING은 직선 구간으로 연결된 두 개 이상의 점으로 이루어진 순서가 있는 시퀀스입니다. 도로, 강 또는 선형 특징을 나타내는 데 적합합니다.

WKT의 각 숫자 쌍은 하나의 꼭짓점(경도 위도)입니다. PostGIS는 전체 경로를 하나의 기하 도형 값으로 저장합니다.

CREATE TABLE roads (
  id    SERIAL PRIMARY KEY,
  name  TEXT,
  path  geometry(LINESTRING, 4326)
);

INSERT INTO roads (name, path)
VALUES (
  'High Street',
  ST_GeomFromText(
    'LINESTRING(-0.125 51.500, -0.120 51.502, -0.115 51.505)',
    4326
  )
);

SELECT name, ST_Length(path) AS length_degrees FROM roads;

POLYGON 유형

POLYGON은 닫힌 영역을 정의합니다. 외부 경계는 링이며, 첫 번째 점과 마지막 점이 같은 닫힌 LINESTRING입니다. 다각형에는 공원 안의 호수처럼 영역 안에 있는 공간을 나타내기 위한 내부 링(구멍)이 포함될 수도 있습니다.

모든 링은 닫혀 있어야 하므로 끝에 시작 좌표를 다시 입력해야 합니다.

CREATE TABLE zones (
  id    SERIAL PRIMARY KEY,
  name  TEXT,
  area  geometry(POLYGON, 4326)
);

INSERT INTO zones (name, area)
VALUES (
  'Central Park Approx',
  ST_GeomFromText(
    'POLYGON((-73.9817 40.7681, -73.9580 40.7681,
              -73.9580 40.7964, -73.9817 40.7964,
              -73.9817 40.7681))',
    4326
  )
);

SELECT name, ST_Area(area) AS area_sq_deg FROM zones;

GEOGRAPHY와 GEOMETRY 비교

PostGIS는 두 가지 공간 유형군을 제공합니다. geometry는 평면의 직교 좌표계를 사용하고, geography는 지구를 곡면 타원체로 모델링합니다.

넓은 영역에서 실제 세계의 거리를 미터 단위로 정확하게 계산해야 한다면 geography를 사용하세요. 지역 투영 좌표계에서 작업하거나 최고의 성능이 필요하다면 geometry를 사용하세요.

CREATE TABLE cities (
  id      SERIAL PRIMARY KEY,
  name    TEXT,
  geog    geography(POINT, 4326)
);

INSERT INTO cities (name, geog) VALUES
  ('New York',  ST_GeogFromText('POINT(-74.0060 40.7128)')),
  ('London',    ST_GeogFromText('POINT(-0.1278 51.5074)'));

-- Distance in metres using geography
SELECT
  a.name AS from_city,
  b.name AS to_city,
  ROUND(ST_Distance(a.geog, b.geog)::NUMERIC) AS distance_m
FROM cities a, cities b
WHERE a.name = 'New York' AND b.name = 'London';

잘 알려진 텍스트(WKT) 및 WKB

공간 데이터는 두 가지 표준 형식으로 직렬화할 수 있습니다. 잘 알려진 텍스트(WKT)는 사람이 읽을 수 있는 형식입니다. 예를 들면 POINT(2.29 48.86)와 같습니다. 잘 알려진 이진 형식(WKB)은 내부적으로 사용되거나 데이터를 전송할 때 사용하는 압축된 이진 표현입니다.

PostGIS는 내부 저장 형식과 이러한 형식 사이를 변환할 수 있도록 ST_AsText와 ST_AsBinary를 제공합니다.

SELECT
  name,
  ST_AsText(geom)          AS wkt,
  ST_AsEWKT(geom)          AS ewkt,
  encode(ST_AsBinary(geom), 'hex') AS wkb_hex
FROM locations
LIMIT 2;

MULTIPOINT, MULTILINESTRING, MULTIPOLYGON

PostGIS는 같은 종류의 여러 도형을 하나의 값으로 묶는 다중 기하 도형 유형도 지원합니다. 하나의 실제 특징이 서로 떨어진 여러 부분으로 이루어진 경우에 유용합니다. 예를 들어 군도는 MULTIPOLYGON으로 모델링할 수 있습니다.

모든 표준 공간 함수는 다중 기하 도형에도 동일한 방식으로 작동합니다.

SELECT ST_AsText(
  ST_GeomFromText(
    'MULTIPOLYGON(
       ((0 0, 4 0, 4 4, 0 4, 0 0)),
       ((10 10, 14 10, 14 14, 10 14, 10 10))
     )'
  )
) AS multi_poly;

SELECT ST_NumGeometries(
  ST_GeomFromText(
    'MULTIPOLYGON(
       ((0 0, 4 0, 4 4, 0 4, 0 0)),
       ((10 10, 14 10, 14 14, 10 14, 10 10))
     )'
  )
) AS part_count;

GEOMETRYCOLLECTION

GEOMETRYCOLLECTION은 가장 일반적인 공간 유형으로, 하나의 값에 점, 선, 다각형을 함께 담을 수 있습니다. 하나의 열에 서로 다른 기하 도형 유형이 저장될 수 있는 이질적인 데이터셋을 다룰 때 유용합니다.

ST_GeometryN을 사용하면 개별 구성 요소를 추출할 수 있습니다.

SELECT ST_AsText(
  ST_GeomFromText(
    'GEOMETRYCOLLECTION(
       POINT(1 1),
       LINESTRING(0 0, 1 1, 2 2),
       POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))
     )'
  )
) AS collection;

SELECT ST_AsText(
  ST_GeometryN(
    ST_GeomFromText(
      'GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(0 0, 1 1))'
    ),
    1
  )
) AS first_member;

GIST를 사용한 공간 색인

포함 관계나 근접성을 확인하는 공간 쿼리는 모든 행의 기하 도형을 비교해야 하므로 수백만 개의 도형을 검색하게 될 수 있습니다. GIST 색인은 기하 도형의 경계 상자를 색인화하여 이러한 작업을 크게 빠르게 만듭니다. 따라서 일치할 가능성이 전혀 없는 행을 PostgreSQL이 건너뛸 수 있습니다.

자주 조회하는 geometry 또는 geography 열에는 항상 GIST 색인을 생성하세요.

-- Create a GIST index on a geometry column
CREATE INDEX idx_locations_geom
  ON locations
  USING GIST (geom);

-- PostgreSQL will now use the index for spatial operators
EXPLAIN ANALYZE
SELECT name
FROM locations
WHERE ST_DWithin(
  geom,
  ST_GeomFromText('POINT(2.3 48.9)', 4326),
  1.0
);

기하 도형 속성 읽기

PostGIS는 어떤 기하 도형에서든 속성을 추출할 수 있는 접근자 함수를 제공합니다. ST_X와 ST_Y는 점의 좌표를 반환하고, ST_SRID는 공간 참조 ID를 반환하며, ST_GeometryType은 하위 유형 이름을 반환합니다.

이 함수들은 공간 데이터를 검사하고 유효성을 검증하는 데 필수적입니다.

SELECT
  name,
  ST_X(geom)            AS longitude,
  ST_Y(geom)            AS latitude,
  ST_SRID(geom)         AS srid,
  ST_GeometryType(geom) AS geom_type,
  ST_IsValid(geom)      AS is_valid
FROM locations;

빠른 확인

PostGIS 공간 데이터 유형을 얼마나 이해했는지 확인해 보세요.

레슨 요약

이 레슨에서는 PostGIS가 제공하는 핵심 공간 데이터 유형을 살펴보았습니다. POINT, LINESTRING, POLYGON이 세 가지 기본 기하 도형 하위 유형이며, 다중 기하 도형 변형인 MULTIPOINT, MULTILINESTRING, MULTIPOLYGON과 모든 유형을 담을 수 있는 GEOMETRYCOLLECTION이 더 복잡한 도형을 다룬다는 것을 배웠습니다.

평면형 geometry 유형과 타원체형 geography 유형의 차이 및 두 유형 중 선택하는 방법도 살펴보았습니다. 잘 알려진 텍스트(WKT)를 사용하면 사람이 읽을 수 있는 문자열로 공간 값을 읽고 쓸 수 있으며, GIST 색인은 대규모 환경에서도 공간 쿼리를 빠르게 유지해 줍니다. ST_X, ST_SRID, ST_GeometryType과 같은 접근자 함수로 모든 기하 도형 값을 SQL에서 직접 검사할 수 있습니다.

자주 묻는 질문

“공간 데이터 유형” 강의는 무료인가요?

네 — “공간 데이터 유형” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“공간 데이터 유형”에서 뭘 배우나요?

SQL에서 점, 선, 다각형을 다룹니다 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“공간 데이터 유형” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 공간 데이터 유형
  2. 거리와 최근접 이웃
  3. 공간 조인과 포함 관계
  4. 공간 인덱스(GiST)
← SQL Academy(으)로 돌아가기