[공공데이터 API X 파이썬 데이터 수집 및 자동화] 시리즈를 이어서 진행합니다. (Series-ID: PY-API-2026)

2편: 데이터 수집의 시작, 공공데이터포털 인증키 발급 및 인코딩 오류 예방하기

파이썬으로 공공데이터를 수집하기로 마음먹었다면 가장 먼저 거쳐야 하는 관문이 있습니다. 바로 대한민국 공식 오픈 API의 보물창고인 '공공데이터포털'에서 회원가입을 하고, 내가 원하는 데이터의 사용 권한인 '인증키(API Key)'를 발급받는 것입니다.

처음 사이트에 들어가면 수많은 메뉴와 복잡한 용어 때문에 어디서부터 손을 대야 할지 막막할 수 있습니다. 게다가 우여곡절 끝에 키를 받아서 코드를 실행했는데, 분명히 맞게 쓴 키가 자꾸 틀렸다고 나오는 황당한 상황을 마주하기도 합니다.

오늘은 공공데이터포털에서 안전하게 인증키를 발급받는 단계별 과정과 함께, 입문자 10명 중 8명이 무조건 한 번은 겪는다는 '인코딩(Encoding) 인증키 오류'를 원천 차단하는 방법을 제 경험을 담아 알기 쉽게 풀어보겠습니다.

공공데이터 오픈 API 발급받는 4단계 과정

공공데이터포털에서 데이터를 가져오기 위한 준비 과정은 생각보다 직관적입니다. 천천히 다음 단계를 따라오시면 됩니다.

  • 1단계: 회원가입 및 로그인 공공데이터포털(data.go.kr)에 접속하여 회원가입을 진행합니다. 개인 개발자나 블로그 실습용이라면 일반 회원으로 가입하시면 됩니다.

  • 2단계: 원하는 데이터셋 검색 상단 검색창에 내가 수집하고 싶은 데이터를 검색합니다. 예를 들어 '단기예보', '상가업소', '아파트 매매 실거래자료' 등을 검색한 뒤, 결과 탭에서 '오픈 API' 메뉴를 클릭합니다.

  • 3단계: 활용 신청 및 개발 계정 생성 원하는 API를 찾았다면 우측의 '활용신청' 버튼을 누릅니다. 활용 목적을 적는 칸이 나오는데, 상업적 목적이 아니라면 '연구/학습'이나 '웹/앱 개발 실습' 등으로 간단히 적으셔도 대부분 즉시 승인이 떨어집니다.

  • 4단계: 마이페이지에서 인증키 확인 신청 완료 후 '마이페이지'의 '오픈API > 개발계정'으로 이동하면 내가 신청한 서비스가 보입니다. 이를 클릭하면 상세보기 화면에서 길게 나열된 알파벳과 숫자의 조합, 즉 '인증키'를 확인할 수 있습니다.

일반 인증키의 덫: Encoding과 Decoding의 차이

마이페이지에서 인증키를 확인했을 때, 눈치 빠른 분들은 키가 두 종류로 나뉘어 있다는 것을 발견하셨을 겁니다. 하나는 '일반 인증키(Encoding)'이고, 다른 하나는 '일반 인증키(Decoding)'입니다.

여기서 정말 많은 분들이 혼란을 겪습니다. "둘 중에 도대체 어떤 것을 복사해서 파이썬에 넣어야 하지?"라는 의문이 들기 때문입니다. 결론부터 말씀드리면, 파이썬으로 웹 통신 코드를 짤 때는 'Decoding(디코딩) 인증키'를 사용하는 것이 정신 건강에 훨씬 좋습니다.

