본문으로 건너뛰기

공공데이터포털 AI 검색으로 API 찾고 첫 호출까지: 미세먼지 데이터로 따라 하는 5단계

· 약 8분
Datapopcorn CEO / AI automation educator
이 글과 연결된 글 보기
16편 · 42개 연결
100%
문자로 온 네이버페이 포인트 기프티콘, AI 브라우저 에이전트에게 등록시켜 봤습니다유료 문자 API 대신 내 안드로이드폰으로 무료 SMS 게이트웨이 만들기: Aside·무선 ADB·TextBee 실전 연동기API와 MCP 차이, 날씨 데이터 하나로 직접 확인하기: curl 한 줄에서 AI가 쓰는 도구까지 5단계Aside 커스텀 프로바이더 설정 가이드: 무료 스텔스 모델부터 Solar Pro 4까지 6단계로 연결하기ChatGPT 데스크톱 앱으로 실시간 통역하는 법Aside로 30분 안에 당근비즈니스에 내 물건 등록하기: 따라 하는 프롬프트와 화면 11장AI가 뽑은 "+124% 증가", 믿기 전에 확인할 7단계 — 데이터 분석 함정 체크리스트공공데이터포털 AI 검색으로 API 찾고 첫 호출까지: 미세먼지 데이터로 따라 하는 5단계데이터팝콘 AX 상담 페이지 오픈: 신청 방법부터 성공 온보딩 사례까지Jev, 누구에게 필요할까 — 댓글·카페 리뷰·채용공고·실종자 후보 220건으로 직접 돌려 봤습니다쇼핑몰 리뷰, 누가 답해야 할지 자동으로 나누기 — n8n에서 Jev 노드로 점수 매기고 분기하는 6단계공공데이터 API를 10분마다 구글시트에 쌓기 — 응급실 가용 병상 데이터로 배우는 수집 자동화공공데이터 수집에서 막히는 6가지와 해결법: 공공데이터포털·KOSIS·PDF 통계표 (Colab 노트북 포함)이번 주 팝콘 줍줍 — Gemini 4 Argon 정식 출시, 메타 뮤즈 원더, 애플 HomeView (10월 3주)이번 주 팝콘 줍줍 — 먼저 말 걸어주는 클로드, 구글 클라우드로 간 GPT와 클로드, 크래프톤 한국어 AI (10월 4주)API 비용 0원, 내 Mac에서 영상 자막(SRT) 만들기 — faster-whisper 6단계 가이드

드래그로 이동 · 휠/두 손가락으로 확대 · 방향키로 글 선택 · 0으로 맞춤. 실선: 본문 링크, 점선: 시리즈·주제의 대표 연결.

표시된 글 16편 목록
전체 글 연결 탐색

공공데이터포털(data.go.kr) 첫 화면의 AI 검색에 원하는 데이터를 문장으로 물어보고, 추천된 오픈API의 상세페이지에서 조건 네 가지를 확인한 뒤, 인증키로 첫 응답을 받아오는 데까지 5단계로 정리했습니다. 예시는 "서울 측정소별 미세먼지 실시간 값"이고, 이 글의 화면과 결과는 모두 2026년 10월 7일 오전에 직접 확인한 것입니다.

이 글은 이런 분께 필요합니다​

  • 공공데이터로 뭔가 만들어 보고 싶은데, 수만 개 데이터 중 무엇을 써야 할지부터 막히는 분
  • data.go.kr에서 키워드 검색을 해 봤다가 결과가 수백 건이라 포기한 분
  • 인증키를 받았는데 SERVICE_KEY_IS_NOT_REGISTERED_ERROR가 나와서 멈춘 분

준비물은 세 가지입니다.

  1. data.go.kr 회원 계정. AI 검색은 로그인 없이도 열리지만, 인증키는 로그인해야 받을 수 있습니다.
  2. Mac 터미널 또는 Windows PowerShell. Step 5에서 명령 한 줄을 붙여넣습니다.
  3. Python 3 (Step 5의 두 번째 방법용). 이 글은 Python 3.13에서 확인했습니다. 추가 설치하는 패키지는 없습니다.

Step 1. AI 검색에 일단 넓게 물어봅니다​

data.go.kr 첫 화면 가운데에 "공공데이터, AI로 검색하세요." 입력창이 있습니다. 여기에 평소 말투로 물어봅니다.

