OkHttpClient 타임아웃 설정 방법

네트워크 요청 타임아웃 관리

Android 애플리케이션에서 네트워크 통신 시 타임아웃 설정은 사용자 경험과 시스템 안정성을 위해 필수적입니다. OkHttp 라이브러리를 활용한 효과적인 타임아웃 구성 방법을 설명합니다.

구현 절차

  1. OkHttp 종속성 추가
  2. OkHttpClient 인스턴스 생성
  3. 타임아웃 값 구성
  4. 네트워크 요청 실행
  5. 응답 및 오류 처리

상세 구현 방법

1. Gradle 종속성 설정

// 모듈 수준 build.gradle
dependencies {
    implementation 'com.squareup.okhttp3:okhttp:4.12.0'
}

2. 클라이언트 인스턴스 초기화

import okhttp3.OkHttpClient;

OkHttpClient networkClient = new OkHttpClient();

3. 타임아웃 파라미터 설정

import java.util.concurrent.TimeUnit;

OkHttpClient configuredClient = new OkHttpClient.Builder()
    .connectionTimeout(25, TimeUnit.SECONDS)  // 서버 연결 제한 시간
    .socketTimeout(35, TimeUnit.SECONDS)      // 데이터 수신 대기 시간
    .callTimeout(60, TimeUnit.SECONDS)        // 전체 요청 처리 시간
    .build();

4. 비동기 요청 실행

import okhttp3.Request;
import okhttp3.Callback;

Request apiRequest = new Request.Builder()
    .url("https://api.example.com/data")
    .get()
    .build();

configuredClient.newCall(apiRequest).enqueue(new Callback() {
    @Override
    public void onFailure(okhttp3.Call currentCall, IOException error) {
        error.printStackTrace();
    }

    @Override
    public void onResponse(okhttp3.Call currentCall, okhttp3.Response serverResponse) {
        try (ResponseBody responseBody = serverResponse.body()) {
            if (serverResponse.isSuccessful()) {
                String result = responseBody.string();
                Log.d("NETWORK", "수신 데이터: " + result);
            }
        }
    }
});

5. 오류 처리 패턴

onFailure() 콜백에서는 다음과 같은 예외 처리를 권장합니다:

public void onFailure(Call call, IOException e) {
    if (e instanceof SocketTimeoutException) {
        Log.w("TIMEOUT", "서버 응답 시간 초과");
    } else if (e instanceof ConnectException) {
        Log.e("CONNECTION", "네트워크 연결 실패");
    }
}

권장 타임아웃 값

설정 항목기본값(초)권장값(초)
연결 타임아웃1015-30
소켓 타임아웃1020-40
전체 요청 타임아웃0(무제한)30-60

태그: OkHttp Android 네트워킹 타임아웃 HTTP클라이언트

7월 29일 11:08에 게시됨