Open api 도입기

Jung Yunho
4 min readNov 24, 2023

--

어쩌다?

주제를 선정하던 중 서울시에서 진행하는 문화행사 정보를 모아둔 api가 있는 것을 팀원분이 찾아오셨다. 데이터를 미리 확보해 활용을 할 수 있는 장점이있어 해당 프로젝트 주제를 선정하게 되었다.

그래서?

서울시 열린데이터 광장의 Open api는 이용방법이 잘 설명되어 있다.
이용방법에 나와있는 것 처럼 진행을 하면 되었는데 한가지 걸리는 문장이 있었다.

오픈 API를 통해서 한번에 최대 1,000건을 요청할 수 있습니다.

요청을 통해서 최대 1000건 밖에 요청을 못받는 것이다!!
혹시나 하는 마음에 요청을 보내봤으나 당연하게도 데이터는 반환 받는 총 데이터는 1000건이 넘었다.

코드

데이터 받아오기

Open api에서 list_total_count 를 반환 받기 위하여 하나의 데이터만 요청을 보내 값을 가져왔다.

위의 요청을 통해 받아온 list_total_count를 활용하여 1000개씩 데이터를 반환하도록 코드를 구성을 하였고

데이터를 받아오게 구성을 하였다.

반복은?

@Scheduled을 사용하여 위의 요청을 자동으로 받아오게 하였다.

@Scheduled(fixedDelay = 1000 * 60 * 60 * 24, initialDelay = 3000) 

Ver — 2

save -> saveAll

기존에는 데이터를 받아오면 colume 하나마다 save메서드를 사용하여 추가를 하였다.

save와 saveAll 메서드는 성능차이가 크게 존재한다는 것을 알게 되었고 변경을 하였다.

(인터넷에 자료가 많고 프로젝트 회고록이니 관련 내용은 담지 않겠다.
성능차이를 검색해 보는것을 추천한다)

위와 같이 구성을 해 개선을 하였다.

287ms -> 260ms 로 미비하게 개선이 되었지만
데이터의 규모가 커질수록 성능은 크게 개선이 될 것이다.

추가되는 데이터

data.seoul.go.kr 에서는 오전 9시에 업데이트 되는 데이터가 있으면 추가가 된다고 하였다.
새로 업데이트 되는 값을 DB에 추가하기 위하여 업데이트된 내용만 받아 올 수 있는지 조사를 하였으나 Open api측에서는 해당 기능이 없다.
따라서 Service로직에서 해결을 해야겠다 생각을 하였다.

설계 방향이다

  • 반환되는 값 중 고유한 값이 title(행사 제목)이다.
  • findByTitle메서드를 활용해 반환되는 개수가 0 이면 값을 save한다.

위와 같은 코드를 추가해 @Scheduled 어노테이션을 활용해 24시간 마다 돌리도록 하였다.

saveAll을 @PostConstruct 로

기존에 초기 데이터를 저장하는 로직은 서버가 실행시 한번만 추가를 하면 된다.

따라서 Bean주입과 의존성 주입이 완료 된 후 실행되는 @PostConstruct를 활용해 saveAll을 하도록 변경하였다.

--

--