도구 모음워드프레스 에어코리아 API 도구 제작기 — 전체 측정소·결측값·캐시 처리

워드프레스 에어코리아 API 도구 제작기 — 전체 측정소·결측값·캐시 처리

날꿀닷컴의 전국 미세먼지 측정소 비교는 WordPress MU 플러그인에서 에어코리아 시도별 실시간 측정정보 API를 호출해 만듭니다. 이 글은 2026년 7월 17일 현재 실제 운영 코드의 데이터 수집·검증·캐시·표시 방식을 기록한 개발 노트입니다.

왜 단순 API 표에서 멈추지 않았나

처음 구현은 한 시도의 앞 100개 항목을 받아 평균과 표를 보여줬습니다. 하지만 2026년 7월 점검에서 경기 API 응답의 전체 측정소는 126개였습니다. 100개 제한은 화면이 정상처럼 보여도 일부 측정소를 놓치는 결함이었습니다. 현재는 한 번에 최대 500건을 요청하고 API가 반환한 전체 건수와 실제 항목 수를 함께 기록합니다.

현재 데이터 처리 순서

  1. 허용된 시도 이름만 API 매개변수로 받습니다.
  2. 에어코리아 응답 코드가 성공(00)인지 확인합니다.
  3. PM10·PM2.5·오존은 숫자이고 0 이상인 값만 유효값으로 변환합니다.
  4. 유효값만 이용해 산술평균, 최저·최고 측정소, 나쁨 이상 측정소 수를 계산합니다.
  5. 성공 응답을 30분간 캐시하고, 장애 시 이전 성공 데이터가 있으면 측정 시각과 함께 표시합니다.

결측값을 0으로 계산하지 않는 이유

공공 API는 점검·통신 지연 때 - 같은 비수치 값을 보낼 수 있습니다. 이를 0으로 바꾸면 평균이 실제보다 낮아집니다. 따라서 각 오염물질의 유효 측정소 수를 별도로 세고, 결측값은 평균과 범위에서 제외합니다. 사용자는 “평균 21”뿐 아니라 “123/126개 유효”처럼 계산의 분모도 볼 수 있습니다.

2026-07-17 회귀 점검

지역 API 반환 PM10 유효 PM2.5 유효
서울 40 40 40
인천 43 42 42
경기 126 125 123

이 점검으로 경기 126개 항목이 모두 수집되고, 오염물질별 결측 건수가 통계에 반영되는 것을 확인했습니다.

사용자 기능으로 연결한 부분

  • 측정소 이름 즉시 검색
  • 이름순·PM2.5 높은 순 정렬
  • 현재 보이는 행을 UTF-8 CSV로 저장
  • ?sido=경기 형태의 재현 가능한 지역 URL
  • 평균과 함께 최저·최고 측정소, 나쁨 이상 측정소, 유효 데이터 수 표시

보안과 운영 원칙

API 인증키는 공개 콘텐츠나 JavaScript에 넣지 않고 서버 설정에서 읽습니다. 지역 선택은 서버와 브라우저 양쪽에서 허용 목록으로 제한하며, 사용자 입력은 출력 전에 이스케이프합니다. API 장애 메시지는 키나 내부 응답 전체를 노출하지 않습니다.

남아 있는 한계

현재 평균은 인구·면적 가중치가 없는 산술평균이고, 측정소 위치를 지도에 표시하지 않습니다. 예보 API도 결합하지 않았으므로 이 도구는 “현재 측정소 비교”에 집중합니다. 기능 범위를 넓힐 때도 실측과 예보를 화면에서 명확히 구분할 예정입니다.

이 글이 도움이 되셨다면 공유해주세요!

날꿀닷컴 도구 안내