기상청 동네예보 API를 파이썬으로 활용하는 방법을 찾고 있나요? 파이썬의 requests 라이브러리를 이용하면 몇 줄의 코드만으로 기상청 날씨 데이터를 가져올 수 있어요. 날씨 앱, 데이터 분석, 자동화 스크립트 등 다양한 프로젝트에 활용할 수 있어서 파이썬 개발자들에게 특히 유용해요.
이 글에서는 기상청 동네예보 API를 파이썬으로 호출하고, 응답 데이터를 파싱해서 원하는 형태로 가공하는 전 과정을 단계별 실습 코드와 함께 설명해드릴게요. 공공데이터포털에서 API 키를 발급받은 분이라면 바로 실습해볼 수 있어요.
개발 환경 준비
이 부분은 매우 중요한 영역이에요. 실제 상황에서 이를 제대로 이해하고 적용하는 것이 성공의 핵심이라고 할 수 있어요.
필요한 라이브러리 설치
기상청 동네예보 API를 파이썬으로 사용하기 위해 필요한 라이브러리는 많지 않아요. 기본적으로 HTTP 요청을 보내는 requests 라이브러리와 JSON 데이터를 처리하는 json 모듈이면 충분해요. json은 파이썬 표준 라이브러리라 별도 설치가 필요없고, requests만 pip으로 설치하면 돼요.
데이터를 표 형태로 처리하거나 시각화하려면 pandas와 matplotlib도 함께 설치하면 좋아요. 환경 변수로 API 키를 관리하려면 python-dotenv도 유용해요. 가상 환경(venv 또는 conda)을 만들어서 프로젝트별 라이브러리를 격리해서 관리하는 것을 추천해요.
API 키 설정과 관리
공공데이터포털에서 발급받은 서비스 키(API Key)는 코드에 직접 하드코딩하기보다 환경 변수나 설정 파일로 관리하는 게 좋아요. .env 파일에 키를 저장하고 python-dotenv로 불러오는 방식이 보안과 관리 측면에서 권장돼요. 특히 GitHub 등 공개 저장소에 코드를 올릴 때 API 키가 노출되지 않도록 .gitignore에 .env 파일을 추가해야 해요.
- pip install requests python-dotenv (기본 필수 패키지)
- pip install pandas matplotlib (데이터 처리·시각화 선택)
- .env 파일에 API_KEY=발급받은키 형식으로 저장
- .gitignore에 .env 추가 필수
기본 API 호출 구현
이 부분은 매우 중요한 영역이에요. 실제 상황에서 이를 제대로 이해하고 적용하는 것이 성공의 핵심이라고 할 수 있어요.
단기예보 조회 기본 코드
기상청 단기예보 API의 기본 호출 구조를 파이썬 코드로 구현해볼게요. 엔드포인트 URL에 필요한 파라미터를 딕셔너리로 구성한 후 requests.get()으로 요청을 보내요. 응답은 JSON 형식으로 받아서 파싱해요.
base_date는 오늘 날짜를 datetime 모듈로 동적으로 가져와서 YYYYMMDD 형식으로 변환하고, base_time은 현재 시각에 따라 적절한 발표 시각을 선택하는 로직을 추가하면 자동화에 활용할 수 있어요. 파라미터 딕셔너리를 구성할 때 ServiceKey는 URL 인코딩된 형태로 입력해야 제대로 동작해요.
파라미터 딕셔너리 구성 방법
- ServiceKey: 발급받은 서비스 키 (URL 인코딩 상태)
- pageNo: 페이지 번호 (보통 1)
- numOfRows: 한 번에 받을 데이터 수 (700~1000 권장)
- dataType: 응답 형식 (“JSON” 또는 “XML”)
- base_date: 발표 날짜 (YYYYMMDD 형식)
- base_time: 발표 시각 (0200/0500/0800/…/2300 중 택일)
- nx: 격자 X 좌표 (정수)
- ny: 격자 Y 좌표 (정수)
응답 데이터 파싱과 가공
이 부분은 매우 중요한 영역이에요. 실제 상황에서 이를 제대로 이해하고 적용하는 것이 성공의 핵심이라고 할 수 있어요.
JSON 응답 구조 파싱
API 응답을 받은 후에는 JSON 데이터에서 필요한 정보를 추출하는 과정이 필요해요. response.json()으로 JSON을 파이썬 딕셔너리로 변환한 뒤, response[‘response’][‘body’][‘items’][‘item’] 경로로 실제 예보 데이터 리스트에 접근해요. 각 item은 fcstDate, fcstTime, category, fcstValue 필드를 가지고 있어요.
카테고리별로 데이터를 분류하려면 item 리스트를 순회하면서 category 값에 따라 딕셔너리에 저장하는 방식이 일반적이에요. 예를 들어 category가 “TMP”인 항목들을 별도로 모아서 시간대별 기온 데이터를 만들 수 있어요. pandas DataFrame으로 변환하면 이런 작업이 훨씬 편리해요.
날씨 데이터 처리 패턴
- item 리스트를 pandas DataFrame으로 변환
- category 컬럼으로 pivot하여 기온·강수량·습도 컬럼 생성
- fcstDate + fcstTime을 합쳐 datetime 인덱스 생성
- PTY 값으로 강수 유무 필터링
- SKY 값(1/3/4)을 맑음/구름많음/흐림 문자열로 변환
격자 좌표 변환 파이썬 구현
이 부분은 매우 중요한 영역이에요. 실제 상황에서 이를 제대로 이해하고 적용하는 것이 성공의 핵심이라고 할 수 있어요.
위경도 → 격자 좌표 변환 함수
파이썬으로 위도·경도를 기상청 격자 좌표(X, Y)로 변환하는 함수를 구현할 수 있어요. 기상청 기술 문서에 수록된 Lambert Conformal Conic 변환 공식을 파이썬 math 모듈로 구현하는 방식이에요. 이 함수에 위도(lat)와 경도(lon)를 입력하면 격자 X, Y 좌표를 반환해줘요.
변환 함수 구현이 복잡하다면 GitHub에 공개된 파이썬 라이브러리를 활용하는 방법도 있어요. “kma coordinate converter” 또는 “기상청 격자 변환 python”으로 검색하면 이미 구현된 변환 코드를 찾을 수 있어요. 직접 구현할 경우 기상청 PDF 기술 문서의 변환 공식과 상수값을 정확히 따라야 해요.
주요 지역 격자 좌표 딕셔너리
자주 사용하는 지역의 격자 좌표를 딕셔너리로 미리 정의해두면 편리해요. 기상청 기술 문서에 행정구역별 대표 격자 좌표가 수록되어 있으니 필요한 지역을 추출해서 코드에 포함시키면 돼요.
- 서울 중구: (nx=60, ny=127)
- 서울 강남구: (nx=61, ny=125)
- 부산 해운대: (nx=99, ny=75)
- 인천 남동구: (nx=55, ny=124)
- 대구 중구: (nx=89, ny=90)
- 광주 북구: (nx=58, ny=74)
- 대전 유성구: (nx=67, ny=100)
- 제주 제주시: (nx=52, ny=38)
실용적인 날씨 조회 클래스 구현
이 부분은 매우 중요한 영역이에요. 실제 상황에서 이를 제대로 이해하고 적용하는 것이 성공의 핵심이라고 할 수 있어요.
재사용 가능한 WeatherAPI 클래스 설계
단순한 함수 호출보다 클래스로 구현하면 코드 재사용성이 높아지고 관리가 편해요. WeatherAPI 클래스에 API 키와 기본 설정을 초기화하고, get_current_weather(), get_forecast(), get_hourly_forecast() 등의 메서드를 구현하면 여러 곳에서 깔끔하게 활용할 수 있어요.
클래스 설계 시 API 호출 횟수를 최소화하는 캐싱 기능을 추가하면 좋아요. 같은 지역·시각의 데이터를 짧은 시간 내에 여러 번 요청할 경우, 이전에 받아온 데이터를 캐시에서 반환하는 방식으로 API 호출 한도를 절약할 수 있어요. functools.lru_cache나 자체 딕셔너리 캐시를 활용하면 돼요.
오류 처리와 재시도 로직
안정적인 API 호출을 위해서는 오류 처리와 재시도 로직이 필수예요. 네트워크 오류, API 서버 오류, 데이터 없음 오류 등 다양한 상황에 대응하는 try-except 블록과 재시도 로직을 구현해야 해요.
- requests.exceptions.RequestException으로 네트워크 오류 처리
- 응답 코드 확인 후 NODATA_ERROR 시 base_time 자동 조정
- 최대 3회 재시도 후 실패 시 로그 기록 및 기본값 반환
- rate_limit 오류(일일 한도 초과) 시 적절한 대기 후 재시도
날씨 데이터 활용 예시
이 부분은 매우 중요한 영역이에요. 실제 상황에서 이를 제대로 이해하고 적용하는 것이 성공의 핵심이라고 할 수 있어요.
일기예보 알림 봇 만들기
기상청 동네예보 API + 파이썬을 조합하면 간단한 날씨 알림 봇을 만들 수 있어요. 매일 아침 특정 시각에 그날의 날씨를 텔레그램, 카카오톡, 슬랙 등으로 전송하는 봇이에요. schedule 라이브러리로 정기 실행 일정을 설정하고, requests로 기상청 API를 호출해 날씨 데이터를 가져온 다음, 메시지를 포맷팅해서 원하는 채널로 전송하면 돼요.
날씨 데이터를 파일이나 데이터베이스에 저장해서 날씨 이력을 관리하는 시스템으로 발전시킬 수도 있어요. matplotlib이나 plotly로 날씨 데이터를 시각화해서 웹 대시보드를 만드는 것도 인기 있는 프로젝트예요.
농업·야외 활동 특화 날씨 분석
기온, 강수량, 풍속 데이터를 조합해서 특정 활동에 적합한 날씨인지 판단하는 로직을 만들 수 있어요. 예를 들어 등산 적합 여부, 농작물 물주기 필요성, 야외 촬영 최적 시간대 등을 자동으로 판단하는 스크립트예요. pandas로 데이터를 처리하고 조건 기반 로직을 추가하면 실용적인 날씨 분석 도구를 만들 수 있어요.
마무리
이 부분은 매우 중요한 영역이에요. 실제 상황에서 이를 제대로 이해하고 적용하는 것이 성공의 핵심이라고 할 수 있어요.
기상청 동네예보 API를 파이썬으로 활용하면 정확하고 신뢰할 수 있는 한국 날씨 데이터를 다양한 프로젝트에 활용할 수 있어요. 처음에는 간단한 API 호출부터 시작해서, 점차 격자 좌표 변환, 데이터 파싱, 오류 처리, 캐싱 등 더 견고한 구현으로 발전시켜나가는 것을 추천해요.
파이썬의 강력한 데이터 처리 라이브러리(pandas, numpy)와 시각화 도구(matplotlib, plotly)를 함께 활용하면 기상청 API로 얻은 날씨 데이터를 더욱 풍부하게 분석하고 표현할 수 있어요. 창의적인 날씨 서비스 개발에 도전해보세요!