본문 바로가기
모바일앱 프로젝트

Retrofit 라이브러리에서 timeout 세팅하기

by Nicole 2021. 3. 22.

진행 중인 프로젝트에서 문제가 있는 코드가 있었다.

내 기록용 포스팅이기 때문에 간단한 설명을 적자면,

안드로이드 -> 서버로 이미지 전송을 하고, 이미지 처리를 하는 과정에서

딥러닝 모델로 처리를 하는데, 이미지 처리 시간이 길었다.

그래서 이미지가 처리되고 안드로이드로 response를 보냈을 때,

이미 안드로이드 client 측에서는 connection error로 인식을 하는 오류가 있었다.

그래서 retrofit 으로 timeout 조건을 추가해주려고 한다.

 

이 부분은

1) 이미지 처리가 완료되기 전 해당 계정으로 이미지를 또 보내면,

현재 구현 상에서 기존의 데이터가 제대로 삭제되지 않는 문제를 해결하기 위해서도 필요하고,

 

2) 이미지 처리가 완료되기 전에 DB 데이터를 조회해서 아직 처리되지 않은 이미지를 참조하는 문제를 해결하기 위해서도 필요하다.

 

 

기존 Retrofit object를 생성해서 서버로 보내는 과정 이전에 okhttp3 로 timeout을 setting해줬다.

	// timeout setting 해주기
        OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
                .connectTimeout(30, TimeUnit.SECONDS)
                .readTimeout(30, TimeUnit.SECONDS)
                .writeTimeout(30, TimeUnit.SECONDS)
                .build();

        // Retrofit 객체를 생성하고 이 객체를 이용해서, API service 를 create 해준다.
        Retrofit.Builder builder = new Retrofit.Builder()
                .baseUrl("https://your_server_ip_address")
                .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create());
        Retrofit retrofit = builder.build();

Retrofit이 dependency에 추가돼있어야 한다.

implementation 'com.squareup.retrofit2:retrofit:2.6.1'
implementation 'com.squareup.retrofit2:converter-gson:2.6.1'

 

결과적으로 기존의 timeout 시간 때문에 connection error가 발생하는 오류가 없어졌다.

 

 

REFERENCE

1. okhttp3 라이브러리를 사용해서 timeout 시간을 지정해주고, okhttp 객체를 retrofit build 과정에 포함해준다.

stackoverflow.com/questions/29380844/how-to-set-timeout-in-retrofit-library

 

How to set timeout in Retrofit library?

I am using Retrofit library in my app, and I'd like to set a timeout of 60 seconds. Does Retrofit have some way to do this? I set Retrofit this way: RestAdapter restAdapter = new RestAdapter.Bui...

stackoverflow.com

 

 

 

댓글