반응형
이전 글에서는 네트워크 계층 단위 테스트 & 통합 테스트 전략을 다뤘습니다. 이번 글에서는 실제 서비스 운영 단계에서 중요한 네트워크 최적화 기법에 대해 정리합니다. 앱의 성능과 사용자 경험을 크게 좌우하는 핵심 포인트는 캐싱, 연결 관리, 성능 개선입니다.
1. 캐싱(Cache) 전략
네트워크 호출을 최소화하고 성능을 높이는 대표적인 방법이 캐싱입니다.
OkHttp는 자체적으로 Cache 기능을 지원하며, API 응답을 로컬에 저장해 네트워크 비용을 줄일 수 있습니다.
// OkHttp 캐시 설정
val cacheSize = 10L * 1024 * 1024 // 10MB
val cache = Cache(context.cacheDir, cacheSize)
val client = OkHttpClient.Builder()
.cache(cache)
.build()
캐싱 장점
- 네트워크 트래픽 절감
- API 서버 부하 감소
- 사용자 체감 속도 향상
2. 연결 관리(Connection Management)
모바일 환경에서는 네트워크 연결 상태가 불안정할 수 있습니다. OkHttp는 기본적으로 Connection Pool과 Keep-Alive를 지원하여 성능을 높입니다.
- Connection Pool: 여러 요청이 같은 서버로 향할 경우, TCP 연결을 재사용
- Timeout 설정: 연결 지연에 대비해
connectTimeout,readTimeout,writeTimeout을 적절히 설정 - RetryOnConnectionFailure: 일시적 연결 실패 시 자동 재시도
val client = OkHttpClient.Builder()
.retryOnConnectionFailure(true)
.connectTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.build()
3. 성능 개선 기법
네트워크 성능 최적화를 위해 추가적으로 고려할 수 있는 방법들입니다.
- 압축(Compression): 서버-클라이언트 간 데이터를 Gzip 압축
- HTTP/2: OkHttp는 HTTP/2를 기본 지원, 멀티플렉싱으로 성능 향상
- 이미지 최적화: Glide/Picasso 등 이미지 라이브러리 활용 시, CDN + 캐싱 전략 병행
- 데이터 최소화: 필요 없는 필드/대용량 JSON 전송 지양
4. 오프라인 모드 지원
사용자가 오프라인일 때도 앱이 정상적으로 동작하도록 캐싱 데이터를 활용할 수 있습니다. Retrofit + OkHttp에서 Cache-Control 헤더를 설정하면, 네트워크가 없을 때 캐시를 불러올 수 있습니다.
val offlineInterceptor = Interceptor { chain ->
var request = chain.request()
if (!hasNetwork()) {
request = request.newBuilder()
.header("Cache-Control", "public, only-if-cached, max-stale=2419200")
.build()
}
chain.proceed(request)
}
5. 네트워크 모니터링
성능 최적화 후에는 실시간 모니터링도 필요합니다. Firebase Performance, NewRelic, Datadog 같은 툴을 활용하면 API 응답 속도, 실패율 등을 추적할 수 있습니다.
6. 정리
- 캐싱을 활용해 불필요한 네트워크 호출을 줄인다.
- 연결 관리(Timeout, Connection Pool)로 안정성을 확보한다.
- 압축, HTTP/2, 이미지 최적화 등으로 성능을 개선한다.
- 오프라인 모드 지원은 사용자 경험을 크게 높여준다.
- 모니터링 툴을 활용해 지속적으로 성능을 체크한다.
마무리: 네트워크 최적화는 앱의 품질과 사용자 만족도를 좌우합니다. 다음 글에서는 실제 서비스 운영 시 네트워크 보안 (HTTPS, 인증, 토큰 관리)에 대해 다뤄보겠습니다.
반응형
'개발일기' 카테고리의 다른 글
| 안드로이드 에러 처리 및 UI 피드백 전략 (2) | 2025.09.10 |
|---|---|
| Jetpack Compose와 네트워크 계층 연결하기 (2) | 2025.09.09 |
| 네트워크 계층 단위 테스트 & 통합 테스트 전략 (2) | 2025.09.04 |
| Jetpack Compose와 네트워크 계층 연결 (상태 관리 & UI 반영) (2) | 2025.09.03 |
| OkHttp Interceptor를 활용한 공통 에러 처리 & 로깅 전략 (4) | 2025.09.02 |