오이지수란 매시간마다 날씨정보를 가지고 와 그에 맞는 오이 이미지를 보여주는 기능이다.
이게 왜 오이지수냐 한다면 초기 계획은 오이가 잘 자라는 환경에 맞춰 우리만의 지수를 정해보자 였으나 고려해야 할 것들이 너무 많기에 간소화하는 대신 오이들의 이미지를 보여주는 것으로 변경되었다
결과
온도 아래 '!'에 호버하면 OE지수의 대하 설명이 나오고, 오른쪽엔 날씨에 맞는 이미지가 출력된다.
개발
개요
API는 공공데이터포털에 https://www.data.go.kr/iim/api/selectAPIAcountView.do
공공데이터포털 통합 로그인
공공데이터포털 로그인 국민과 함께 하는 공공데이터포털에 오신 것을 환영합니다
auth.data.go.kr
를 이용하였다.
이 api는 1시간 단위로 정보를 제공하기 때문에 spring에 스케줄러를 이용함이 좋다고 판단하였고 1시간 단위라고 매시간 00분에 업데이트되는 것이 아니므로 매시간 30분마다 api를 요청하여 필요한 데이터만 잘 정제하여 db에 저장하고 사용자에게는 가장 최근의 정보만 제공하는 방향으로 개발하였다.
과정
먼저 사이트에 접속하여
개인 api인증키를 발
급 받고 발급 받은 인증키를 서브모듈로 운용하고있는 yml에서 관리하고
@Value 태그를 이용하여 변수로 할당받아 사용한다.
api는 위 사진과 같이 요청할 것인데 하나씩 끊어서 설명해 보자면 다음과 같다.
serviceKey : 할당받은 api키
pageNo : 볼 페이지
numOfRows : 몇 줄까지 볼 건지
dataType : 받을 데이터 타입 (XML과 JSON 두 개가 있는 것으로 안다. 육안으로 볼 때는 XML이 편함으로 데이터 체크를 직접 하게 된다면 XML로 보는 것을 추천)
base_date : 조회할 날짜 선택(24년 1월 1일은 24240101로 요청해야 하기 때문에 포맷을 맞춰 줘야한다.)
base_time : 조회할 시간 선택(날짜와 같이 포맷을 맞춰줘야 한다.)
nx=?&ny=? : 조회할 동네의 좌표이다. (기상청 어디 잘 찾아보면 표로 잘 정리되어있다.)
JSON으로 받은 데이터 핸들링은 주석으로 대체하겠다.
imgNum에 들어가는 숫자는 db에 저장된 이미지의 정보가 담겨있는 컬럼의 pk이다.
weatherNum에 들어간 정보는 날씨 관련으로 1, 2, 5, 6은 순서대로 비, 비/눈, 빗방울, 빗방울/눈 날림 이것들을 전부 비가 오는 상태로 정의하였고 3(눈), 7(눈 날림) 일 때만 눈으로 정의했다. 그럼 소거법으로 0과 4는 뭐냐 할 텐데 0은 눈이나 비가 오지 않는 상태이고 4는 소나기라 1시간을 보는 데이터에서 금방 그칠 비를 1시간 동안 보여주는 것은 어색하다고 판단하여 제외하였다.
마치며
이상으로 기상청 api와 스케줄러를 활용하여 날씨 데이터를 핸들링 해보았고 컨트롤러와 서비스 클래스는 여기서 핸들링해서 db에 넣어둔 데이터를 조회하는 것이 끝이기 때문에 따로 작성하지는 않았다.
더 자세한 코드를 보고싶다면 https://github.com/qkrwlstn1/-BE-Oeasy/blob/main/src/main/java/com/OEzoa/OEasy/util/scheduler/WeatherScheduler.java
-BE-Oeasy/src/main/java/com/OEzoa/OEasy/util/scheduler/WeatherScheduler.java at main · qkrwlstn1/-BE-Oeasy
Contribute to qkrwlstn1/-BE-Oeasy development by creating an account on GitHub.
github.com
여기서 보길바란다.
'spring > 개발 - OEasy' 카테고리의 다른 글
[Spring][JPA] Querydsl을 사용하여 동적쿼리 처리 (1) | 2025.06.18 |
---|---|
[Spring][JPA] JPQL 최적화 해보기 (0) | 2025.03.23 |
Spring - stomp를 사용하여 채팅과 투표기능 개발 (0) | 2024.12.11 |