조각들

 

Glide란?

 

Glide는 Android용 오픈소스 이미지 로딩 라이브러리로, 다음과 같은 특징이 있다.

  • 비디오 스틸, 이미지, 애니메이션 GIF 등 다양한 미디어를 로드하고 디스플레이 가능
  • 기본적으로 커스텀된 HttpUrlConnection 사용하지만, OkHttp와의 연동도 지원
  • 이미지 리스트 스크롤이 부드럽게 작동하도록 최적화되어 있음

Glide의 이미지 처리 최적화 전략

 

1. 이미지 디코딩

이미지 디코딩이란?
이미지 파일(JPEG, PNG 등)을 앱에서 사용할 수 있는 형태인 Bitmap 객체로 변환하는 과정을 말합니다.
디코딩 속도는 앱의 반응성과 직결되기 때문에 매우 중요합니다.

 

2. 자동 다운 샘플링

자동 다운 샘플링이란?

Glide는 원본 이미지가 너무 클 경우, 화면에 필요한 해상도에 맞춰 이미지를 자동으로 축소합니다.
이를 통해 디코딩 시간을 줄이고, 메모리 사용량도 최소화할 수 있습니다.

 

3. 스토리지 오버헤드

스토리지 오버헤드란?
스토리지 오버헤드는 이미지를 디코딩하거나 캐시하는 과정에서, 실제 이미지 데이터 외에 추가로 발생하는 저장 공간 사용을 의미합니다. Glide는 디스크 및 메모리 캐시 전략을 통해 동일한 이미지를 재사용하여 네트워크 요청을 줄이고, 디스크와 메모리 사용량을 최적화합니다.

 

4. 리소스 재사용

Glide는 Bitmap이나 ByteArray 같은 객체를 재활용해 GC(Garbage Collection) 발생을 최소화합니다.
또한, 힙 메모리의 파편화를 줄여 메모리 누수를 방지합니다.

 


생명주기 통합

Glide는 프래그먼트나 액티비티가 활성 상태일 때만 이미지 로딩을 유지합니다.
앱이 백그라운드로 전환되면 이미지 로딩을 자동으로 중단하거나 리소스를 해제하여 불필요한 리소스 낭비를 방지합니다.

쉽게 말해, 화면이 보이지 않는 상황에서는 Glide가 자동으로 이미지 로딩을 멈춰줍니다.

 


Glide 의존성 설정

Gradle에서 Glide를 사용하려면 다음을 설정해야 합니다:

  • Maven Central / JCenter 사용

Maven Central이란?
오픈소스 Java 라이브러리들을 호스팅하는 공식 저장소

JCenter란?
Bintray에서 제공하던 저장소로, Glide와 같은 Android 라이브러리도 많이 포함. (2021년에 서비스 종료됨)

 


Glide 권한 설정

  1. 인터넷에서 이미지 불러오기
    • INTERNET
    • ACCESS_NETWORK_STATE (선택)

ACCESS_NETWORK_STATE는 필수는 아니지만, Glide가 네트워크 상태에 따라 요청을 재시도할 수 있게 해줍니다.

 

adb shell setprop log.tag.ConnectivityMonitor DEBUG

 

 

위 명령어로 Glide의 네트워크 모니터링 로그를 확인할 수 있음.

  1. 로컬 폴더에서 이미지 불러오기
    • READ_EXTERNAL_STORAGE
  2. 캐시를 외부 저장소에 저장하려면
    • WRITE_EXTERNAL_STORAGE
      → Glide 캐시 디렉토리를 SD카드 같은 외부 공간에 저장할 경우 필요

Glide Proguard 설정

다음 규칙들을 proguard-rules.pro에 추가해야 합니다.

-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public class * extends com.bumptech.glide.module.AppGlideModule
-keep public enum com.bumptech.glide.load.ImageHeaderParser$** { **[] $VALUES; public *; }

 


DexGuard란?

DexGuard란?
Proguard의 상용 버전으로, 안드로이드 앱 보안, 난독화, 암호화 기능이 강화된 도구입니다.
기업용 앱에서 민감한 정보를 보호하고 리버스 엔지니어링을 방지할 때 사용됩니다.

 

만약 덱스가드를 사용한다면 다음 내용을 포함해야 합니다.

# for DexGuard only -keepresourcexmlelements manifest/application/meta-data@value=GlideModule