그 이유를 이해하려면 웹 주소창의 원리를 조금 알아야 합니다. 우리가 사용하는 오픈 API 인증키 안에는 +, /, = 같은 특수문자가 자주 포함됩니다. 그런데 웹 브라우저나 서버는 주소창에 이런 특수문자가 그대로 들어오면 주소의 구분을 흐트러뜨리는 것으로 오해할 수 있습니다. 그래서 이러한 특수문자들을 %2B, %2F 같은 안전한 문자열로 변환하는 과정을 '인코딩'이라고 합니다.

  • Encoding 키: 이미 특수문자가 웹 전송용 문자열로 변환되어 있는 상태입니다.

  • Decoding 키: 변환되기 전 원래의 순수한 특수문자와 알파벳 상태입니다.

만약 이미 변환된 Encoding 키를 파이썬의 requests 라이브러리에 그대로 집어넣으면, requests 라이브러리는 성실하게도 그 키를 '한 번 더' 인코딩해 버립니다. 결국 서버가 받았을 때는 원래의 키와 완전히 다른 엉뚱한 값으로 변해버리기 때문에 "잘못된 인증키입니다"라는 에러 메시지만 마주하게 되는 것입니다.

인코딩 오류를 완벽하게 예방하는 파이썬 요청 팁

인증키 오류 없이 깔끔하게 데이터를 받아오기 위해 제가 실무에서 항상 사용하는 안전한 코드 작성 습관을 공유합니다.

첫 번째는 앞서 말씀드린 대로 마이페이지에서 '디코딩(Decoding)' 버전의 키를 복사해서 변수에 담는 것입니다. 그리고 두 번째가 핵심인데, 주소창 뒤에 텍스트를 강제로 더하지 말고 requests.get() 함수 내부의 params 인자를 활용하는 것입니다.

이 방식을 사용하면 파이썬이 데이터를 전송하기 직전에 딱 한 번만 올바른 형태로 알아서 인코딩을 처리해 주기 때문에 중복 인코딩으로 인한 오류가 원천적으로 차단됩니다.

Python
import requests

# [올바른 방법] 마이페이지에서 '디코딩(Decoding)' 키를 복사하여 붙여넣습니다.
# 만약 키 끝에 = 이나 + 가 있다면 정상적인 디코딩 키입니다.
MY_API_KEY = "공공데이터포털에서_복사한_디코딩_인증키"

# 호출할 API의 기본 주소 (뒤에 물음표나 변수를 붙이지 마세요)
endpoint_url = "http://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst"

# 서버에 전달할 세부 옵션들을 사전(Dictionary) 형태로 정갈하게 정리합니다.
api_parameters = {
    'serviceKey': MY_API_KEY,  # requests가 내부적으로 안전하게 인코딩을 수행합니다.
    'pageNo': '1',
    'numOfRows': '10',
    'dataType': 'JSON',
    'base_date': '20260709',
    'base_time': '0600',
    'nx': '55',
    'ny': '127'
}

# 데이터를 요청합니다.
response = requests.get(endpoint_url, params=api_parameters)

# 결과 출력
print(response.status_code)

인증키를 제대로 넣었는데도 에러가 난다면 마지막으로 한 가지만 더 체크해 보세요. 공공데이터포털은 시스템 안정을 위해 인증키 발급 후 실제 데이터 서버에 동기화되기까지 짧게는 1~2시간, 길게는 하루 정도의 시간이 걸립니다. 신청하자마자 코드를 돌렸을 때 에러가 난다면, 작성한 코드가 틀린 게 아니라 서버가 아직 내 키를 모르는 상태일 수 있으니 차 한 잔 마시며 조금 기다려 보시는 것을 추천합니다.

핵심 요약

  • 공공데이터포털 오픈 API를 사용할 때는 마이페이지의 개발계정에서 인증키를 확인해야 합니다.

  • 파이썬 requests 라이브러리를 사용해 호출할 때는 '디코딩(Decoding) 인증키'를 사용하는 것이 가장 안전합니다.

  • 변환된 인코딩 키를 사용하거나 주소창에 문자열로 직접 더하면 중복 인코딩이 발생하여 인증키 불일치 에러가 납니다.