본문 바로가기

MY어플리케이션

[자작] 전국 캠핑 추천 서비스 - HoHoCamping(호호캠핑)

크롤링의 정수를 맛보았다... 각잡고 만들었던 캠핑추천앱..지도를 곁들인..

 

 

한창 캠핑에 빠져있을때,

항상 좋은 캠핑장을 찾아서, 주말에 떠나는게 가장 큰 낙중에 하나였던때가 있다.

주로 캠핑장을 물색할때는 블로그/카페를 많이 이용했는데,

결국은 추천을 받더라도, 다시 그 캠핑장에 대한 정보를 얻기 위해서 검색의 바다에 허우적거려야 한다는건 정말 피곤한 일이었다.

 

어느날, 무심코 찾아보니,

공공데이터포털에 전국 캠핑장에 대한 정보가 제공되고 있었고,

여러 캠핑장 메타 사이트가 존재해서,

이런 곳에서 캠핑장에 대한 정보를 모두 크롤링해서 거대한 캠핑정보를 만들어내고,

그 정보를 바탕으로 호갱노노와 같이 사용자가 한눈에 볼수있는, 지도기반으로 정보를 잘 보여주면 편하겠다고 생각이 되어,

호호캠핑이라는 앱을 만들게 되었다.

 

만들다보니, 욕심이 생겨서, 커뮤니티기능도 넣었고, 평가 요소도 넣고, 조건검색도 넣고, 일기예보도 넣고, 기능들이 점점 많이 들어가게되었다. ㅜ.ㅜ

 

앱개발에서 특히 신경을 쓴 4가지가 있다.

 

1) 캠핑장 정보를 여러 소스에서 가지고와서 (크롤링, 공공데이터, 기타등등), 하나의 거대한 캠핑정보 디비로 쌓는 작업이다.

2) 거대한 캠핑정보를 매번 디비에서 가져다 쓰게 만들면, 서버는 많은 무리가 갈것이고, 사용자또한 로딩이 오래걸리기에 사용성이 떨어질것이다.

3) 지도에 이런 거대한 정보를 어떻게 잘 보여줘야할것인가?이다.

4) 지도기반은 정적인 표현기준이라, 동적인 표현을 넣고 싶다.

 

 

1번부터 이야기하면, 이경우는 퍼포먼스의 문제로 좁혀졌다.

소스데이터를 수집하는건 그냥 하면 되는 반복작업이라고 볼수있지만,

전국  5천건이 넘는 데이터를 수집하는 프로세스는 멀티스레드로 잘 만들지 않으면, 엄청나게 오래 걸리는,

퍼포먼스가 안나는 작업이 되버린다.

이것은 코루틴, 스레드풀을 사용하여, 비동기로 수집하여 합치고, 디비에 저장하고 하는 방식으로 퍼포먼스를 올리는 방법으로 개발을 하였다. 

 

2) 거대한 이 정보데이터를 앱이 서버로 부터 데이터를 가져오게 만들면, 로딩이 많이 걸렸다. 따라서, 해당 정보데이터 파일로 미리 만들어두고, 해당 파일을 앱에서는 초기 설치/로딩시에 다운로드하게 만들고, 해당 데이터를 앱로컬내부에서 사용을 하게 만들었다. 웹앱이였기때문에, 네이티브앱에서, 해당 데이터를 Json데이터를 로드해서, webview javascript bridge로 연결하여, webview쪽으로 데이터를 주입하여, 바로 사용가능하게 만들었다.

 

3) 5천개가 넘는 데이터를 지도에 어떻게 표현하는가?라는 문제는, 지도의 확대률에 따라, Marker의 레벨을 다르게 해서 보여주는 방식을 택했다. 지도가 축소된 상태라면, '도' 기준으로 어그리게이션 하여 마커들을 보여주었고, 지도가 좀더 확대가 되면, '시'기준으로, 더 확대가 된다면, '군,구'기준으로 마커를 보여주었고, 더 확대가 되면, 그때 마커는 캠핑장 마커들을 해당 지도에 보여주게 만들었다.

사용자는 내가 원하는 지역으로 드레그하고 확대를 하면서 캠핑장의 정보를 바로 얻을수있는 UI를 경험하게 된다.

 

4) 지도위에 단순 마커로 캠핑장을 표현하는건, 재미가 없다. 너무 정적이라고 해야하나...그래서 지도상에서, 현재 해당 지역, 해당 캠핑장을 같이 보고있는 사용자들의 수를 표시하도록 만들었다. (지금 x명 보는중) 

이부분은 웹소켓을 이용해 지도의 같은 좌표, 같은 캠핑장을 보는 경우를 집계하여, 보여주도록 기능을 만들었다.

 

 

01234