실무 현장에 파이썬 지도 시각화 기술을 도입하여 뼈저린 야근을 끝내기 전까지, 제 주말은 온통 파워포인트 화면 속에서 마우스로 빨간 점을 찍는 고된 노동의 연속이었습니다.
저는 현재 평일에는 회사를 다니는 평범한 40대 직장인이자, 밤과 주말에는 ‘스마트방역’이라는 방역 업체를 직접 운영하는 대표로서 치열한 N잡러의 삶을 살고 있습니다. 현장을 발로 뛰며 땀 흘리는 시간은 전혀 고되지 않습니다. 저를 정말 미치게 만들었던 것은 방역 작업이 끝난 후 관공서(안성시청)에 제출해야 하는 ‘결과 보고서’ 작성 업무였습니다.
관공서 보고서는 대충 표만 그려서 낼 수 없습니다. 특히 방역 업무의 특성상 “안성시 어느 동, 어느 구역을 방역했는지” 고해상도 지도 위에 1번부터 50번까지 동선과 구역 번호를 명확하게 표시해서 제출해야 합니다.
처음에는 네이버 지도를 캡처해서 파워포인트(PPT)에 붙여놓고, 엑셀에 적힌 주소를 하나하나 보면서 마우스로 동그라미를 그리고 번호를 타자로 쳤습니다. 구역이 10개면 할 만합니다. 하지만 방역 구역이 50개, 100개로 늘어나니 눈알이 빠질 것 같고 마우스를 쥔 손목에 경련이 일어났습니다. 주말 내내 3~4시간을 꼬박 지도 위에 점만 찍다 보니 ‘내가 지금 방역 전문가인가, 단순 클릭 기계인가’ 하는 지독한 현타(자괴감)가 밀려왔습니다.
이 지긋지긋한 막일의 고리를 끊어낸 것이 바로 파이썬과 Folium 라이브러리였습니다.
엑셀 주소를 좌표로 바꾸는 마법: 카카오 API의 도입
지도를 자동으로 그리려면 컴퓨터에게 ‘주소’를 알려주는 것만으로는 부족합니다. 컴퓨터는 “안성시 중앙로 123″이라는 글자를 지도 어디에 찍어야 할지 모르기 때문입니다. 반드시 이 주소를 위도(Latitude)와 경도(Longitude)라는 숫자로 된 좌표로 변환해 주어야 합니다.
이 작업을 ‘지오코딩(Geocoding)’이라고 부르는데, 저는 이 문제를 해결하기 위해 ‘카카오 개발자(Kakao Developers) API’를 연동했습니다. 파이썬과 카카오 API를 연결하니 기적이 일어났습니다.
판다스(Pandas) 라이브러리를 써서 방역 대장 엑셀 파일을 파이썬으로 불러온 뒤, 주소 컬럼을 카카오 API에 던져주었습니다. 그러자 100개가 넘는 방역 현장의 주소가 단 2초 만에 [37.0094, 127.2796] 형태의 정확한 위도·경도 좌표로 변환되어 엑셀 옆 칸에 차곡차곡 채워졌습니다. 이제 지도 위에 점을 찍을 완벽한 준비가 끝난 것입니다.

40대 실무자를 구원한 파이썬 지도 시각화 (Folium) 실전 코드
좌표가 준비되었다면 이제 하얀 도화지(지도)를 펴고 점을 찍어줄 화가가 필요합니다. 파이썬에서 그 화가 역할을 하는 녀석이 바로 Folium이라는 강력한 라이브러리입니다.
아래 코드는 제가 안성시청에 제출할 고해상도 방역 구역도 보고서를 만들 때, 제 노트북에서 실제로 핑핑 돌아가고 있는 현역 실무 코드의 핵심 뼈대입니다.
Python
import pandas as pd
import folium
from folium.plugins import MarkerCluster
# 1. 카카오 API로 위도/경도 좌표 변환을 마친 방역 대장 엑셀 파일 불러오기
df = pd.read_excel(r"C:\Users\Admin\Desktop\스마트방역_안성시_구역대장.xlsx")
# 2. 지도의 중심점 설정 (안성시청 인근 좌표 기준) 및 초기 지도 생성
# zoom_start 숫자가 클수록 지도가 확대되어 보입니다.
center_lat, center_lon = 37.0079, 127.2798
m = folium.Map(location=[center_lat, center_lon], zoom_start=13, tiles='OpenStreetMap')
# 3. 마커들이 너무 뭉쳐있을 때 예쁘게 그룹화해주는 플러그인 장착
marker_cluster = MarkerCluster().add_to(m)
# 4. 엑셀 데이터(방역 구역 1번~100번)를 한 줄씩 읽으면서 지도 위에 마커(점) 찍기
for index, row in df.iterrows():
lat = row['위도']
lon = row['경도']
zone_name = row['구역명']
zone_number = row['연번']
# 팝업을 눌렀을 때 구역 번호와 이름이 뜨도록 설정
popup_text = f"[{zone_number}번] {zone_name} 방역 완료"
# 지도 위에 빨간색 마커 아이콘 꽂기
folium.Marker(
location=[lat, lon],
popup=popup_text,
tooltip=f"{zone_name} 클릭 확인",
icon=folium.Icon(color='red', icon='info-sign')
).add_to(marker_cluster)
# 5. 완성된 지도를 HTML 파일로 저장하여 고해상도 리포트 생성
output_path = r"C:\Users\Admin\Desktop\안성시청_방역보고서_결과지도.html"
m.save(output_path)
print("성공적으로 방역 구역 지도가 생성되었습니다! 보고서를 확인하세요.")
이 코드를 처음 돌리고 바탕화면에 생성된 안성시청_방역보고서_결과지도.html 파일을 더블클릭하던 순간의 쾌감은 지금도 잊을 수 없습니다.
주말 내내 모니터에 코를 박고 3시간 동안 점을 찍어야 했던 그 방대한 안성시 일대의 방역 구역들이, 휠을 굴리면 부드럽게 확대되고 마우스를 올리면 “42번 구역”이라는 말풍선까지 완벽하게 뜨는 인터랙티브(대화형) 지도로 단 3초 만에 완성되어 있었습니다.

