
🎬 1분 브리핑 영상
생성형 AI로 공간분석 코드를 짜는 법은 데이터 스키마와 좌표계를 먼저 알려주고 결과를 검증하는 습관에서 시작합니다.
📌 3줄 요약
- LLM에 공간분석 코드를 시킬 땐 데이터 정보부터 정확히 알려줘야 함
- 좌표계·컬럼명 생략하면 그럴듯하지만 틀린 코드가 나옴
- 생성된 코드와 결과 지도는 반드시 눈으로 검증해야 함
"침수 위험지역 안에 있는 대피소 목록을 뽑아줘"라고 생성형 AI에 물어봤더니 코드를 뚝딱 만들어 줬습니다. 그대로 실행했더니 에러도 안 나고 결과도 나왔습니다. 그런데 뭔가 이상합니다. 분명 침수구역 안에 있어야 할 대피소가 하나도 안 잡힙니다. 알고 보니 두 레이어의 좌표계가 달랐던 겁니다. 코드는 멀쩡하게 돌아갔지만, 서로 다른 좌표계 위에서 거리와 포함 관계를 계산했으니 결과는 처음부터 의미가 없었던 거죠.
이런 일은 생각보다 자주 일어납니다. 생성형 AI는 문법적으로 맞는 코드를 아주 잘 만들지만, 여러분의 데이터가 정확히 어떤 모양인지는 모릅니다. 그래서 공간분석 코드를 AI에게 맡길 때는 '요청 잘하기'와 '결과 의심하기'라는 두 가지 습관이 필요합니다. 이번 편에서는 그 요령을 구체적으로 짚어보겠습니다.

