심심한잉여의 잡동사니

세미프로젝트 - 전기차 충전소 API 정보 불러오기 본문

코딩일기/세미프로젝트

세미프로젝트 - 전기차 충전소 API 정보 불러오기

심심한잉여 2021. 12. 7. 10:41
반응형

세미프로젝트로 전기차 충전소를 알려주는 웹페이지를 만들기로 했다. 하지만
충전소만 알려주는거는 파워풀하지 못하다는 의견이 많아
커뮤니티 기능과 전기차 정보, 뉴스를 알려주는 플랫폼으로 변경하기로 했다. 

JDBC를 활용하여 전기차 충전소를 표현하는 지도를 만들기로 했다.

공공데이터 API를 활용하여 전기차 정보를 받은 테이블은 아래와 같고
필요한 정보는 빨간 동그라미로 표시했다.

이 정보는 충전기마다 ID가 따로 있고 STAT정보도 따로 있기 때문에 한번의 정보 가공이 필요할 것으로 보인다.

위 테이블을 아래의 SQL로 묶어 STAT에 맞춰 갯수를 가져오기로 했다.

STAT값이 2인 경우 사용이 가능한 대기중인 충전기라는 뜻이므로 전체 갯수에서 STAT값이 2인 충전기가 몇개인지의 정보가 필요하기 때문이다.

해당 SQL로 뽑은 테이블은 아래와 같다.

그룹으로 중복값을 최대한 제외했더니 13000개에 육박하는 테이블 갯수가 3000개 정도로 줄었다.

현재 가져오는 방식은

를 통해 ID값을 받고 
해당 ID에 해당하는 값을 JDBC를 통해 다시 받아오는 형식으로 진행을 했다.

위와 같은 코드로 작성했으며 stat별로 맵으로 따로 받아 병합하여 관리를 용이하게 했다.

그리고 중복해서 map에 공통정보가 넘어가지 않도록 하였으며
좌표에 따라 현 위치에서 얼만큼의 직선거리가 발생되는지 또한 계산하여 map에 등록하였다.

이렇게 다시 map으로 만들고 List를 만드는 방법으로 진행했으나
문제가 발생했다.
JDBC를 통해 서버를 오가는 행위가 많다는 것이다.
이에 대한 성능을 극복할 방법이 무엇이 있는가 생각해봤다.

생각해봤을 때 나온 결론은 몇가지가 있었으나 시도해볼만한 것은

1. static으로 테이블을 전부 가지고 MAP으로 만들어둔다.
2. JDBC를 통해 필요한 id만 가져와서  해당 MAP에 key값을 입력하여 사용한다.
라는 결론이다.

바로 실행해보자.

해당 메서드를 통해 JDBC로 필요한 정보가 담긴 TABLE을 전부 가져온다.
이 테이블을 MAP에 담아두고 id값이 입력 될 때 꺼내기 용이한 KEY값으로 입력한다.

그리고 서비스 클래스에서 해당 MAP을 다시 하나의 MAP으로 병합할 수 있도록 메서드를 등록한다.

해당 메서드를 통해 하나의 MAP으로 가공한 뒤 사용하는것으로 바꿨다.
아직 더 업그레이드가 가능할 것 같으나 다른 기능도 손봐야해서 일단 이정도로 만족하기로 했다.

기존에 정보를 가져와 지도에 마커찍고 리스트로 출력하는 시간이 5초정도 걸렸었으나 2~3초정도로 줄었다는 걸 확인했다.
정보를 가져오는데는 시간이 많이 단축되어 거의 바로 가져와지지만 마커찍고 리스트로 출력하는 곳에 시간이 좀 걸린다. 이는 내 컴퓨터 문제일수도 있으니 좀 더 확인해보자.

세미프로젝트지만 아직 배울게 많다는 것을 새삼스레 다시한번 되새기는 계기가 된 것 같다.

반응형