우리 동네 미세먼지 실시간으로 확인할 수 있는 데이터 있어?

검색하기를 누르면 AI검색 화면으로 넘어가고, 잠시 "답변 생성중"이 뜬 뒤 데이터 5개가 카드로 나옵니다. 카드마다 두 줄이 붙습니다.

  • (분석 정보): 그 데이터에 무엇이 들어 있고 어떤 형식(JSON·XML, CSV, XLSX)으로 받는지
  • (추천 이유): 왜 이 질문에 골랐는지

공공데이터포털 AI 검색에 "우리 동네 미세먼지 실시간으로 확인할 수 있는 데이터 있어?"를 넣은 결과. 왼쪽에 오픈API·파일데이터 카드 5개가 분석 정보와 추천 이유와 함께 나오고, 오른쪽에 정확도순 추천데이터 패널과 1~8 페이지 번호가 보인다

여기서 1순위를 바로 믿으면 안 됩니다. 이날 1순위는 "국립환경과학원 미세먼지(금속성분) 실시간 정보" 였습니다. 납·니켈 같은 중금속 성분 농도를 전국 11개 연구소에서 재는 데이터라, "우리 동네 미세먼지 수치"와는 거리가 있습니다. 2순위는 같은 측정 데이터의 영문 조회 서비스였고, 나머지 셋은 파일데이터였습니다.

오른쪽 추천데이터 패널에는 정확도순·최신순 정렬과 8페이지 분량의 목록이 따로 있습니다. 가운데 카드 5개가 전부가 아니라는 점만 기억해 두면 됩니다.

Step 2. 지역 단위·항목·형식을 넣어 다시 묻습니다​

넓게 물으면 넓게 답합니다. 같은 화면 아래 입력창에 질문을 구체적으로 바꿔서 다시 넣습니다. 이 네 가지를 문장에 넣으면 됩니다.

넣을 것이번 예시
지역 단위시도별
항목PM10, PM2.5
갱신 주기실시간 측정값
받는 형식오픈API (파일로 받고 싶으면 "파일데이터")
시도별 PM10, PM2.5 실시간 측정값을 조회하는 오픈API를 찾아주세요

이번에는 5개 모두 오픈API로 나왔고, 4번째에 "한국환경공단 에어코리아 대기오염정보" 가 보였습니다. 분석 정보에 "측정소별 실시간 측정정보, 통합대기환경지수, 대기질 예보·통보"와 "PM10·PM2.5 데이터도 포함"이라고 적혀 있어서, 원하던 데이터에 가장 가깝습니다.

구체적으로 다시 물은 결과. 기상청 황사관측(PM10), 에어코리아 측정소별 실시간 측정정보 영문, 에어코리아 대기오염통계 현황, 에어코리아 대기오염정보, 통합대기환경지수(CAI) 조회 서비스가 오픈API로 나온다

1순위로 나온 기상청 황사관측(PM10) 은 분석 정보에 "PM2.5 항목은 포함되지 않습니다"라고 직접 적혀 있습니다. 순위보다 분석 정보 문장을 읽고 고르는 게 이 화면을 쓰는 요령입니다.

AI가 쓴 설명이라 문장이 어색한 곳도 있습니다. 이날 결과에는 "프로그램matically 활용할 수 있다"처럼 영어가 섞인 문장도 있었습니다. 설명은 후보를 고르는 데까지만 쓰고, 실제 조건은 다음 단계의 상세페이지에서 확인합니다.

:::tip AI 검색 말고 다른 검색도 있습니다 상단 공공데이터 → 데이터 목록에는 키워드 검색과 하이브리드 검색 탭이 있습니다. 키워드 검색에 미세먼지를 넣으면 2026년 10월 7일 기준 925건(파일데이터 551, 오픈 API 102, 표준데이터셋 2, 연계데이터 246)이 나옵니다. 하이브리드 검색은 문장을 넣으면 관련도가 높은 데이터 목록을 바로 보여 줍니다. 목록을 직접 훑고 싶을 때는 이쪽이 빠릅니다. :::

Step 3. 상세페이지에서 네 가지를 확인합니다​

카드 제목을 누르면 데이터 상세페이지가 열립니다. 이번 데이터의 주소는 data.go.kr/data/15073861/openapi.do입니다.

