파이썬 주소 좌표 변환: 40대 N잡러가 방역 현장 100곳 위도 경도 3초 만에 뽑은 썰

실무 현장에 파이썬 주소 좌표 변환 자동화 코드를 도입하기 전까지, 저는 주말마다 지도 사이트에 주소를 하나씩 검색해 마우스 우클릭으로 위도와 경도 숫자를 복사해 붙이는 끝없는 수작업에 시달려야 했습니다.

저는 평일에는 회사에서 기획과 결재 문서를 다루는 40대 직장인이자, 밤과 주말에는 소독 및 해충 방역 전문 업체인 ‘스마트방역’을 운영하는 대표입니다. 두 가지 직업을 동시에 끌고 가는 N잡러에게 주말은 쉬는 날이 아니라 가장 바쁘게 현장을 누비는 시간입니다. 무거운 소독 장비를 들고 안성시 일대의 상가와 주택가, 공공시설 수십 곳을 돌며 구슬땀을 흘리고 집에 돌아오면 해가 져서 어둑어둑해집니다.

현관문을 열면 반갑게 꼬리를 흔들며 반겨주는 우리 집 시바견 ‘반달이’의 턱 밑과 미간을 긁어주며 잠시 숨을 돌리고, 반달이의 단짝 친구인 옆집 래브라도 리트리버 ‘럭키’와 함께 동네 산책을 다녀옵니다. 아들과 저녁을 먹고 재운 뒤 밤 10시 반이 되어 책상 스탠드를 켜면, 그때부터 진짜 고비인 ‘관공서 제출용 방역 보고서’ 작업이 시작됩니다.

지난번 포스팅에서 안성시청에 제출할 방역 구역 지도를 파이썬(Folium)으로 3초 만에 그렸던 이야기를 나누었는데요. 사실 그 멋진 지도를 그리기 직전에 저를 좌절하게 만들었던 거대한 장벽이 하나 있었습니다. 바로 현장에서 적어온 ‘한글 주소’를 컴퓨터가 알아들을 수 있는 ‘위도와 경도 숫자’로 바꾸는 지오코딩(Geocoding) 작업이었습니다.

엑셀 대장에는 분명히 “경기도 안성시 공도읍…” 같은 한글 주소만 적혀 있는데, 지도 시각화 프로그램은 주소 글자로는 점을 찍지 못하고 오직 37.0079, 127.2798 같은 정확한 좌표 숫자만을 요구했습니다.

처음에는 별수 없이 네이버 지도나 구글 지도를 띄워놓고, 엑셀에 적힌 주소 100개를 하나씩 복사해 검색한 뒤 좌표를 따서 엑셀 옆 칸에 붙여넣었습니다. 침침한 눈을 비비며 새벽 1시까지 숫자 수백 개를 옮겨 적다 보면, 소수점 자리 하나를 잘못 복사해서 안성시 방역 현장이 갑자기 동해 바다 한가운데에 찍히는 어처구니없는 실수가 터지곤 했습니다. 이 미련한 수작업을 끝내기 위해 제가 찾아낸 해답이 바로 카카오 API와 파이썬의 결합이었습니다.

한국 주소에는 구글보다 카카오 API가 압도적인 이유

처음 파이썬 주소 좌표 변환 방법을 구글링했을 때는 해외 개발자들이 많이 쓰는 무료 라이브러리(geopy 등)를 따라 해 보았습니다. 하지만 실제 제 방역 대장 엑셀 파일을 넣고 돌려보니 결과는 처참했습니다. 절반 이상의 주소가 좌표를 찾지 못하고 빈칸으로 나왔기 때문입니다.

한국의 주소 체계는 생각보다 독특하고 복잡합니다. 도로명주소와 지번주소가 섞여 쓰이는 것은 기본이고, 현장에서 급하게 메모하다 보면 “안성시 대덕면 내리 000번지 상가 1층”처럼 번지수 뒤에 상세 건물명이나 층수가 붙는 경우가 허다합니다. 해외 오픈소스 지도 엔진은 이런 한국식 주소 표현을 기가 막히게 이해하지 못합니다.

반면 우리나라 사람들에게 익숙한 ‘카카오 개발자(Kakao Developers) 로컬 API’는 한국 지리와 주소 체계를 가장 완벽하게 파악하고 있습니다. 지번이든 도로명이든, 심지어 약간의 띄어쓰기 오류가 있어도 찰떡같이 알아듣고 정확한 위도와 경도를 뱉어냅니다. 게다가 하루에 수만 건 이상 무료로 변환할 수 있는 넉넉한 한도를 제공하니, 중소기업 실무자나 저 같은 N잡러에게는 더할 나위 없는 최고의 도구입니다.