퀄리티의 차이가 관공서의 신뢰를 만든다
단순히 제 퇴근 시간이 3시간 단축된 것만이 성과가 아니었습니다. 이 스크립트로 뽑아낸 지도를 캡처하여 안성시청 주무관님께 보고서로 제출하자 반응은 폭발적이었습니다.
기존 영세 업체들이 제출하던 삐뚤빼뚤한 그림판 수준의 지도가 아니라, 데이터에 기반한 정확한 핀 포인트와 구역 번호가 고해상도로 깔끔하게 매핑되어 있으니 시청 담당자 입장에서도 검토하기가 훨씬 수월했던 것입니다.
“스마트방역 대표님네 보고서는 언제 봐도 정말 깔끔하고 정확해서 일하기가 너무 편해요.” 담당 주무관님의 이 한마디에 그동안 파이썬 영어 에러 메시지와 싸우며 겪었던 스트레스가 눈 녹듯 사라졌습니다. 기술을 통한 자동화가 나의 잃어버린 주말을 찾아주었을 뿐만 아니라, 40대 N잡러로서 운영하는 내 사업체의 ‘신뢰도’와 ‘경쟁력’을 압도적으로 끌어올려 준 것입니다.
현업에서 주의해야 할 Folium의 한계와 극복 꿀팁
파이썬 지도 시각화를 직접 구현하실 분들을 위해 피 흘리며 터득한 실전 꿀팁을 하나 덧붙입니다.
Folium 라이브러리는 태생적으로 웹 기반(HTML) 지도를 만들어냅니다. 그래서 움직이고 확대/축소가 가능한 아주 멋진 결과물이 나오지만, 관공서에 한글(hwp)이나 PDF로 제출하기 위해서는 이 화면을 결국 ‘고화질 이미지’로 변환해야 하는 귀찮음이 생깁니다.
이럴 때 윈도우 캡처 도구로 대충 자르면 화질이 깨집니다. 저는 이 문제를 해결하기 위해 이전에 연재했던 [셀레니움(Selenium) 웹 자동화] 기술을 융합했습니다. 파이썬이 Folium으로 HTML 지도를 만들면, 곧바로 셀레니움이 브라우저를 열어 그 지도를 4K 고해상도 스크린샷으로 자동 저장하게 만든 것입니다.
단일 라이브러리 하나만 쓸 때는 한계가 있지만, 우리가 배워온 파이썬 기술들을 레고 블록처럼 조립하는 순간 실무의 한계는 완벽하게 사라집니다. 다양한 지도 커스텀 옵션이 궁금하시다면 [Folium 공식 도큐먼트 가이드]를 번역기로 돌려 읽어보시는 것을 강력히 추천합니다.
글을 맺으며: 40대 N잡러의 가장 든든한 무기
회사 일만으로도 벅찬 40대의 나이에, 주말과 밤을 쪼개어 제2의 파이프라인(N잡)을 구축하는 것은 결코 쉽지 않은 길입니다. 체력은 예전 같지 않고, 챙겨야 할 서류와 보고서는 산더미처럼 쌓여갑니다.
하지만 인공지능과 파이썬이라는 무기를 손에 쥐게 되면서, 저는 기계가 할 수 있는 노동은 철저하게 기계에게 던져버리는 법을 배웠습니다. 지도에 점을 찍고 엑셀을 취합하던 시간은 파이썬이 대신해주고, 그로 인해 확보된 소중한 시간 동안 저는 스마트방역의 영업망을 확장하고 퀄리티 높은 서비스 본질에 집중할 수 있었습니다.
방역 현장의 주소 리스트를 카카오 API로 어떻게 좌표로 변환하는지 그 구체적인 과정(지오코딩)이 궁금하시다면, 제가 앞으로 연재할 파이썬 심화 시리즈를 기대해 주십시오.
오늘도 본업과 부업을 오가며 치열하게 하루를 살아내고 계신 대한민국의 모든 40대 직장인 여러분, 그리고 N잡러 여러분! 우리의 몸은 하나지만, 파이썬으로 만들어낸 수십 명의 디지털 비서들이 우리의 성공을 묵묵히 돕고 있다는 사실을 잊지 마십시오. 진심으로 응원합니다.
