미세먼지 정보는 이제 날씨만큼이나 일상에 중요한 요소입니다. 저는 매일 아침 눈 뜨면 날씨와 같이 미세먼지 수치부터 확인합니다. 저처럼 외출 전, 공기질 상태를 확인하고 마스크 착용 여부를 결정하는 사람도 많죠.
이번 글에서는 환경부 대기질 API를 활용해, 대표적인 대기질 조회 앱인 미세미세 같은 서비스를 직접 만들어보는 방법을 단계별로 정리해 보겠습니다.
1. 환경부 대기질 API란?
환경부 대기질 API는 전국 실시간 대기오염 정보를 제공하는 공공 데이터 API입니다. 여기에는 미세먼지(PM10), 초미세먼지(PM2.5), 오존(O₃), 이산화질소(NO₂), 아황산가스(SO₂) 등 다양한 항목이 포함됩니다.
미세미세 앱 만들기를 위해서는 주로 PM10, PM2.5 데이터를 많이 사용합니다.
2. API 발급 절차
미세먼지 데이터를 앱에 적용하려면 먼저 API를 발급받아야 합니다.
환경부 대기질 API 발급 방법은 다음과 같습니다.
- 공공데이터포털(data.go.kr) 회원가입
- 검색창에
대기오염정보 조회 서비스
입력 - 해당 서비스 신청 후 API Key 발급
- 발급받은 인증키를 사용해 HTTP 요청
발급받은 키는 ServiceKey
파라미터로 요청 URL에 포함시켜야 합니다.
3. 요청 URL과 데이터 형식
예시 URL:
http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/
getCtprvnRltmMesureDnsty?serviceKey=인증키&returnType=json&numOfRows=100&pageNo=1&sidoName=서울&ver=1.0
- sidoName : 조회할 시·도명 (예: 서울)
- returnType :
json
또는xml
- numOfRows : 한 번에 불러올 데이터 수
- ver : API 버전
응답 데이터는 JSON 형태로 오며, 각 측정소의 미세먼지 수치와 상태(좋음, 보통, 나쁨, 매우나쁨)가 함께 전달됩니다.
4. 미세미세 앱 만들기 기본 구조
앱을 만들 때는 다음과 같은 흐름을 고려하면 좋습니다.
- 데이터 수집
환경부 대기질 API를 통해 실시간 데이터 요청 - 데이터 파싱
JSON 데이터를 가공해 원하는 정보만 추출 - UI 표시
미세먼지 농도에 따라 색상, 아이콘 변경 - 부가 기능
위치 기반 측정소 자동 선택, 알림 푸시, 예보 데이터 표시
5. 프런트엔드에서 API 연결하기
프런트엔드(JavaScript)에서 fetch API를 사용하면 간단하게 호출할 수 있습니다.
fetch('API_URL')
.then(response => response.json())
.then(data => {
console.log(data);
// 원하는 데이터 가공 및 UI 표시
});
이렇게 하면 앱 실행 시마다 실시간 미세먼지 정보를 가져와 화면에 표시할 수 있습니다.
6. 백엔드에서 데이터 가공하기
규모 있는 미세미세 앱 만들기라면 백엔드 서버를 두고 데이터를 가공하는 방식이 안정적입니다.
예를 들어 Node.js, Python(Django, Flask), Spring Boot 등을 사용해 API를 호출한 뒤, 클라이언트에 필요한 데이터만 전달하도록 하면 불필요한 부하를 줄일 수 있습니다.
Node.js 예시
import express from 'express';
import fetch from 'node-fetch';
const app = express();
app.get('/air-quality', async (req, res) => {
const url = '환경부_API_URL';
const response = await fetch(url);
const json = await response.json();
res.json(json);
});
app.listen(3000, () => console.log('서버 실행 중'));
이렇게 하면 앱에서는 /air-quality
엔드포인트만 호출하면 됩니다.
7. 위치 기반 기능 추가
실제 미세미세 같은 앱은 사용자의 GPS 좌표를 받아 가장 가까운 측정소 데이터를 보여줍니다.
이를 구현하려면:
- 위치 정보 수집 → HTML5 Geolocation API 또는 앱 내 네이티브 GPS
- 측정소 목록 조회 → 환경부 API에서 측정소 위치 데이터 가져오기
- 거리 계산 → 위경도 값을 활용한 Haversine 공식 적용
- 가장 가까운 측정소 데이터 표시
이 과정을 거치면 사용자가 지역을 직접 선택할 필요 없이 자동으로 맞춤형 공기질 정보를 제공합니다.
8. 데이터 시각화
숫자만 나열하면 정보가 직관적이지 않으니, 시각적인 요소가 중요합니다.
- 색상 코드:
- 좋음(파란색), 보통(초록색), 나쁨(주황색), 매우나쁨(빨간색)
- 아이콘 표시:
마스크, 해, 구름, 미세먼지 그림 등을 활용 - 그래프 표시:
Chart.js, D3.js 같은 라이브러리를 활용해 시간대별 미세먼지 변화를 시각화
9. 알림 기능 구현
미세먼지 농도가 ‘나쁨’ 이상일 때 사용자에게 푸시 알림을 보내는 기능도 유용합니다.
이때는 앱 백그라운드 작업 또는 서버 스케줄러(Cron Job)를 통해 주기적으로 데이터를 확인하고 조건에 맞으면 알림을 발송합니다.
예:
- 오전 7시 기준 오늘 예보가 ‘나쁨’ 이상 → 마스크 착용 알림
- 초미세먼지(PM2.5) 50㎍/㎥ 이상 → 외출 자제 권고
10. 성능과 트래픽 관리
환경부 대기질 API는 호출 제한이 있으므로 캐싱 전략이 필요합니다.
Redis나 메모리 캐시를 사용해 일정 시간(예: 5~10분) 동안 동일 데이터를 재활용하면 불필요한 API 호출을 줄일 수 있습니다.
또한, 사용자 수가 많은 경우 CDN을 통해 정적 리소스를 배포하고, 서버 부하를 최소화하는 것이 좋습니다.
11. 마무리
환경부 대기질 API를 이용하면 누구나 손쉽게 미세미세 앱 만들기가 가능합니다.
단순히 데이터를 불러오는 것을 넘어서, 위치 기반 기능·시각화·알림 등 사용자 친화적인 기능을 더하면 경쟁력 있는 서비스로 발전시킬 수 있습니다.
이제 여러분의 아이디어를 더해 세상에 없는 공기질 앱을 만들어보세요.