준비물은 딱 하나, 카카오 개발자 사이트에 로그인해서 내 애플리케이션을 등록하고 발급받은 서른두 자리의 ‘REST API 키’만 있으면 됩니다.

파이썬 주소 좌표 변환 자동화를 위해 카카오 개발자 사이트에서 REST API 키를 발급받은 화면
대체 텍스트: 파이썬 주소 좌표 변환 자동화를 위해 카카오 개발자 사이트에서 REST API 키를 발급받은 화면

40대 실무자를 구원한 파이썬 주소 좌표 변환 실전 코드

API 키를 준비했다면 이제 파이썬에게 엑셀 대장을 넘겨줄 차례입니다. 외부 인터넷 서버와 통신하는 requests 도구와 엑셀을 다루는 pandas 도구를 함께 사용합니다.

아래 코드는 제가 안성시청 방역 대장에 적힌 100여 곳의 현장 주소를 읽어들여, 단 3초 만에 위도와 경도 칸을 자동으로 채워 넣을 때 사용하는 실제 현역 코드입니다.

Python

import pandas as pd
import requests
import time

# 1. 카카오 개발자 사이트에서 발급받은 본인의 REST API 키 입력
KAKAO_API_KEY = "여기에_발급받은_REST_API_키를_입력하세요"

# 2. 주소를 위도/경도로 바꿔주는 핵심 함수 만들기
def get_coordinates(address):
    url = "https://dapi.kakao.com/v2/local/search/address.json"
    headers = {"Authorization": f"KakaoAK {KAKAO_API_KEY}"}
    params = {"query": address}
    
    try:
        response = requests.get(url, headers=headers, params=params, timeout=5)
        if response.status_code == 200:
            result = response.json()
            # 검색 결과가 정상적으로 존재할 때만 좌표 추출
            if result['documents']:
                # 주의: 카카오 API에서 x는 경도(Longitude), y는 위도(Latitude)입니다!
                lon = result['documents'][0]['x']
                lat = result['documents'][0]['y']
                return float(lat), float(lon)
        return None, None
    except Exception as e:
        print(f"주소 변환 중 통신 에러 발생 ({address}): {e}")
        return None, None

# 3. 주소 목록이 담긴 방역 대장 엑셀 파일 불러오기
input_path = r"C:\Users\Admin\Desktop\스마트방역_안성시_방역대장_원본.xlsx"
df = pd.read_excel(input_path)

print(f"총 {len(df)}건의 파이썬 주소 좌표 변환 작업을 시작합니다...")

# 4. 한 줄씩 주소를 꺼내어 위도와 경도 채워 넣기
lat_list = []
lon_list = []

for idx, row in df.iterrows():
    clean_addr = str(row['현장주소']).strip()
    lat, lon = get_coordinates(clean_addr)
    
    lat_list.append(lat)
    lon_list.append(lon)
    
    # 서버 과부하 방지를 위한 아주 짧은 숨 고르기 (0.05초)
    time.sleep(0.05)

df['위도'] = lat_list
df['경도'] = lon_list

# 5. 좌표가 완벽히 채워진 새 엑셀 파일로 저장하기
output_path = r"C:\Users\Admin\Desktop\스마트방역_안성시_방역대장_좌표완성.xlsx"
df.to_excel(output_path, index=False)

print("모든 주소의 위도/경도 변환이 완료되었습니다! 바탕화면을 확인하세요.")

이 파이썬 주소 좌표 변환 스크립트를 실행하고 엔터를 쳤을 때의 그 짜릿함은 아직도 생생합니다.

과거의 제가 두 시간 동안 지도 창과 엑셀 창을 번갈아 클릭하며 눈이 빠져라 복사해 넣던 200개의 소수점 숫자(위도 100개, 경도 100개)가, 터미널 창이 스르륵 올라간 지 불과 3초 만에 오차 하나 없이 엑셀의 위도, 경도 열에 빽빽하게 채워져 나왔기 때문입니다.

파이썬 주소 좌표 변환 코드로 방역 현장 주소 옆에 위도와 경도가 자동 입력된 엑셀 결과 화면
대체 텍스트: 파이썬 주소 좌표 변환 코드로 방역 현장 주소 옆에 위도와 경도가 자동 입력된 엑셀 결과 화면

현업에서 방역 점 찍다가 남극 갈 뻔한 2가지 치명적 함정

코드를 복사해서 바로 실무에 적용하실 직장인분들을 위해, 제가 밤늦게 컴퓨터 앞에서 직접 부딪히며 겪었던 황당하고도 치명적인 시행착오 두 가지를 꼭 짚어드리고 싶습니다.

