최근에 WFS API 쪽을 수정하면서 꽤 당황스러운 문제가 하나 있었다.
특정 레이어를 호출해서 테스트하고 있었는데...
Edge 메모리가 갑자기 10GB를 넘게 먹기 시작했다.
처음에는
엥...? 브라우저가 왜 이러지? ㅠㅠ
싶었다.
데이터가 좀 많은 레이어이긴 했지만 그래도 API 한 번 호출했다고 메모리를 이렇게까지 먹는 게 맞나 싶었다.
그래서 하나씩 확인해보기 시작했다.
일단 브라우저를 빼고 호출해봤다
혹시 Edge 문제인가 싶어서 curl로 API를 직접 호출해봤다.
curl -o result.xml "WFS_API_URL"
그런데 결과를 보고 조금 당황했다.
100 1.04G 0 1.04G 0 0 25.33M 0 00:42
응답 파일 크기 약 1.04GB...
ㅋㅋㅋㅋㅋ
이 정도면 Edge가 힘들어할 만했다.
다운로드 시간도 약 42초 정도 걸렸다.
처음에는 단순히 브라우저 메모리 문제라고 생각했는데, 실제로는 API가 한 번 호출될 때 1GB가 넘는 XML을 만들어서 내려주고 있었던 것이다.
그럼 서버에서는 이걸 어떻게 만들고 있지?
여기서부터 서버 코드를 다시 보기 시작했다.
WFS 데이터를 조회하고 XML을 만드는 과정에서 데이터를 메모리에 계속 쌓아두고 마지막에 응답하는 구조가 있었는데,
데이터가 몇 MB 정도라면 별문제가 없겠지만...
최종 결과물이 1GB라면 얘기가 달라진다.
문자열을 계속 만들고 객체를 메모리에 들고 있다 보면 JVM 입장에서도 부담이 커질 수밖에 없다.
특히 이게 운영 서버라고 생각하면 더 무서웠다.
한 명이 호출해서 끝나는 게 아니라 동시에 여러 명이 대용량 레이어를 호출하면?
서버: 살려줘... ㅠㅠ
가 될 수도 있다.
그래서 단순하게 Heap Memory를 늘리는 방향보다는 애초에 메모리를 많이 사용하지 않는 방식으로 처리해야겠다고 생각했다.
그런데 기존 API도 버릴 수가 없다
여기서 또 하나 고민했던 게 있었다.
성능만 생각하면 코드를 그냥 새로 바꾸면 되는데, 이미 운영 중인 API라서 기존 사용자들이 사용하던 호출 방식도 유지해야 했다.
기존에는 FILTER를 XML 형태로 직접 전달하는 방식이 있었다.
그런데 새로 작업하면서 좀 더 간단하게
속성명|값
형태로도 필터를 받을 수 있도록 처리하고 싶었다.
그렇다고 기존 XML 방식을 없애버리면 기존 사용자가 갑자기 API를 못 쓰게 된다.
그건 그것대로 장애다...ㅠㅠ
그래서 두 방식을 같이 처리하도록 했다.
// 기존 XML 방식
if (filter.trim().startsWith("<")) {
sb.append(filter);
continue;
}
// 신규 property|value 방식
String[] split = filter.split("\\|");
if (split.length < 2) {
continue;
}
XML로 들어오면 기존 방식 그대로 처리하고,
그게 아니라면 property|value 형태로 판단해서 새로운 방식으로 처리하도록 했다.
이렇게 하면 기존 사용자는 수정할 필요가 없고, 신규 방식도 사용할 수 있다.
이번에 느낀 점
처음에는 그냥
"Edge 메모리가 왜 이렇게 많이 올라가지?"
에서 시작한 문제였다.
그런데 하나씩 따라가다 보니
브라우저 메모리 → 실제 응답 크기 → 서버의 XML 생성 방식 → 기존 API 호환성
까지 연결됐다.
특히 이번에 느낀 건 운영 중인 API를 수정할 때는 단순히
"이 코드가 더 효율적이니까 이렇게 바꾸자!"
라고 할 수 없다는 점이었다.
성능도 중요하지만 기존 사용자들이 쓰고 있는 방식도 생각해야 하고, 대용량 요청이 서버 전체에 어떤 영향을 줄지도 같이 봐야 했다.
그리고 무엇보다...
WFS XML 1GB는 너무했다 ㅠㅠ
앞으로 대용량 공간정보 API를 볼 때는 데이터 조회 속도만 볼 게 아니라,
"이 데이터를 서버가 어떤 방식으로 만들고 있고, 클라이언트한테 어떻게 전달하고 있지?"
까지 같이 봐야겠다는 생각이 들었다.
'GIS > WFS, WMS' 카테고리의 다른 글
| WFS에서 BBOX와 FILTER는 왜 사용할까? 필요한 데이터만 조회하기 (0) | 2026.09.22 |
|---|---|
| WMS와 WFS는 뭐가 다를까? GIS 처음 할 때 헷갈렸던 차이 정리 (0) | 2026.09.21 |