기상청 API가 얼마나 ㅈ같냐면

기상청 API의 최대 문제점은 수시로 서버가 맛이 가거나 응답이 느리다는 것이지만 (이 글을 쓰기 며칠 전에도 3일간 예보, 실황 API가 응답을 안했다. 주말 내내 안되다가 월요일 출근시간 되니까 고치더라.) 일단 제외하고, API의 구조 자체가 얼마나 개발하기 불편하고 지들 편하게만 만들어졌는지 적어 보겠다.

기상청 API 허브 (https://apihub.kma.go.kr/) 2024년 08월 예특보API 기준.

API가 쓸데없이 많다

내가 3일 후 부터 10일이내 예보 데이터가 필요하면? 중기예보 API를 써야 한다. 오늘부터 3일 이내 예보 데이터가 필요하면? 동네 단기예보 API를 써야 한다. 오늘 특정시간대 예보가 필요하면 초단기예보 API를 써야한다. 지금 현황을 알고 싶으면 초단기실황 API. 거기에 단기개황, 단기육상예보, 단기혜상예보, 기상개황, 예보버전조회, 동네예보분포 등등 단기 예보만 이 정도이고, 중기예보와 특보까지 치면 목적과 지역에 맞춰 써야 하는 예보가 20개 가까이 된다. (중기예보도 강우예보를 확인하는 육상/해상 예보와 기온예보로 분리되어 있다)

그냥 내 위치랑 뭐 필요한지 요청하면 해당하는 자료 주면 안되냐?

저 많은 API가 쓰는 좌표계가 달라

일단 API가 많아도, 여러번 필요한 것들 여러번 호출하면 되잖아? 좀 느리겠지만. 글쎄.

일단 동네예보는 “동네예보 격자 번호”라는 것을 사용한다. 이건 다행히 위경도를 변환하는 API를 제공하고, 인터넷 검색하면 변환하는 함수도 있다. 육상예보와 중기예보는 예보구역코드라는걸 쓴다. 그런데 API별로 예보구역코드가 다르다. 육상예보에서 서울은 11B00000이지만, 기온예보에서는 서울이 11B10101인 식이다. 동네예보 통보문는 발표관서코드를 알아야 한다. 기상특보는 특보구역코드를 계산해서 써야한다. 다른 자료들도 대부분 위치가 아니라 그 자료를 만든 측정소 코드로 요청하는 식이다.

일부 구역코드는 위경도에서 변환이 안되고 서울이면 서울식으로 텍스트 매칭해서 써야 한다.

그냥 위경도로 요청하면 니들이 변환해서 자료 주면 안되니?

자료 만든 시간도 알아야 해

그걸로 끝이 아니다. 일부 자료는 매시간 자료를 만드는게 아니라서 조회할 때 몇시에 만든 자료를 줄지도 설정해야 한다. 예를 들어 가장 자주 쓰게되는 동네 단기 예보는 02시, 05시, 08시, 11시, 14시, 17시, 20시, 23시 이렇게 8번 갱신되는데, 예를 들어 19시에는 17시것을 조회해야 한다. 값을 안넣거나 다른것을 넣으면 에러난다. 물론 이런건 매뉴얼이 있지만.

시간 안넣으면 최신값을 주는 API도 있는데 아닌 것도 많다.

그 외에도 많아

API마다 엑셀과 워드로 매뉴얼이 있기는 한데, 매뉴얼과 다른 사양을 가진 경우도 있고 (갱신 안한 듯), 비슷비슷한 API의 목적이 매뉴얼에도 적혀 있지 않아서 하나하나 API 사용신청하고 써봐야 알 수가 있다.

매뉴얼에 기상 용어도 정리가 안되어 있다. 특보API에 명령 변경이라는 값이 나오는데 이게 특보 등급이나 시간이 변경된 것이라는 걸 한참 돌려봐야 알 수 있다. 기상청 API를 쓰면 용어 정도는 아는 기상전문가라고 생각해서인가.

API의 응답도 딱히 자료가 쓰기 좋기 정리되어 있지 않다. 기온, 풍속, 습도 등등 값이 하나하나 나열만 되어 있다. 하루치 데이터만 해도 24시간 x 측정값들 수로 수백줄이 된다. 이틀 후 13시의 습도를 찾으려면 원하는 값이 나올 때까지 루프 돌리는 수밖에 없다.

날씨 앱 만들려면

날씨 앱 하나 만든다고 가정하자.

일단 현재 날씨를 확인해야겠지? 위경도를 동네예보 격자 번호로 변환한다음 초단기실황 API를 사용한다.

폭염특보가 있는지 표시해야겠지? AWS가 속한 특보구역 코드API를 사용해 현재 위경도가 속한 특보구역 코드를 알아낸 후, 특보현황 조회 API를 사용해야 한다.

날씨앱에 있는 오늘 시간별 날씨를 표시해야 한다. 현재 날씨에서 사용한 동네예보 격자 번호로 초단기예보API나 단기예보API를 사용한다.

내일부터 일주일이나 10일 이내의 날씨도 나와야 한다. 요즘 날씨앱에는 기본이니까. 중기예보 API를 사용해야 하는데, 중기예보 예보구역을 확인한 후(이거 위경도에서 바로 변환이 안된다. 다른건 행정구역에서 대충 변환하면 되는데 강원영서와 영동 구별이 어렵다), 중기예보 육상예보 API에서 강우를 확인하고, 중기기온 예보구역을 확인하고(앞에서 말했듯 육상예보용과 코드가 다르다) 중기예보 기온예보API에서 온도를 확인해야 한다.

날씨앱 첫화면을 띄우기 위해 쓸 기상청 API가 이렇게 6번이 넘는다. 여기에 지오코딩이나 미세먼지 API같은 기상청 외의 API까지 쓰려면 최적화가 얼마나 힘들려나.

비교를 해보자면 Open-Meteo 같은 해외 서비스 API는 저걸 1번의 쿼리로 모든 정보를 가져온다. 위치 확인에 필요한 값도 위경도 뿐이다.

아마도

아마도 API를 개발한 개발자도, 워낙 데이터 소스가 ㅈ같고, 그거 편하게 만든다고 보상이 있는 것도 아니니 그냥 주는 데이터 형식 그대로 조회만 하게 API를 만들었을 것이다. 하지만 정말…그게 최선일까?

저런 API가지고도 기상청 예보 조회를 잘하는 날씨 앱들은 개발자들이 존경스럽다.

짜파게티 블랙

짜파게티 블랙 먹어 봤다. 사실은 일주일 전에 사놨는데 먹을 기회가 없어서 이제야 먹어 봄.

결론은 짜파게티의 고급버전이라기 보단, 그냥 건면 버전.

소스는 거의 같은듯 한데 춘장향이 미세하게 강하고 조금 묽은 느낌이 남. 아마 면이 달라서 국물로 녹아 들어간 전분이나 기름이 달라져서 그럴수도.

면은 좀더 쫄깃 하지만 고소한 것도 없고 단 느낌이 덜함. 그래서 전체적으로 ‘건강한 맛’ 느낌이며, 다소 불량식품 같았던 짜파게티의 특성이 사라짐. 그래서 짜파게티의 그런 면을 좋아했던 사람은 실망할 것이고, 반대인 사람은 더 좋아할 듯 하다.

건면이라고 면이 얇다는 느낌은 크게 없는건 다행이지만, 양이 줄어서 아쉽다. (오히려 부담없이 2개 끓여먹을 수 있을지도?ㅋㅋㅋ) 건면이라 그런지 봉지내에 상당량의 면이 부서져 있는건 아쉽다.

콩고기가 기존 짜파게티보다 몇배 큰게 많이 들어 있긴 한데, 다른 건더기는 거의 없다시피해서 딱히 고급스러운 느낌은 없다.

가격이 기존 짜파게티보다 조금 비싸서, 딱히 더 사먹을 것 같지는 않다.

공공데이터포털 API의 timeout 오류

1월 30일부터 무슨 일이 있는지 공공데이터 포털 API를 호출하면 30초든 60초든 아무리 대기해도 응답이 없이 timeout 되는 현상이 간헐적으로 생기고 있다. 관련 문의도 계속 이어지는 중.

길면 2,3시간 이상, 짧으면 20분 정도 발생하는데, 문의하면 서비스를 재시작해서 고쳤다느니 하는 답만 주고 해결이 안된다. 안정적인 사용이 안되니 짜증나는 중.

2월 2일에는 내가 사용중인 Vultr 쪽 아이피를 차단하는 일도 있었는데, 문의해서 5일이 되서야 풀었다. 그쪽 아이피 대역으로 공격이 있었다는데, 1월 30일부터의 서비스 불안정과 관련이 있는지는 모르겠다.

공공데이터포털의 기상청 API를 1년 이상 써본 후기, 못 써 먹겠다.

“오늘 우산 필요해?” 사이트를 만든지 1년 3개월이 지났다. 이 사이트는 공공데이터포털의 API 3가지를 사용하는데, 각각 “기상청_단기예보 ((구)_동네예보) 조회서비스” , “기상청_기상특보 조회서비스”, “한국환경공단에어코리아대기오염정보” 이다.

그런데, 이 API들은 툭하면 응답시간이 10초 이상 걸린다.

가장 큰 문제는 단기예보 API에 있는 “초단기예보조회”인데, 이 API는 300초 이상 걸리는 경우도 하루에 몇 번 정도 있다. 날씨가 안 좋은 날에는 부하가 걸리는지 아예 timeout 이나 500 서버 오류가 나기도 한다. 에러가 나는 시간이 매시 정각 2~3분 사이인 경우가 많은 걸 보면(12시부터 12시 2분까지, 13시부터 13시 3분까지…이런식), 뭔가 처리하느라 서버가 응답을 처리 못하는 듯.

“초단기예보조회”의 정확도도 문제인데, “초단기실황조회”에서 현재 날씨가 비가 오는데, “초단기예보조회”에는 비 예보가 하나도 없다던지 식으로 두 API가 안 맞는 경우가 많다. 뭐 예보가 틀릴 수도 있지만, 문제는 하루종일 비가 와도, 맑다는 예보는 수정을 안한다. 계속 맑음이란다. 네이버 날씨에 있는 기상청 자료는 그런 경우에 2,3시간 안에 새로운 예보로 갱신을 하던데, 단기예보 API는 수정되는 경우를 보지 못했다. 갑자기 날씨가 바뀌어도 항상 아침에 본 예보가 저녁까지 그대로이다. 비오는 것 뿐 아니라, 온도나 습도도 자주 틀린다.

“기상청_기상특보 조회서비스”는 더 가관이다. 검색범위가 발효기준 6일전까지만으로 제한되는데, 그래서 한파나 폭염 경보가 발효되고 6일이상 지속되면 API에서 안나온다.

이래서야 공공데이터로 유용한 사이트를 만들기는 힘들지 않을까? 혹시라도 개선될까 하고 지켜봤지만 그럴 기미가 없다. 그렇다고 해서 국내 날씨 정보가 정확하고 빠른 무료 API가 있는 것도 아니고…

파이어폭스 안드로이드에 200개 이상의 확장기능이 가능할 예정?

파이어폭스 확장기능 커뮤니케이션 블로그에 지난 1일 올라온 글에 따르면, 12월중에 안드로이드용 파이어폭스에서 200개 이상의 확장기능이 사용 가능해질 예정이다.

버전 120 수명주기내에 라는 표현이 있지만, 버전 120은 11월 말에 나올 예정이고, 구체적으로 12월 언젠가라고 언급한거 보니, 시기는 12월이 맞는듯.

그동안 꼼수로 사용하던 확장기능이 정식버전에서도 훨씬 많이 사용 가능해진다니, 무척 기대되는 소식이다.

안드로이드용 파이어폭스는 제한적인 확장기능 외에는 일반 유저들에게 어필할 다른 경쟁 브라우저와 차별점이 없기 때문에, 이런 조치는 진작에 했어야 했다. 많이 늦었지만 환영한다.

ps. 지난 11월 28일에 12월 14일에 400개의 확장기능이 안드로이드용 파폭에서 가능해질 것이라고 발표되었다. 하지만 저 400개에 내가 원하던 TWP 확장기능은 없는 듯.

ps. 우리나라 기준 12월 15일에 450여개의 확장기능이 열렸다. TWP도 포함. 야호!

낙성대 힐링페스티벌 주관사 (주)생황과 사람들, 일처리 정말 못한다

2023년 9월 9일, 서울시 후원, (주)생황과 사람들이라는 회사의 주관으로 “낙성대 힐링페스티벌”이라는 축제가 열렸다.

우리 애들은 그림을 그리는 걸 좋아해서 청소년 환경실천 그림대회에 참가했다.

더운 날씨였지만 애들은 열심히 그림 그리고 제출했다. 그런데 참가신청을 했을 때부터 준비물 문제로 문자를 애매하게 보내더니, 선착순 100명이라더니 150명을 받아버리지 않나. 그 후로도 뭔가 진행이 이상했다.

애들 그림 150명 심사하는데 5주가 걸린다고?

막상 예고보다 1차 심사결과 발표가 3일이나 늦게 나왔다. 그것도 링크를 따라가면 애들 이름이 자음 하나씩 틀렸다. ㅁ을 o으로 썼다던가 -_-

그리고 2차 발표일인 10월 21일 이후 아무런 안내가 없다가…

11월 3일이 되서야 늦어졌다고 안내 문자가 왔다.

11월 6일 오늘 온 문자는 결과발표가 아니라, 그림에 대한 설명을 문자로 달란다. 갑자기? 이제야? 어린 애들이 2개월 전에 그린 그림 내용을 기억하겠냐?? 그리고 그 내용을 참고해서 발표한다고?

항의가 있었는지 갑자기 정정 문자가 왔다. 에휴… 여기는 뭔가 행사 진행을 해본 경험이 없는 듯. 생각도 없는 것 같고.

ps. 11월 20일에 드디어 수상자 발표. 링크.
시상은 12월 13일이네 -_- 이거 연간 행사였냐

ps. 갑자기 시상식날 문자를 보내서 시상식에서 꽃도 사라고 한다. 정말 가지가지 하네.

이어락 G10 게이밍 이어폰

국산 게이밍 이어폰. 4월말에 6만 2천원에 구매.

고급진 초록색 케이스로 되어 있었고, 구성품은 기본 이어폰, 1미터 USB AtoC 연장케이블, 추가 이어팁 6가지, 클립, 휴대용 하드 파우치, 천으로 된 미니 파우치 등.

처음에 쓸 때 노이즈가 있었는데, 실수로 단선이 되서 AS를 보냈더니 새것으로 교체해주셨고, 그 후로는 노이즈가 없어졌다. 답변을 보니 내부에 부식이 있었다고.

이어폰이 USB-C타입이라 DAC가 내장되어 있고, 음질이 무척 깔끔하고 해상력이 좋다. 지금까지 써본 10만원 이하 이어폰에서 해상력은 최고 인듯. 특히 게임 중 발소리 듣기 좋게 최적화 되어 있는지 잘 들린다.

아쉬운 점으로는 케이블이 좀 얇아서 잘 꼬이는 편이고, 중간에 있는 컨트롤러가 얇은 버튼이 한개있어서 활용도가 애매하다. 여러번 눌러 앞뒤로 가는 식은 개인적으로 싫어해서. 컨트롤러가 보통 이어폰들은 왼쪽에 붙어 있는데, 이건 오른쪽에 붙어 있는 것도 다른 점.

ALLDOCUBE iPlay50 mini 후기

큐텐에서 8만 7천원 정도에 샀다. 배송에는 4일정도 걸린 듯.

대충 사양은 AP는 Unisoc T606라는 듣보잡이고, 화면은 8.4인치 1920×1200 IPS LCD, 램 4GB, 저장공간 64GB(UFS2.1), microSD, LTE, 와이파이5, 블루투스5.0, 3.5mm이어폰단자 지원. 배터리 4천mAh(고속충전 지원 안함), 무게 292g 정도이다.

손에 쥐면 이런 정도

장점

  • 싸다. 10만원도 안한다.
  • 의외로 성능이 나쁘지 않다. AP는 그렇게 좋은건 아닌데, 저장공간(UFS2.1)이나 메모리가 나쁘지 않다보니 발목 잡는 것이 없어서 버벅임이 없는 그런 느낌. 앱을 많이 깔지만 않으면 쓸만할 듯.
  • 디스플레이도 그렇게 나쁘지 않다. 물론 살짝 삐딱하게 끼워져 있고, 색도 탁하고 색감도 그렇고 좀 별로이긴 한데, 최소한 20만원대 태블릿들과 견주어도 될 수준이다. 밝기도 준수하다.
  • 아이콘 등 몇 군데 커스터마이징이 되어 있지만, 90%정도 순정 안드로이드이다. 그래서 호환 문제는 아직 없다. 한글도 커스터마이징 된 부분은 번역이 안되어 있다.
  • 알루미늄으로 만들어졌는지 외형이 크게 싸구려 느낌은 안든다. 멀리서 본다면…
  • 가볍다. 오히려 190g짜리 스마트폰보다 가볍게 느껴진다.
  • LTE가 된다. LTE되는 저가형 미니 태블릿이라니, 귀한 제품이다.
  • GPS가 있다. 하지만 지자기 센서가 없어서 방향을 인식 못하니 네비용으로는 별로이다.

단점

  • 모노 스피커에, 음질이 무척 구리다. 스피커가 달려 있다 수준.
  • 카메라도 그냥 달려 있다. 수준.
  • 넷플릭스가 SD화질만 된다. 글로벌 롬 기준 Widevine L3이며, 내수롬에서는 L1이 된다고 하지만 그래도 넷플릭스에 등록된 기기가 아니라서 SD만 된다. 유튜브와 몇몇 OTT는 HD가 됨.
  • LTE를 지원하는 기기이지만, 설정상 핸드폰에 가까워서, KT의 데이터쉐어링 유심을 사용할 때 태블릿에서 쓰던 유심은 인식을 못한다. 통신사가 폰 유심과 태블릿 유심을 구분할 경우 문제가 된다.
  • LTE 속도가 느리다. 체감상 스마트폰의 5분의 1밖에 안나오는데, 유튜브나 넷플릭스 보는데는 충분하지만 다운로드 등 몇몇 상황에서는 답답하다.
  • 단자가 좀 이상한 위치에 있다. USB단자도 윗부분에 가운데도 아닌 삐딱한 위치에 있고, 3.5mm 이어폰단자는 아예 모서리에 있어서 좀 위험하게 보인다.
  • 3.5mm 이어폰 음량도 그다지 좋지 않다. 최대로 해도 그리 귀가 아프지 않은 정도. 음질도 애매하고. USB-C 이어폰은 괜찮다.
  • 지문인식이나 얼굴 인식 등 보안장치가 없다. 그래서 매번 켤 때 패턴이나 비번을 넣어야 해서 불편하다.
  • 워낙 스마트폰용 안드로이드를 그대로 쓰다보니 잠금해제 패턴을 입력하는 영역이 화면 전체로 크게 설정되어 있다. 패턴 입력할 때 커다란 화면에 입력하니 불편하고, 패턴이 주변에 다 보인다.
  • 지자기 센서나 가속도 센서, 조도 센서 등 대부분의 센서가 빠져 있다.
  • 내구성이 별로일 것 같다. 겉면이 힘을 주면 삐그덕 거리는 소리가 난다. 1년만 써도 아깝지 않을 가격이지만.
  • 배터리 용량은 밝기 70%로 화면 켜짐 시간 5시간 이상 가기 때문에 무난하다. 고속충전은 안되지만 충전 시간은 1시간 남짓이라 큰 문제 없음.
  • 아주 가끔 2,3초간 터치를 씹거나 네트워크가 먹통 될 때가 있다. 주로 화면을 다시 켰을 때 그러는 걸 보면, 절전 기능이 버그가 있는 것으로 추정된다.
  • 이어폰을 뽑으면 재생되던 미디어가 꺼지는 것이 정상인데, 반대로 이어폰을 뽑으면 멈춘 미디어도 다시 재생되는 경우가 있다. 은근 불편.
  • 블루투스 코덱을 AAC나 LDAC를 지원하지 않고 SBC만 지원한다. 출퇴근 지하철 같이 사람들이 많은 곳에서는 조금 혼선이 될 수 있다.

즉, 결론은 디스플레이와 성능은 적당히 쓸만하게 만들고, 나머지를 포기해서 가격을 최저로 만든 태블릿.

일단 쓸만한 LTE 미니 태블릿이 나오기 까지 버티는 용도로 그럭저럭.

+ ps. 5개월 정도 사용하니 터치문제가 갑자기 심해졌다. 사용 중에 갑자기 터치가 안되는 문제가 아주 빈번하다. 화면을 껐다가 켜면 100% 정상화 되지만, 몇 분 있으면 다시 안되는 경우가 50%이상.

파이어폭스 안드로이드에서 TWP 번역 확장기능 사용하기

파이어폭스 확장 기능 중에는 크롬처럼 페이지 전체를 번역해주는 확장기능이 있는데, 아쉽게도 파이어폭스 안드로이드에는 설치가 안된다. 파이어폭스 안드로이드에는 정해진 확장기능만 설치할 수 있기 때문.

방법이 있긴 한데, 파이어폭스 안드로이드 정식 버전은 안되고, 베타 버전과 나이틀리 버전에서만 가능하다.

방법은 다음과 같다.

  1. 파이어폭스 베타를 설치한다.
  2. 파이어폭스의 “설정” 메뉴로 들어가 맨 아래 “Firefox Beta 정보”를 선택한다.
  3. 정보 페이지에서 파이어폭스 로고를 5번 누른다. 그러면 디버그 모드가 활성화 된다.
  4. 다시 설정 화면으로 돌아가면 “고급” 항목에 “사용자 지정 부가 기능 모음집”이라는 메뉴가 추가되어 있다.
  5. 여기에 아래 그림 처럼 아이디 “13306517” 이름 “first”를 넣는다. (내가 모아 놓은 파이어폭스 안드로이드 기본 확장기능 + TWP 모음집이다.)
  6. 확인을 누르면 파이어폭스가 종료되고 재시작되는데, 부가 기능을 확인해 보면 TWP 번역 확장 기능이 추가되어 있다. +를 눌러 설치해서 사용한다.

위의 스크린샷 처럼, 외국어 사이트를 잘 번역해 주는 것을 볼 수 있다. 단점이라면 항상 아래쪽에 번역바가 성가시게 떠 있어서, 필요 없는 사이트 별로 “이 사이트 번역 안함”같은 설정을 해 주어야한다. 아니면 확장기능의 옵션중에 손가락 3개를 터치했을 경우 번역바가 뜨게 하는 기능이 있으니 그걸 써도 좋다.

스마일베어 영양한끼 오트밀 그레인

약사 메디슨맨님이 유튜브에서 이벤트를 해서 받은 제품. 저거 7개 들은 한상자가 시중에 2.5만원에 팔리고 있는 듯.

간편하게 뚜껑을 열어서 물을 취향대로 넣고 흔들어 먹으면 된다. 맛은 달달한 미숫가루 맛. 단백질과 섬유질이 10g 이상 들어있고 귀리, 현미, 아몬드 등 다양한 곡물이 들어 있는 것이 장점.

단점으로는 당류가 6.2g으로 많은건 아니지만 어느정도 들었고, 혀로 느끼기에도 단 편이다. 그리고 아몬드를 가루가 아니라 조각으로 넣어서 씹히는 건더기가 있는 것은 좋은데, 마시다 보면 아몬드가 안나오고 입구에 잔뜩 걸려 있어서 좀 불편하다.

개인적으로는 간편한 다이어트 식사용으로 딱이긴 한데, 가격이 좀 비싸서 사먹을 계획은 없다.