어제 오늘 내일

[Python 실전] 17. "크롤링보다 100배 쉽고 정확하다!" 공공데이터 API 연동과 JSON 다루기 본문

IT/Python

[Python 실전] 17. "크롤링보다 100배 쉽고 정확하다!" 공공데이터 API 연동과 JSON 다루기

hi.anna 2026. 4. 14. 08:53

 

크롤링이 남의 집 담벼락을 몰래 훔쳐보는 것이라면, API는 정문으로 당당하게 들어가서 "여기 날씨 정보 1인분 포장해 주세요!"라고 주문하는 것과 같습니다.

합법적이고, 데이터가 아주 깔끔하게 정리되어 오기 때문에 실무에서는 무조건 크롤링보다 API를 우선적으로 사용합니다. 오늘은 별도의 회원가입이나 인증키 없이 무료로 사용할 수 있는 날씨 API를 통해 그 원리를 파헤쳐 보겠습니다.


1. API란 무엇인가요? (식당 점원 비유)

API를 가장 쉽게 이해하는 방법은 식당의 '점원(웨이터)'으로 생각하는 것입니다.

  1. 손님 (파이썬 코드): 메뉴판을 보고 "서울 날씨 주세요!"라고 주문(요청, Request)합니다.
  2. 점원 (API): 손님의 주문을 주방에 전달하고, 완성된 요리를 가져다줍니다.
  3. 주방 (서버/데이터베이스): 실제 날씨 데이터를 가지고 요리하는 곳입니다.

우리는 주방장이 요리를 어떻게 하는지(서버가 어떻게 동작하는지) 알 필요가 없습니다. 그저 점원(API)이 알아들을 수 있는 규칙(메뉴판)에 맞춰서 파이썬 코드로 주문만 하면 됩니다.


2. JSON: 전 세계 컴퓨터들의 공용어

웹 크롤링을 할 때는 지저분한 HTML 태그들(<div class="...">) 사이에서 텍스트를 발라내야 했습니다. 하지만 API는 컴퓨터가 읽기 가장 편한 형태인 JSON(JavaScript Object Notation)이라는 형식으로 요리를 내어줍니다.

JSON의 가장 큰 특징은 우리가 배운 파이썬의 '딕셔너리(Dictionary)'와 99.9% 똑같이 생겼다는 것입니다. 중괄호 {} 안에 Key: Value 쌍으로 이루어져 있어서, 데이터를 꺼내 쓰기가 예술적으로 편합니다.


3. 실전! 무료 날씨 API로 서울 기온 가져오기

인증키 발급 없이 바로 사용할 수 있는 유명한 무료 날씨 API인 Open-Meteo를 사용해 보겠습니다.
우리의 목표는 현재 서울의 온도를 파이썬으로 가져오는 것입니다.

📌 예제 코드: API 요청하고 JSON 데이터 받아오기

지난 시간에 크롤링할 때 썼던 requests 패키지를 그대로 사용합니다!

import requests

# 1. API 메뉴판에 맞게 요청 주소(URL) 만들기
# 서울의 위도(latitude=37.56)와 경도(longitude=126.97)를 입력하고, 현재 날씨(current_weather=true)를 요청합니다.
api_url = "https://api.open-meteo.com/v1/forecast?latitude=37.56&longitude=126.97&current_weather=true"

# 2. requests 패키지로 API 점원에게 주문서 넣기 (GET 방식)
response = requests.get(api_url)

# 3. 응답 확인하기 (200이면 성공)
if response.status_code == 200:
    # 4. 받아온 데이터를 파이썬 딕셔너리로 완벽하게 변환하기! (이게 핵심입니다)
    weather_data = response.json()

    # 데이터가 어떻게 생겼는지 한번 볼까요?
    print("▼ API가 보내준 원본 JSON 데이터 ▼")
    print(weather_data)
else:
    print("API 요청에 실패했습니다.")

실행 결과 (원본 JSON):

▼ API가 보내준 원본 JSON 데이터 ▼
{'latitude': 37.56, 'longitude': 126.97, 'generationtime_ms': 0.123, 'utc_offset_seconds': 0, 'timezone': 'GMT', 'timezone_abbreviation': 'GMT', 'elevation': 38.0, 'current_weather': {'temperature': 15.2, 'windspeed': 5.4, 'winddirection': 210.0, 'weathercode': 1, 'is_day': 1, 'time': '2026-02-24T14:00'}}

