GIS/WFS, WMS

WMS와 WFS는 뭐가 다를까? GIS 처음 할 때 헷갈렸던 차이 정리

노프라블롬 2026. 9. 21. 20:16

GIS나 웹지도를 다루다 보면 WMS, WFS라는 용어를 자주 보게 된다.

둘 다 지도 서버에서 공간정보를 가져오는 방식이고 이름도 비슷하다 보니 처음에는 차이가 잘 와닿지 않았다.

WMS = Web Map Service
WFS = Web Feature Service
 

둘 다 지도 데이터를 제공하는 건 맞는데, 무엇을 받아오는지에서 큰 차이가 있다.

간단하게 생각하면,

WMS는 서버가 만들어준 지도를 받아서 보여주는 방식

WFS는 지도에 들어가는 공간 객체(Feature)를 데이터로 받아오는 방식

 

이라고 이해하면 편하다.


WMS는 지도를 받아온다

WMS는 Web Map Service의 약자다.

클라이언트에서 지도 서버에 특정 영역의 지도를 요청하면 서버가 해당 영역을 렌더링해서 결과를 반환한다.

대표적인 요청이 GetMap이다.

대략적인 형태를 보면:

SERVICE=WMS
REQUEST=GetMap
VERSION=1.3.0
LAYERS=sample_layer
CRS=EPSG:5179
BBOX=...
WIDTH=800
HEIGHT=600
FORMAT=image/png
 

LAYERS, BBOX, WIDTH, HEIGHT 등을 보면 어떤 방식인지 어느 정도 감이 온다.

이 영역을 이 크기로 그려서 보내줘.

 

에 가까운 요청이다.

서버는 요청을 받아 지도를 렌더링하고, 일반적으로 PNG나 JPEG 같은 이미지 형태로 결과를 제공한다.

WMS GetMap 요청으로 지도 이미지를 받아오는 구조


WFS는 공간 객체를 받아온다

WFS는 Web Feature Service의 약자다.

WMS가 렌더링된 지도 결과를 가져오는 방식이라면 WFS는 Feature 자체를 조회한다.

예를 들어 지도에 이런 데이터가 있다고 해보자.

항구
등대
도로
행정구역
건물
 

각각의 객체에는 위치뿐만 아니라 속성정보가 들어 있을 수 있다.

예를 들어 등대 데이터라면:

이름 : 테스트등대
종류 : 등대
높이 : 15m
위치 : POINT(...)
 

같은 데이터가 있을 수 있다.

WFS에서는 이런 Geometry + Attribute를 클라이언트가 직접 받아 활용할 수 있다.

대표적인 요청은 GetFeature다.

SERVICE=WFS
REQUEST=GetFeature
VERSION=1.1.0
TYPENAME=sample_layer
 

응답은 환경과 요청 형식에 따라 GML, GeoJSON 등의 공간 데이터 형식으로 받을 수 있다.

예를 들어 GeoJSON이라면 대략:

 
{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [127.0, 37.5]
  },
  "properties": {
    "name": "테스트 객체",
    "type": "sample"
  }
}
 

처럼 좌표와 속성값 자체가 데이터로 들어온다.

WFS GetFeature 요청으로 공간 객체와 속성정보를 받아오는 구조

WMS와 WFS를 비교해보면

두 개를 같이 놓고 보면 차이가 더 잘 보인다.

 

구분 WMS WFS
이름 Web Map Service Web Feature Service
주요 목적 지도 표현 공간 객체 조회
대표 요청 GetMap GetFeature
결과 렌더링된 지도 Feature 데이터
Geometry 활용 직접 다루기 어려움 가능
속성 데이터 활용 제한적 가능
데이터 가공 상대적으로 제한적 클라이언트에서 활용 가능
대용량 데이터 서버가 렌더링 Feature 수가 많으면 응답이 커질 수 있음

 

처음에는 둘 다 지도 서버에서 무언가 가져오니까 비슷하게 느껴졌는데,

“완성된 지도를 받을 건지, 지도에 들어가는 데이터를 받을 건지”

라고 생각하니 구분하기 쉬웠다.


같은 레이어도 WMS와 WFS의 느낌이 다르다

예를 들어 전국에 있는 특정 시설물을 지도에 표시한다고 생각해보자.

WMS라면

서버가 시설물 위치를 지도에 그린 다음 결과를 이미지로 만들어서 보내준다.

클라이언트에서는 그 결과를 지도 위에 표시한다.

DB
 ↓
지도 서버
 ↓
렌더링
 ↓