🛰️ 생성형 AI에게 데이터 스키마를 왜 먼저 알려줘야 하나요?
데이터 스키마란 테이블에 어떤 컬럼이 있고 각 컬럼에 어떤 값이 들어있는지를 정리한 설계도입니다. AI는 여러분의 shp 파일이나 geojson 안을 직접 들여다볼 수 없습니다. 그래서 "대피소명이 들어있는 컬럼은 name입니다", "침수심 컬럼은 depth_m이고 미터 단위입니다"처럼 구체적으로 알려줘야 코드가 실제로 맞물립니다. 컬럼명을 대충 짐작해서 쓰면 코드는 실행되다가 KeyError 같은 오류를 내거나, 운 나쁘면 엉뚱한 컬럼을 골라 조용히 틀린 결과를 냅니다. 실무에서는 코드를 요청하기 전에 속성 테이블 상단 몇 줄을 캡처하거나 컬럼 목록을 텍스트로 복사해 프롬프트에 붙여 넣는 게 안전합니다. 재난 대응 현장에서 대피소-침수구역 매칭처럼 사람 생명과 연결된 분석일수록, 컬럼 하나 잘못 짚은 코드가 엉뚱한 대피 경로를 만들 수 있다는 점을 꼭 기억해야 합니다.
🌍 좌표계를 안 알려주면 왜 결과가 조용히 틀려지나요?
좌표계는 지구라는 둥근 표면 위의 위치를 숫자로 표현하는 약속입니다. 위경도로 된 WGS84(EPSG:4326)와 미터 단위 평면좌표계(예: 국내에서 자주 쓰는 EPSG:5179 등)는 숫자의 단위 자체가 다릅니다. 문제는 좌표계가 달라도 교차·버퍼·거리 계산 코드 자체는 에러 없이 돌아간다는 점입니다. 예를 들어 위경도 좌표 그대로 버퍼를 500 단위로 주면, 실제로는 500도짜리 원을 그리려다 이상한 값이 나오거나 지구 반대편 규모의 버퍼가 생길 수 있습니다. 그래서 프롬프트에 "입력 레이어의 좌표계는 EPSG:5179이고, 버퍼 반경은 500미터 기준으로 계산해줘"처럼 명시해야 합니다. 산사태 위험구역에서 일정 반경 내 주택을 찾는 분석처럼 거리 단위가 생명과 직결되는 작업일수록, 좌표계를 재투영(reproject)하는 코드를 포함시켜 달라고 구체적으로 요청하는 게 안전합니다.
🐍 AI가 짜준 코드, 어떤 오류가 자주 나오나요?
생성형 AI가 만드는 공간분석 코드에서 흔히 보이는 문제는 크게 세 가지입니다. 첫째는 라이브러리 버전 차이로 함수 이름이 바뀐 경우(geopandas나 shapely 버전에 따라 문법이 조금씩 다릅니다). 둘째는 공간 조인(spatial join) 방향을 반대로 짜서 포함 관계가 뒤집히는 경우입니다. 셋째는 널값(NaN)이나 빈 geometry를 거르지 않아 중간에 멈추거나 엉뚱한 집계가 나오는 경우입니다.
import geopandas as gpd
shelters = gpd.read_file("shelters.shp").to_crs(epsg=5179)
flood = gpd.read_file("flood_zone.shp").to_crs(epsg=5179)
result = gpd.sjoin(shelters, flood, predicate="within")
print(len(result), "개 대피소가 침수구역 내부")
이렇게 좌표계 통일과 predicate(공간관계 조건) 지정을 명시적으로 요청하면 오류 확률이 줄어듭니다. 대피소 전수조사처럼 반복 작업일수록 한 번 틀린 로직이 전체 결과를 왜곡할 수 있어 코드 리뷰가 필수입니다.
👀 결과를 왜 반드시 눈으로 확인해야 하나요?
코드가 에러 없이 끝났다고 결과가 맞다는 뜻은 아닙니다. 공간분석은 특히 "숫자는 나왔는데 지도로 보면 말이 안 되는" 경우가 많습니다. 예를 들어 교차 분석 결과 대피소가 0개로 나왔다면, 정말 0개인지 아니면 좌표계나 조인 방향이 잘못된 건지 지도에 띄워봐야 압니다. 이게 바로 '해봐야 아는 것'입니다. 코드 실행 결과를 QGIS나 지도 뷰어에 올려서 침수구역과 대피소 점이 실제로 겹치는지, 면적이나 개수가 상식적인 범위인지 눈으로 대조하는 절차를 꼭 거쳐야 합니다. 생성형 AI는 그럴듯한 설명까지 붙여서 코드를 주기 때문에 신뢰하기 쉽지만, 공간분석 결과는 지도라는 눈으로 보는 검증 수단이 있다는 걸 적극 활용해야 합니다. 특히 재난 상황보고서에 들어갈 수치라면 지도 확인 없이 숫자만 복사해 쓰는 일은 피해야 합니다.
🧭 검증 요구를 프롬프트에 어떻게 넣으면 좋나요?
AI에게 코드만 받지 말고, 검증 코드까지 같이 요청하는 습관을 들이면 좋습니다. "결과 개수를 출력하고, 입력 레이어와 결과 레이어의 좌표계가 같은지 assert로 확인하는 코드도 같이 짜줘"처럼 요청하면 AI가 스스로 체크 로직을 넣어줍니다. 또한 "중간 결과를 geojson으로 저장해서 지도에서 확인할 수 있게 해줘"라고 덧붙이면, 최종 결과만이 아니라 중간 단계 산출물도 눈으로 볼 수 있어 어디서 틀렸는지 짚기 쉬워집니다. 이런 습관은 반복되는 재난 데이터 처리 파이프라인을 만들 때 특히 유용한데, 매번 사람이 전수 검사하기 어려운 자동화 업무일수록 코드 안에 자체 점검 로직을 심어두는 게 장기적으로 시간을 아껴줍니다.
🖥️ 화면에서 따라하기