맨 위의 Quick AI Summary 상자는 이 데이터를 어디에 쓸 수 있는지와 실제 활용 사례를 요약해 줍니다. 처음 보는 데이터라면 여기부터 읽으면 감이 옵니다.

한국환경공단_에어코리아_대기오염정보 상세페이지 상단. Quick AI Summary 상자에 대기오염 정보 제공 서비스, 실시간 측정소 정보 활용, 예보 및 통합대기환경지수 활용, 실제 활용 사례가 정리돼 있고 아래에 관심목록에 추가와 활용신청 버튼이 있다

그다음 아래로 내려가며 네 가지를 확인합니다. 이 데이터의 실제 값을 함께 적었습니다.

확인할 것어디에 있나이 데이터의 값왜 보나
심의유형이용 조건 및 라이선스 정보개발단계 자동승인 / 운영단계 심의승인자동승인이면 신청 즉시 키를 쓸 수 있습니다
신청 가능 트래픽같은 곳개발계정 500하루에 부를 수 있는 횟수입니다. 10분마다 부르면 하루 144번이라 충분합니다
이용허락범위같은 곳공공저작물 제3유형 (출처표시, 변경금지)서비스에 쓸 때 출처를 밝혀야 합니다
상세기능활용 정보 → 상세기능5개 (아래)내가 원하는 조회가 실제로 있는지 봅니다

이 데이터의 상세기능 5개는 대기질 예보통보 조회, 초미세먼지 주간예보 조회, 측정소별 실시간 측정정보 조회, 통합대기환경지수 나쁨 이상 측정소 목록조회, 시도별 실시간 측정정보 조회입니다. 이 글에서는 마지막 것을 씁니다.

Step 4. 활용신청하고 일반 인증키를 복사합니다​

  1. 상세페이지의 활용신청 버튼을 누르고 활용 목적을 적어 신청합니다. 이 데이터는 개발단계 자동승인이라 따로 기다리지 않습니다.
  2. 오른쪽 위 마이페이지 → 데이터 활용으로 들어가면 활용신청 현황 목록이 나옵니다.
  3. 데이터명 칸에 에어코리아를 넣고 검색한 뒤, [승인] 한국환경공단_에어코리아_대기오염정보를 누릅니다.
  4. 일반 인증키 칸의 값을 통째로 복사해 비밀번호 관리자에 저장합니다. 중간에 % 기호가 섞인 긴 문자열입니다.

이 글을 쓴 계정은 같은 데이터를 2026년 4월에 이미 신청·승인받은 상태였습니다. 그래서 신청 양식은 이번에 다시 제출하지 않았고, 2~4번 화면과 인증키 동작만 2026년 10월 7일에 확인했습니다.

:::caution 인증키는 공개하지 않습니다 인증키는 비밀번호와 같습니다. 블로그, 깃허브, 캡처 화면에 그대로 올리지 말고, 아래처럼 환경변수로 넣어 씁니다. :::

Step 5. 터미널에서 첫 응답을 받아 봅니다​

먼저 터미널에서 인증키를 환경변수에 넣습니다. 따옴표 안에 복사한 일반 인증키를 그대로 붙여넣습니다.

export DATA_GO_KR_KEY='여기에_일반_인증키_붙여넣기'

방법 1. curl 한 줄로 확인하기​

curl -s "https://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty?serviceKey=$DATA_GO_KR_KEY&returnType=json&numOfRows=3&pageNo=1&sidoName=%EC%84%9C%EC%9A%B8&ver=1.0"

sidoName=%EC%84%9C%EC%9A%B8은 서울을 주소에 넣을 수 있게 바꾼 글자입니다. 성공하면 이렇게 시작하는 JSON이 돌아옵니다(2026년 10월 7일 실제 응답 일부).