첫 번째는 ‘위도(y)와 경도(x)의 위치 바뀜’ 함정입니다. 우리는 학창 시절 수학 시간에 좌표를 배울 때 무조건 (x, y) 순서로 외웠습니다. 그래서 카카오 API가 돌려준 결과값에서 아무 의심 없이 x를 첫 번째(위도)에 넣고, y를 두 번째(경도)에 넣어서 지도를 그렸습니다.

그랬더니 어떤 일이 벌어졌을까요? 분명히 경기도 안성시 방역 현장을 찍었는데, 지도 화면을 아무리 축소해 봐도 대한민국에는 점이 하나도 없고 저 멀리 남극 근처 인도양 바다 한가운데에 빨간 핀 100개가 옹기종기 모여 있는 기괴한 광경이 펼쳐졌습니다.

지도 좌표계에서는 가로축인 x가 경도(우리나라는 127도 부근)이고, 세로축인 y가 위도(우리나라는 37도 부근)입니다. 우리가 흔히 부르는 ‘위도, 경도’ 순서로 맞출 때는 반드시 y를 먼저 꺼내서 위도에 넣고, x를 경도에 넣어야 우리 동네 지도에 정확히 점이 찍힙니다. 이 사소한 차이 하나 때문에 밤 12시에 한 시간 넘게 엉뚱한 코드를 뒤지며 식은땀을 흘렸습니다.

두 번째는 현장에서 적어온 ‘지저분한 상세 주소’ 문제입니다. 현장 수첩에 주소를 적다 보면 “안성시 인지동 000-0 상가 1층 뒷문 쓰레기장 옆”처럼 위치 설명을 길게 붙여 적을 때가 있습니다. 이 문장을 그대로 API에 던지면 카카오는 “뒷문 쓰레기장 옆이라는 주소는 대한민국에 없습니다”라며 빈칸(None)을 돌려줍니다.

따라서 파이썬 주소 좌표 변환 성공률을 100%로 끌어올리려면, 엑셀에서 주소를 넣을 때 번지수나 도로명 건물 번호까지만 깔끔하게 끊어주거나, 만약 변환 결과에 빈칸이 나왔을 때만 사람이 눈으로 한 번 확인하도록 예외 처리(None 표시)를 해두는 것이 가장 현명한 실무 대처법입니다. API 키 발급 절차와 응답 데이터 구조에 대한 더 자세한 설명은 카카오 개발자 로컬 API 공식 문서 가이드를 참고하시면 큰 도움이 됩니다.

글을 맺으며: 단순 노동을 걷어내야 진짜 내 삶이 보인다

낮에는 직장인으로, 밤과 주말에는 스마트방역의 대표로 살아가며 제가 뼈저리게 깨달은 진리가 하나 있습니다. 내 몸을 갈아 넣는 성실함만으로는 결코 투잡, 쓰리잡의 무게를 오래 버텨낼 수 없다는 사실입니다.

기계가 3초 만에 해낼 수 있는 단순 좌표 검색과 복사 붙여넣기에 내 소중한 일요일 밤 두 시간을 바치지 마십시오. 오늘 소개해 드린 파이썬 주소 좌표 변환 코드처럼, 반복되는 서류 작업은 철저히 파이썬에게 위임해야 합니다.

그렇게 아낀 두 시간으로 일찍 컴퓨터를 끄고, 마루에서 기다리는 반려견 반달이의 배를 쓰다듬어 주며 가족들과 따뜻한 대화를 나누는 것. 그리고 맑은 정신으로 다음 날 아침 출근길에 오르는 것이야말로 우리가 나이를 먹어가며 기술을 배워야 하는 진짜 이유입니다.

오늘 이 코드를 통해 엑셀에 위도와 경도 좌표를 완벽하게 채워 넣으셨다면, 이제 그 엑셀 파일을 그대로 불러와서 관공서 제출용 고해상도 구역 지도를 3초 만에 그려낼 차례입니다. 제가 앞서 연재했던 [파이썬 지도 시각화: 40대 N잡러가 관공서 방역 보고서 자동화한 썰] 글을 이어서 읽어보시면, 주소 변환부터 최종 지도 보고서 완성까지 이어지는 완벽한 실무 자동화 파이프라인을 내 손으로 완성하실 수 있을 것입니다.

오늘도 본업의 책임감과 부업의 열정 사이에서 묵묵히 밤을 지새우고 계신 대한민국 모든 40대 실무자 여러분의 건승과 빠른 퇴근을 진심으로 응원합니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다