날씨 앱이 우리 동네 날씨를 제대로 못 보여줘서: HereWeather를 만든 이유
아침에 날씨 앱을 확인하고 우산 없이 나갔다가, 동네 골목을 벗어나기도 전에 빗방울을 맞은 적이 있습니다. 앱에는 분명 "흐림" 정도로 나와 있었는데, 다시 확인해 보니 제가 보고 있던 건 제가 사는 동네가 아니라 광역시·도나 구 단위의 넓은 지역 날씨였습니다. 그날 이후로 "지금 내가 서 있는 위치의 동네예보"를 별도 검색 없이 즉시 보고 싶다는 생각을 하게 되었습니다.
이 글은 그 문제의식에서 출발해 HereWeather(여기날씨)를 설계하고 운영하게 된 과정에 대한 기록입니다. 현재 제가 운영하는 여섯 개 웹 서비스 가운데 가장 많은 분들이 매일 방문해 주시는 서비스이기도 합니다.
우리 동네 날씨는 왜 다르게 느껴질까
날씨는 같은 시·군·구 안에서도 지형에 따라 꽤 다르게 나타납니다. 강변인지 고지대인지, 빌딩 숲 사이인지에 따라 풍속과 강수 시점이 달라지고 체감 온도도 크게 벌어집니다. 기상청 단기예보는 한반도 전역을 5km × 5km 격자(Grid)로 나누어 각 칸마다 세분화된 예보를 발표하는데, 제가 원한 건 복잡한 지역 설정 없이 지금 내 GPS 좌표가 속한 격자 칸의 예보를 곧바로 여는 것이었습니다.
특히 바쁜 출근 시간에는 동네 이름을 일일이 검색하거나 즐겨찾기 지역을 전환하는 과정 자체가 번거로웠습니다. 기온 숫자만 보고 얇게 입었다가 강한 바람 때문에 고생하거나, 높은 습도 때문에 불쾌지수가 치솟았던 날들을 겪으면서 "기온 숫자 하나가 아니라 체감 온도, 시간대별 강수 확률, 미세먼지를 한 화면에서 5초 안에 판단할 수 있는 대시보드"가 필요하다고 느꼈습니다.
기존 날씨 서비스를 쓰며 아쉬웠던 점
시중에는 훌륭한 날씨 앱이 많지만, 매일 아침 빠르게 외출 준비를 할 때는 몇 가지 불편이 있었습니다.
- 지역 전환의 번거로움: 이동할 때마다 현재 위치를 다시 갱신하거나 저장된 지역 목록을 바꿔야 하는 경우가 많았습니다.
- 과도한 광고와 스크롤 깊이: 전면 광고와 뉴스 피드 사이에서 정작 필요한 시간별 강수 확률과 체감 온도, 미세먼지 수치를 찾으려면 한참 스크롤을 내려야 했습니다.
- 흩어져 있는 대기질·일출몰 정보: 기상청 날씨와 에어코리아 미세먼지, 일출·일몰 시각이 별도 탭이나 다른 메뉴로 분리되어 있어 한눈에 비교하기 어려웠습니다.
그래서 "접속하자마자 내 위치의 동네 이름과 외출 판단 핵심 지표를 한 화면 카드로 보여주는 웹앱"을 목표로 잡았습니다.
그래서 만든 HereWeather
HereWeather는 브라우저에서 위치 권한을 허용하면 HTML5 Geolocation API로 현재 위·경도를 가져온 뒤, 이를 기상청 단기예보 격자 좌표(nx, ny)로 즉시 변환해 해당 격자의 최신 기상 데이터를 불러옵니다. 상단에는 역지오코딩을 통해 확인한 현재 위치의 행정동·법정동 이름이 함께 표시되어 지금 어느 동네 기준 예보를 보고 있는지 명확히 알 수 있습니다.
▲ 현재 위치의 동네를 자동으로 인식해 날씨 정보를 카드로 보여주는 HereWeather 화면
한 화면에서 바로 확인할 수 있는 항목은 다음과 같습니다.
- 현재 기온과 체감 온도: 풍속과 습도를 반영한 체감 온도를 나란히 배치해 외투 두께를 결정할 때 바로 참고할 수 있습니다.
- 강수 확률, 습도, 풍속: 우산 휴대 여부와 바람 세기를 한눈에 파악할 수 있습니다.
- 미세먼지(PM10)와 초미세먼지(PM2.5) 등급: 좋음·보통·나쁨·매우나쁨 단계를 직관적인 색상 배지로 표시합니다.
- 일출·일몰 시각: 저녁 산책이나 야외 러닝 시간을 계획할 때 유용합니다.
- 시간별 예보 및 주간 예보: 당일 출퇴근 시간대 변화와 향후 일주일간의 기상 흐름을 스크롤 없이 이어서 볼 수 있습니다.
각 지표의 상세한 활용법은 HereWeather 사용 가이드에 정리해 두었습니다.
개발하며 풀어낸 좌표계 변환과 위치 오차 문제
HereWeather를 구축하면서 가장 공을 들인 부분은 좌표계 변환과 브라우저 위치 오차 처리였습니다. 스마트폰 GPS가 반환하는 좌표는 전 지구 타원체 기준인 WGS84(위도·경도)인 반면, 기상청 단기예보 API는 한반도 중위도에 맞춘 람베르트 정각원추도법(Lambert Conformal Conic Projection) 평면 격자 번호(nx, ny)를 요구합니다.
서버 부하를 줄이고 사용자의 상세 위치 정보(위·경도)가 외부 서버에 저장되지 않도록, 삼각함수 기반의 투영 변환 공식을 클라이언트 자바스크립트로 직접 구현해 브라우저 내부에서 격자 변환이 끝나도록 설계했습니다. 또한 실내 Wi-Fi나 PC 환경에서 Geolocation API의 오차 반경(accuracy)이 수 킬로미터로 튀는 현상을 다루기 위해 신뢰 반경 검증과 하버사인(Haversine) 거리 계산을 적용했습니다. 이 과정에서 정리한 기술 내용은 아래 아티클에서 자세히 다루고 있습니다.
- 좌표계 WGS84와 한국 표준 UTM-K 좌표계의 차이점 이해하기
- 지도 투영법의 종류와 기상청 격자 변환(람베르트 정각원추도법) 이해하기
- HTML5 Geolocation API의 정확도 한계와 위치 오차를 다루는 방법
일상에서 이렇게 활용합니다
평일 아침에는 현관을 나서기 직전 HereWeather를 열어 강수 확률과 체감 온도부터 확인합니다. 강수 확률이 30~60% 사이로 애매하게 걸쳐 있는 날에는 시간별 예보 타임라인을 보며 퇴근 시간대에 비구름이 지나는지 확인하고 접이식 우산을 챙깁니다.
주말 산책이나 야외 운동을 나갈 때는 초미세먼지 등급과 일몰 시각을 함께 확인합니다. 출장이나 여행으로 낯선 지역에 도착했을 때도 그 동네의 행정동 이름을 검색할 필요 없이 브라우저에서 페이지만 열면 현재 서 있는 위치 기준 예보가 바로 떠서 편리하게 쓰고 있습니다.
강수확률 숫자의 정확한 의미가 궁금하시다면 강수확률 60%는 정확히 무슨 뜻일까? 기상청 예보 용어 정리와 단기예보·초단기예보의 차이도 함께 읽어보세요.
데이터의 한계와 앞으로의 계획
기상 데이터를 다루는 서비스인 만큼 구조적인 한계도 투명하게 공유합니다.
- 수치예보 모델의 한계: HereWeather는 기상청 공공데이터를 실시간으로 가공해 시각화하는 도구이므로, 여름철 대기 불안정으로 발생하는 국지성 소나기처럼 수치예보 자체가 빠르게 변동하는 날에는 실제 하늘 상태와 차이가 날 수 있습니다.
- 5km 격자 해상도: 하나의 격자 칸이 가로·세로 5km 영역을 대표하므로, 산자락이나 강변 경계에 걸쳐 있는 지역에서는 같은 격자 안에서도 미세한 기온·풍속 차이가 존재합니다.
- 실내·PC 네트워크 위치 오차: GPS 센서가 없는 데스크톱 PC나 지하 공간에서는 IP·기지국 기반으로 위치가 추정되어 인접한 동네가 표시될 수 있습니다.
앞으로는 자주 확인하는 지역(집, 직장, 본가 등)을 브라우저에 북마크해 두고 원클릭으로 비교하는 기능과, 기상특보 발효 시 상단 알림 배너를 표시하는 기능을 차례로 보강할 예정입니다.