공공데이터포털 api 데이터들을 DB에 저장하기

gnoesnooj·2022년 4월 27일
6

더모티 배경

공공 데이터 포털에서 흡연장 위치에 대한 데이터를 가지는 api를 가져와서, 흡연장 위치 등을 제공하는 manner smoker 프로젝트의 백엔드 프로젝트를 진행하게 되었다.

처음 스프링 프로젝트였던 티끌 모아 태산, 티모태 프로젝트를 거의 마무리하였지만, 아직도 부족한게 많다고 느껴졌고,

팀원은 티모태 다음 프로젝트인 이 프로젝트의 이름을 더 모으자 티끌 로 정하게 되었다.

공공데이터포털


처음 홈페이지에 들어가서 위의 검색창에 흡연장을 검색하여 api를 찾았다.
수원에 거주 중이기에 수원의 흡연장 api를 이용하고 싶었는데, 데이터가 단 하나뿐이였다..

그래서 일단은 서울 용산구의 api를 이용하기로 했다.


들어가서 오픈 API -> 활용신청 에 들어가서 항목에 맞게 활용 신청을 해서, 권한(인증키)을 얻게 되었다. 활용 신청은 신청 후 어느정도 걸리는지 볼 수 있는데, 용산구 흡연구역의 경우 바로 사용이 가능했다.


이후 마이페이지 > 신청 승인된 api를 들어가면

이와 같이 인증키가 받아진 것을 확인할 수 있다.

밑으로 스크롤하면 이와같은 화면을 확인할 수 있는데, Open Api 명세 확인 가이드를 보고 따라하면 웹사이트상에서 데이터들을 확인해 볼 수 있다.


위는 헤더방식, 아래는 쿼리방식이다. 인증키를 알맞게 넣어준 후 필요한 파라미터를 입력해주고 호출을 해주면

이와 같이 request URL, 성공여부, 데이터 등을 확인할 수 있다.
request URL 을 포스트맨에서 실행해보면 역시 동일한 결과를 받을 수 있다.

코드 배경

더모티는 User 별 흡연구역에 대한 즐겨찾기 여부 제공, 위치 데이터(위도, 경도), 검색 기능 등을 제공해야했다.
하지만 매번 검색할 때마다 공공데이터포털 api를 호출 하면, 공공 데이터포털의 api 트래픽 제한, 어플 기능 저하 등 문제가 생길 수 있다고 생각했다.
따라서 DB에 api를 받아와서 저장 후 기능을 제공해야겠다고 생각했다.

처음엔 db에 저장하는 것이기에 그냥 CSV 파일을 저장해서 사용할까도 생각했지만, 다음과 같은 문제가 있다.

  • CSV의 파일의 경우, 갱신이 되지 않는다. 매번 새로운 흡연구역이 추가 될 때마다 직접 파일을 수정해주어야한다.
  • 공공데이터포털 api를 사용하는 의미가 없다. ㅋ

그래서 api를 통해 받는 것을 구현해야했다.

생각

공공데이터포털의 api를 호출한 데이터 형식을 보면, currentCount로 받아온 데이터의 크기를 보여주고, data로 흡연구역들에 대해 배열로 제공해주며, 그 안에는 경도, 위도, 설치 위치등 데이터를 제공해준다. 따라서 코드의 순서를 설계해보면

  1. api로 JSON 받아온 후
  2. JSON을 파싱해주고
  3. 필요한 데이터만을 dto로 담아서
  4. entity에 저장해준다 !

코드

어떻게 짜야하나 막막했는데, JSONParser, JSONobject, JSONArray 를 통해서 해결할 수 있었다.

POSTMAN 결과

아직 ApiResponse를 작성해주지 않고 null 만을 return 하도록 해놓았다. status 는 200 이지만, DB를 한번 확인해보자. (4.94초 걸린게 조금 걸리긴하는데, 7살 노트북이라 그런갑다..)


수정) String 은 불변하기 때문에 resultstring 으로 사용하는 것보다 Stringbuffer 로 사용하는 것이 낫다고 생각했다.

profile
누구나 믿을 수 있는 개발자가 되자 !

2개의 댓글

comment-user-thumbnail
2023년 11월 16일

안녕하세요. 게시물 잘 읽었습니다. 저도 postman 으로 api 테스트를 진행중인데 성공은 하는데 왜 DATA는 안 뜰까요?

1개의 답글