{"response":{"body":{"totalCount":40,"items":[{"stationName":"중구","dataTime":"2026-10-07 09:00","pm10Value":"25","pm25Value":"13", ...

totalCount는 서울 측정소 수(이날 40곳)이고, pm10Value와 pm25Value가 미세먼지·초미세먼지 농도(㎍/㎥)입니다.

방법 2. 파이썬으로 표처럼 보기​

JSON이 길어서 읽기 어렵다면, 아래 블록을 터미널에 통째로 붙여넣어 air_now.py 파일을 만듭니다. 파이썬 기본 기능만 써서 따로 설치할 것이 없습니다.

cat > air_now.py <<'EOF'
import json, os, sys, urllib.parse, urllib.request

# 포털 마이페이지의 '일반 인증키'를 그대로 붙여넣습니다(% 기호가 섞인 값).
KEY = os.environ["DATA_GO_KR_KEY"]
SIDO = sys.argv[1] if len(sys.argv) > 1 else "서울"

params = urllib.parse.urlencode({
"returnType": "json", "numOfRows": 100, "pageNo": 1,
"sidoName": SIDO, "ver": "1.0",
})
url = ("https://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty"
f"?serviceKey={KEY}&{params}") # 키는 이미 인코딩돼 있으니 다시 인코딩하지 않습니다

with urllib.request.urlopen(url, timeout=20) as res:
data = json.load(res)

items = data["response"]["body"]["items"]
print(f"{SIDO} 측정소 {len(items)}곳, 기준 {items[0]['dataTime']}")
for it in items[:10]:
print(f"{it['stationName']:<8} PM10 {it['pm10Value']:>4} PM2.5 {it['pm25Value']:>4}")
EOF
python3 air_now.py 서울

2026년 10월 7일 오전에 실행한 실제 출력입니다.

서울 측정소 40곳, 기준 2026-10-07 09:00
중구 PM10 25 PM2.5 13
한강대로 PM10 29 PM2.5 14
종로구 PM10 - PM2.5 -
청계천로 PM10 31 PM2.5 12
종로 PM10 27 PM2.5 9
용산구 PM10 42 PM2.5 21
광진구 PM10 27 PM2.5 8
성동구 PM10 30 PM2.5 8
강변북로 PM10 33 PM2.5 15
중랑구 PM10 22 PM2.5 8

python3 air_now.py 부산처럼 시도 이름만 바꾸면 다른 지역도 나옵니다. 부산도 같은 방법으로 응답을 확인했습니다.

오류가 나면 여기부터 확인하세요​

이런 결과가 나오면원인해결
SERVICE_KEY_IS_NOT_REGISTERED_ERROR / 등록되지 않은 서비스키이미 %로 인코딩된 일반 인증키를 한 번 더 인코딩했음. curl --data-urlencode처럼 값을 자동으로 인코딩하는 방식에 키를 넣으면 이렇게 됩니다키는 이 글처럼 주소 문자열에 그대로 붙입니다. 꼭 인코딩 기능을 써야 한다면 키를 먼저 디코딩(urllib.parse.unquote)해서 넣습니다. 이 글에서 두 경우를 모두 직접 확인했습니다
값이 -로 나옴 (예: 종로구)그 측정소가 그 시각에 값을 보내지 못함. 같은 응답에 coFlag: "통신장애"처럼 사유가 붙기도 합니다오류가 아닙니다. 집계할 때 -는 빼고 계산합니다
TimeoutError: The read operation timed out일시적인 응답 지연. 이 글을 쓰는 중에도 한 번 났고, 다시 실행하자 정상 응답했습니다잠시 뒤 다시 실행합니다. 자동화할 때는 재시도를 넣습니다
KeyError: 'DATA_GO_KR_KEY'새 터미널 창을 열어 환경변수가 사라짐Step 5 첫 줄의 export를 다시 실행합니다
AI 검색 1순위가 원하는 데이터가 아님질문이 넓음Step 2의 네 가지(지역 단위·항목·갱신 주기·형식)를 넣어 다시 묻고, 순위보다 분석 정보 문장을 읽고 고릅니다

정리​

넓게 묻기 → 지역 단위·항목·주기·형식을 넣어 다시 묻기 → 상세페이지에서 승인·트래픽·라이선스·상세기능 확인 → 일반 인증키 복사 → 키를 그대로 붙여 첫 호출, 이 다섯 단계면 처음 보는 공공데이터도 첫 응답까지 갈 수 있습니다. AI 검색은 후보를 줄여 주는 데까지 쓰고, 최종 선택은 상세페이지의 조건과 실제 응답으로 확인하세요.

이렇게 받은 값을 10분마다 구글시트에 쌓는 방법은 공공데이터 API를 10분마다 구글시트에 쌓기에 정리해 두었습니다.