스마트택배는 왜 Glide를 사용하는가
모바일 팀의 SH입니다.
원래는 스마트택배에서 RxJava와 Retrofit을 사용하여 api 호출 뎁스 줄이기 라는 주제로 포스팅을 올리려고 했으나, 아직 준비가 덜 되어서 스마트택배에서는 왜 glide를 사용하는가 라는 주제로 포스팅을 합니다.
기존에 지금처럼 기가막힌 이미지 로딩 라이브러리가 없던 시절에는 Android API만으로 이러한 부분을 구현해야 했습니다.
먼저 BitmapFactory를 사용하여 bitmap을 디코딩 해야하구요. 그러다 out of memory도 몇 번 경험하구요.ㅎㅎ
그리고 여러 개의 이미지를 동시에 불러올 때 병렬처리에 있어서도 문제점이 많았을 것입니다.
그리고 LRU 알고리즘으로 캐시 관리도 해야하구요.
머릿속으로는 어떻게 구현해야 할지는 알고 있습니다.
“http로 땡겨와서 디스크 캐시에 저장하고 bitmap 디코딩 후엔 메모리 캐시에 저장하고 화면상에 뿅하고 보여줘야지.”
“맨 처음에 메모리 캐시를 뒤져서 있는지 확인하고 없으면 디스크 캐시를 뒤지고, 없으면 http로 땡겨와서 위의 루틴대로 흘러가게끔 해주면 개꿀 ㅎㅎ “
근데 인생은 실전이므로 실제로 구현할때마다 참 어려움을 겪곤 합니다.
그래서 스마트택배에서는 Glide 라는 이미지 로딩 라이브러리를 사용합니다.^^
https://github.com/bumptech/glide
사용법은 참 간단합니다.
Glide.with(this).load(url).into(imageView);
위와 같이 Builder 패턴으로 이미지뷰에 꽂아넣으면 끝납니다.
사용법이 간단하기 때문에 스마트택배에 적용해서 사용하진 않았습니다.
스마트택배는 항상 많은 데이터를 보여주기때문에 RecyclerView를 기본으로 사용하고 있습니다.
그렇기때문에 한번에 로딩 되어야하는 이미지의 수도 많겠죠.
쇼핑몰에서 불러오기라는 기능에서 유입되는 상품수와 문자, 카톡으로 들어오는 송장번호들까지 포함하면 정말 많은 데이터가 한번에 유입되고 보여지게끔 됩니다.
한번에 유입된 리스트에서 사용자가 스크롤을 훽훽해도 이미지가 휙휙 떠야 합니다.
즉, 디스크 캐시와 메모리 캐시에서 읽어오는 속도가 빨라야 합니다.
또한 반복 스크롤시에도 속도가 빠르고 안정성이 보장이 되어야 합니다.
이러한 부분들이 전부 보장되는 라이브러리가 바로 glide 였습니다.
아래 표는 여러개의 라이브러리들의 성능 비교를 해놓은 표입니다. (출처 : http://dev2.prompt.co.kr/31 )
사실 제가 스윗트래커 합류하기 전부터 스마트택배에서는 이 라이브러리를 사용하고 있었는데요.
아마도 위와 같은 이유로 사용하고 있다고 믿고있습니다. 아님말구….
그럼 이만.