Python #01 · 외부 API 호출
Python으로 날씨 정보 가져오기
requests + wttr.in API
왜 날씨 API로 시작했나
Java로 3년 정도 백엔드 개발을 해왔는데 Python은 처음이다. 문법책을 읽는 것보다 실제로 돌아가는 걸 만들면서 익히는 게 맞는 것 같아서 외부 API 호출을 첫 주제로 잡았다.
Java에서는 RestTemplate이나 HttpURLConnection으로 했던 걸, Python에서는 requests 라이브러리 하나로 얼마나 간단하게 할 수 있는지 궁금했다.
동작 흐름
⌨️도시명 입력Incheon...
→
🐍Python 코드requests.get()
→
🌐wttr.in APIJSON 응답
→
📊결과 출력기온·습도·바람
wttr.in은 API 키 없이 무료로 쓸 수 있는 날씨 서비스다. ?format=j1 파라미터로 JSON 형태로 받을 수 있다.
라이브러리 설치
Python 외부 패키지는 pip으로 설치한다. Java의 Maven/Gradle과 같은 역할이다.
pip install requests
전체 코드
import requests
from datetime import datetime
def get_weather(city: str) -> dict:
"""wttr.in API로 날씨 정보를 가져옵니다. API 키 불필요."""
url = f"https://wttr.in/{city}?format=j1&lang=ko"
response = requests.get(url, timeout=10)
response.raise_for_status()
data = response.json()
current = data["current_condition"][0]
area = data["nearest_area"][0]
return {
"city" : area["areaName"][0]["value"],
"country" : area["country"][0]["value"],
"temp_c" : int(current["temp_C"]),
"feels_like": int(current["FeelsLikeC"]),
"humidity" : int(current["humidity"]),
"desc" : current["lang_ko"][0]["value"],
"wind_kmph" : int(current["windspeedKmph"]),
"updated_at": datetime.now().strftime("%Y-%m-%d %H:%M"),
}
def get_emoji(desc: str) -> str:
if any(k in desc for k in ["맑", "화창"]): return "☀️"
if any(k in desc for k in ["구름", "흐림"]): return "☁️"
if any(k in desc for k in ["비", "소나기"]): return "🌧️"
if "눈" in desc: return "❄️"
return "🌤️"
if __name__ == "__main__":
city = input("도시명 입력 (영어): ")
w = get_weather(city)
emoji = get_emoji(w["desc"])
print(f"\n{emoji} {w['city']}, {w['country']}")
print(f" 기온 : {w['temp_c']}°C (체감 {w['feels_like']}°C)")
print(f" 날씨 : {w['desc']}")
print(f" 습도 : {w['humidity']}%")
print(f" 바람 : {w['wind_kmph']} km/h")
실행 결과
☁️ Incheon, South Korea 기온 : 8°C (체감 5°C) 날씨 : 흐림 습도 : 72% 바람 : 18 km/h 🌤️ Seoul, South Korea 기온 : 9°C (체감 6°C) 날씨 : 구름 조금 습도 : 65% 바람 : 14 km/h ☀️ Busan, South Korea 기온 : 12°C (체감 10°C) 날씨 : 맑음 습도 : 58% 바람 : 10 km/h
📍 Incheon · KR
☁️
8°C
흐림 · 체감 5°C
💧 습도72%
💨 바람18 km/h
☀️ UV1
📍 Seoul · KR
🌤️
9°C
구름 조금 · 체감 6°C
💧 습도65%
💨 바람14 km/h
☀️ UV2
📍 Busan · KR
☀️
12°C
맑음 · 체감 10°C
💧 습도58%
💨 바람10 km/h
☀️ UV3
Java 개발자 입장에서 느낀 것
// Java (Spring) — RestTemplate
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response =
restTemplate.getForEntity("https://wttr.in/Seoul?format=j1", String.class);
# Python — requests (이게 전부)
response = requests.get("https://wttr.in/Seoul?format=j1")
data = response.json() # JSON 파싱도 한 줄
Java에서 HTTP 요청 하나 날리려면 의존성 추가, 빈 등록, 예외처리까지 꽤 많은 준비가 필요한데 Python은 두 줄이면 끝이다. .json() 한 줄로 파싱까지 된다는 게 처음엔 좀 허무할 정도였다.
이번에 익힌 것들
requests.get(url)으로 외부 API 호출하는 방법response.json()으로 JSON 파싱 — Java의 ObjectMapper 없이- 딕셔너리(
dict) 접근 — Java HashMap과 비슷하지만 더 간결 - f-string 포맷팅 — Java의
String.format()보다 직관적 - 함수 타입 힌트
def fn(arg: str) -> dict raise_for_status()로 HTTP 오류를 한 줄에 처리하는 패턴
다음에 만들 것
'Python' 카테고리의 다른 글
| React + FastAPI로 웹 게임 만들기 #4 - Render + Vercel 배포 (0) | 2026.04.24 |
|---|---|
| React + FastAPI로 웹 게임 만들기 #3 - 완성 (0) | 2026.04.23 |
| React + Python FastAPI로웹 게임 만들기 #2 (0) | 2026.04.23 |
| React + Python FastAPI로웹 게임 만들기 #1 (1) | 2026.04.22 |
| 🌤️날씨 데이터(2) - 저장하고API 서버까지 만들기 (0) | 2026.03.25 |