공공 데이터 포털에서 흡연장 위치에 대한 데이터를 가지는 api를 가져와서, 흡연장 위치 등을 제공하는 manner smoker 프로젝트의 백엔드 프로젝트를 진행하게 되었다.
처음 스프링 프로젝트였던 티끌 모아 태산, 티모태 프로젝트를 거의 마무리하였지만, 아직도 부족한게 많다고 느껴졌고,
팀원은 티모태 다음 프로젝트인 이 프로젝트의 이름을 더 모으자 티끌
로 정하게 되었다.
처음 홈페이지에 들어가서 위의 검색창에 흡연장을 검색하여 api를 찾았다.
수원에 거주 중이기에 수원의 흡연장 api를 이용하고 싶었는데, 데이터가 단 하나뿐이였다..
그래서 일단은 서울 용산구의 api를 이용하기로 했다.
들어가서 오픈 API
-> 활용신청
에 들어가서 항목에 맞게 활용 신청을 해서, 권한(인증키)을 얻게 되었다. 활용 신청은 신청 후 어느정도 걸리는지 볼 수 있는데, 용산구 흡연구역의 경우 바로 사용이 가능했다.
이후 마이페이지 > 신청 승인된 api를 들어가면
이와 같이 인증키가 받아진 것을 확인할 수 있다.
밑으로 스크롤하면 이와같은 화면을 확인할 수 있는데, Open Api 명세 확인 가이드
를 보고 따라하면 웹사이트상에서 데이터들을 확인해 볼 수 있다.
위는 헤더방식, 아래는 쿼리방식이다. 인증키를 알맞게 넣어준 후 필요한 파라미터를 입력해주고 호출을 해주면
이와 같이 request URL, 성공여부, 데이터 등을 확인할 수 있다.
request URL 을 포스트맨에서 실행해보면 역시 동일한 결과를 받을 수 있다.
더모티는 User 별 흡연구역에 대한 즐겨찾기 여부 제공, 위치 데이터(위도, 경도), 검색 기능 등을 제공해야했다.
하지만 매번 검색할 때마다 공공데이터포털 api를 호출 하면, 공공 데이터포털의 api 트래픽 제한, 어플 기능 저하 등 문제가 생길 수 있다고 생각했다.
따라서 DB에 api를 받아와서 저장 후 기능을 제공해야겠다고 생각했다.
처음엔 db에 저장하는 것이기에 그냥 CSV 파일을 저장해서 사용할까도 생각했지만, 다음과 같은 문제가 있다.
그래서 api를 통해 받는 것을 구현해야했다.
공공데이터포털의 api를 호출한 데이터 형식을 보면, currentCount
로 받아온 데이터의 크기를 보여주고, data
로 흡연구역들에 대해 배열로 제공해주며, 그 안에는 경도, 위도, 설치 위치등 데이터를 제공해준다. 따라서 코드의 순서를 설계해보면
어떻게 짜야하나 막막했는데, JSONParser
, JSONobject
, JSONArray
를 통해서 해결할 수 있었다.
POSTMAN 결과
아직 ApiResponse를 작성해주지 않고 null 만을 return 하도록 해놓았다. status 는 200 이지만, DB를 한번 확인해보자. (4.94초 걸린게 조금 걸리긴하는데, 7살 노트북이라 그런갑다..)
수정) String
은 불변하기 때문에 result
를 string
으로 사용하는 것보다 Stringbuffer
로 사용하는 것이 낫다고 생각했다.
안녕하세요. 게시물 잘 읽었습니다. 저도 postman 으로 api 테스트를 진행중인데 성공은 하는데 왜 DATA는 안 뜰까요?