- 데이터 정보 정리
속성 테이블 열기(레이어 우클릭 > 속성 테이블 열기)로 컬럼명과 예시값 확인 - 좌표계 확인
레이어 우클릭 > 속성 > 정보 탭에서 좌표계(EPSG 코드) 확인 후 메모 - 프롬프트 작성
컬럼명, 좌표계, 원하는 결과 형식을 넣어 AI에 코드 요청 - 코드 실행
파이썬 환경(예: Jupyter Notebook)에 붙여넣고 실행, 에러 메시지 확인 - 결과 지도 확인
결과 파일을 레이어 > 레이어 추가 > 벡터 레이어로 불러와 원본과 겹쳐보기 - 수치 재검산
결과 개수·면적을 속성 테이블 하단 요약이나 필드 계산기로 다시 확인
※ 프로그램 버전에 따라 메뉴 이름이 조금씩 다를 수 있습니다. 위 그림은 순서를 정리한 도식입니다.
✍️ 그대로 복사해 쓰는 프롬프트
좌표계와 컬럼 정보를 명시해 침수구역-대피소 공간조인 코드 요청
너는 GIS 공간분석에 능숙한 파이썬 개발자야. 아래 조건으로 geopandas를 이용한 공간조인 코드를 작성해줘. 입력 레이어1: [shelters.shp], 좌표계 [EPSG:5179], 컬럼 [name, capacity] 입력 레이어2: [flood_zone.shp], 좌표계 [EPSG:5179], 컬럼 [depth_m, zone_id] 요청: 대피소가 침수구역 내부에 포함되는지 판별하고, 포함된 대피소 목록과 개수를 출력 추가 요청: 두 레이어의 좌표계가 다를 경우 자동으로 통일하는 코드 포함 추가 요청: 결과를 result.geojson으로 저장하는 코드 포함 주의: 라이브러리 함수는 최신 버전 기준으로 작성하되 버전 차이가 있을 수 있음을 주석으로 표시해줘
※ 대괄호 부분을 상황에 맞게 바꿔서 쓰세요. 받은 답은 그대로 쓰지 말고 사실 확인을 거치세요.
🧪 직접 해보기
- 가지고 있는 shp나 csv 파일의 컬럼명과 좌표계를 먼저 메모해보기
- 위 프롬프트로 코드를 받아 실행하고, 결과 개수가 예상과 맞는지 지도에서 확인하기
- 일부러 좌표계 정보를 빼고 같은 질문을 해본 뒤 결과가 어떻게 달라지는지 비교하기
❓ 자주 묻는 질문
Q. 생성형 AI가 짜준 공간분석 코드를 그냥 믿고 써도 되나요?
A. 에러 없이 실행된다고 결과가 맞는 건 아닙니다. 좌표계나 공간관계 조건이 틀려도 코드는 정상 작동하는 경우가 많아 지도로 직접 확인하는 절차가 꼭 필요합니다.
Q. 좌표계를 모르는 데이터는 어떻게 확인하나요?
A. QGIS 같은 무료 GIS 도구에서 레이어를 불러온 뒤 속성 정보 창에서 좌표계(CRS)를 확인할 수 있습니다. 파일에 좌표계 정보가 아예 없다면 원본 출처 문서를 확인해야 합니다.
Q. AI에게 공간분석을 맡기면 전문가가 필요 없어지나요?
A. 코드 작성 속도는 빨라지지만 데이터 해석과 결과 검증은 여전히 사람의 판단이 필요합니다. 특히 재난 대응처럼 결과가 의사결정에 직결되는 분야는 전문가 검토가 꼭 필요합니다.
생성형 AI는 공간분석 코드를 짜는 속도를 확실히 높여주지만, 데이터의 맥락과 결과의 타당성을 판단하는 몫은 여전히 사람에게 남아 있습니다. 다음 편에서는 이렇게 만든 분석 결과를 지도나 대시보드로 어떻게 보기 좋게 공유할 수 있을지 살펴보겠습니다.
GeoAI 기초 시리즈 22편 · 전체 43편
재난안전과 GeoAI 이야기를 더 보고 싶다면 아래 채널도 함께 보세요.
📌 바로가기
댓글 없음:
댓글 쓰기