PNG
 ↓
웹지도
 

WFS라면

시설물의 좌표와 속성정보를 Feature 형태로 받아온다.

DB
 ↓
지도 서버
 ↓
Feature
 ↓
웹지도
 ↓
클라이언트에서 스타일/클릭/분석
 

그래서 WFS로 가져온 데이터는 JavaScript에서 Feature를 직접 다루거나, 특정 조건에 맞는 객체만 처리하는 등 활용 범위가 넓다.

반대로 그만큼 많은 데이터를 한 번에 요청하면 클라이언트가 처리해야 하는 데이터 양도 커질 수 있다.


WFS를 사용할 때 데이터 양을 생각해야 하는 이유

여기서 예전에 겪었던 문제가 연결된다.

WFS를 별다른 조건 없이 호출했더니 응답 데이터가 굉장히 커졌던 적이 있었다.

Feature 하나만 보면 데이터가 크지 않지만,

Feature 1
Feature 2
Feature 3
...
Feature 100,000
 

처럼 객체 수가 많아지면 이야기가 달라진다.

특히 Geometry와 여러 속성값을 XML/GML 형태로 한꺼번에 반환한다면 응답 크기가 상당히 커질 수 있다.

실제로 이전에 테스트했던 WFS 요청에서는 응답 데이터가 약 1GB까지 커졌고, 브라우저에서 이를 처리하면서 메모리 사용량도 크게 증가했다.

그래서 WFS에서는 필요한 데이터만 가져오는 게 중요하다.

예를 들어:

BBOX
 

를 이용해서 현재 지도 영역의 데이터만 요청하거나,

FILTER
 

를 사용해서 조건에 맞는 Feature만 조회하는 방식이다.

이 부분은 따로 정리할 내용이 많아서 다음 글에서 다뤄보려고 한다.


그럼 WMS가 WFS보다 좋은 걸까?

그건 아니다.

두 서비스의 목적 자체가 다르다.

단순히 지도를 화면에 보여주는 것이 목적이라면 굳이 모든 Feature 데이터를 클라이언트로 가져올 필요가 없는 경우가 많다.

반대로 지도 객체를 클릭해서 속성을 확인하거나, 좌표를 이용해 추가적인 처리를 하거나, Feature 자체를 분석해야 한다면 WFS가 필요할 수 있다.

예를 들어:

지도 배경처럼 보여주기

→ WMS
 

객체의 좌표와 속성값을 직접 사용하기

→ WFS
 

정도로 먼저 생각해볼 수 있다.

물론 실제 서비스에서는 요구사항에 따라 WMS와 WFS를 함께 사용하기도 한다.


GetCapabilities도 자주 보인다

WMS와 WFS를 사용하다 보면 GetCapabilities라는 요청도 자주 만나게 된다.

REQUEST=GetCapabilities
 

쉽게 말하면 해당 서비스가

어떤 기능을 지원하고
어떤 레이어가 있고
어떤 버전을 사용할 수 있는지

 

등을 알려주는 서비스 정보 문서라고 보면 된다.

WMS에서도 사용할 수 있고 WFS에서도 사용할 수 있다.

WMS
 ├─ GetCapabilities
 ├─ GetMap
 └─ GetFeatureInfo

WFS
 ├─ GetCapabilities
 ├─ DescribeFeatureType
 └─ GetFeature
 

처음에는 GetMap, GetFeature, GetCapabilities가 전부 비슷하게 보여서 헷갈렸는데 각각의 역할을 알고 나면 요청 URL도 조금씩 읽히기 시작한다.

WMS WFS 차이 예시 사진


정리

WMS와 WFS의 차이를 가장 간단하게 기억하면 이렇다.

WMS
→ 서버가 그린 지도 결과를 받는다.

WFS
→ 공간 객체 데이터를 받는다.
 

WMS에서는 지도 표현이 중심이고,

WFS에서는 Feature의 Geometry와 속성 데이터 활용이 중심이다.

그리고 WFS는 실제 공간 데이터를 가져오기 때문에 객체 수가 많아지면 응답 데이터가 굉장히 커질 수도 있다.

그래서 WFS를 사용할 때는 단순히

GetFeature로 가져오면 되겠지.

 

에서 끝나는 게 아니라 어느 범위의 데이터를 얼마나 가져올 것인지도 같이 생각해야 했다.

다음에는 여기서 이어서 WFS의 FILTER와 BBOX가 무엇이고, 왜 대용량 데이터를 조회할 때 필요한지 정리해보려고 한다.