보기엔 복잡해 보이지만, 자세히 보면 중괄호 {}와 쉼표 ,로 이루어진 전형적인 파이썬 딕셔너리입니다!


4. 딕셔너리에서 원하는 데이터만 쏙쏙 뽑아내기

이제 저 복잡한 딕셔너리에서 우리가 진짜 원하는 '온도(temperature)' 값만 꺼내보겠습니다.
이전에 딕셔너리 단원에서 배운 변수["Key이름"] 문법을 그대로 쓰면 됩니다.

📌 예제 코드: 중첩 딕셔너리 데이터 추출하기

# (위 코드에 이어서 작성합니다)

# 1. 전체 데이터에서 'current_weather'라는 Key의 데이터를 꺼냅니다.
# 꺼내고 나면 그 안에도 또 딕셔너리가 들어있습니다! (중첩 딕셔너리)
current = weather_data["current_weather"]

# 2. 꺼낸 데이터 안에서 다시 'temperature'라는 Key의 데이터를 꺼냅니다.
temperature = current["temperature"]

# 3. 시간 정보도 꺼내볼까요?
time = current["time"]

print("\n▼ 깔끔하게 추출한 데이터 ▼")
print(f"기준 시간: {time}")
print(f"현재 서울 기온: {temperature}도")

실행 결과:

▼ 깔끔하게 추출한 데이터 ▼
기준 시간: 2026-02-24T14:00
현재 서울 기온: 15.2도

💡 한 줄로 줄여서 쓰기:
딕셔너리 안의 딕셔너리를 접근할 때는 대괄호를 연달아 붙여서 weather_data["current_weather"]["temperature"] 처럼 한 번에 접근할 수도 있습니다. 아주 파이썬다운 깔끔한 문법이죠!


5. 이제 무엇을 할 수 있을까요?

이 원리 하나만 깨우치면, 파이썬으로 할 수 있는 일은 무궁무진해집니다.

  1. 공공데이터포털(data.go.kr): 미세먼지 수치, 아파트 실거래가, 전국 약국 위치 정보 등을 API로 받아와서 엑셀로 자동 정리할 수 있습니다.
  2. 카카오톡/텔레그램 API: 오늘 추출한 이 날씨 데이터를 매일 아침 7시마다 내 카카오톡 메시지로 쏴주는 나만의 비서를 만들 수 있습니다.
  3. 금융/주식 API: 비트코인 시세나 주식 가격을 1초마다 API로 받아와서, 특정 가격이 되면 자동으로 문자를 보내게 할 수도 있죠.

🎓 대단원의 막을 내리며 (시리즈 총정리)

여러분, 정말 고생 많으셨습니다! 첫 번째 포스팅에서 파이썬을 설치하던 것이 엊그제 같은데, 어느덧 데이터를 수집하고 엑셀을 다루며 API까지 호출하는 수준에 도달하셨습니다.

우리가 함께 걸어온 길을 돌아볼까요?

  • Phase 1~3: 변수, 리스트, 딕셔너리, if문, for문 등 파이썬의 기본 근육을 키웠습니다.
  • Phase 4~5: 함수, 모듈(import), 파일 다루기, 예외 처리 등 남의 코드를 읽고 내 컴퓨터를 다루는 실전 뼈대를 세웠습니다.
  • Phase 6: 크롤링, openpyxl(엑셀), API 연동을 통해 여러분의 업무 시간을 획기적으로 줄여줄 무기를 장착했습니다.

프로그래밍은 암기가 아닙니다. 문법을 완벽히 외울 필요는 전혀 없습니다. "아, 리스트 안에 딕셔너리가 있었지!", "반복문으로 엑셀 한 줄씩 넣으면 되겠네!"라는 아이디어와 흐름만 떠올릴 수 있다면, 구체적인 코드는 검색과 AI의 도움을 받아 얼마든지 짜맞출 수 있습니다.

이제 배운 것들을 활용해 여러분의 일상과 업무에서 작고 귀찮은 일들을 하나씩 자동화해 보세요. 직접 코드를 짜서 돌아갈 때의 그 짜릿함이 여러분을 더 멋진 개발의 세계로 이끌어 줄 것입니다.

정말 수고하셨습니다! 🐍🎉

반응형
Comments