Retrofit에서 Interceptor와 Converter란

Interceptor

Http의 요청과 응답 처리 중간에 개입하여 요청 또는 응답을 수정하거나 로깅하는데 사용된다.
대표적으로 요청에 헤더를 추가하거나, 응답을 로깅하거나, 인증토큰을 추가하는 데 사용된다.

사용방법

addInterceptor() 메서드를 사용하여 객체를 추가해야 한다.
예를 들어 헤더를 추가하는 작업을 진행한다면, 다음과정을 따른다.

  1. Interceptor 작성 및 적용
  2. OkHttpClient를 생성하고 Interceptor를 추가
  3. RetrofitOkHttpClient를 설정한다.
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

// Interceptor를 생성합니다.
val interceptor = Interceptor { chain ->
    val originalRequest = chain.request()
    // 여기에서 원하는 작업을 수행합니다.
    // 예: 헤더 추가, 요청 수정, 로깅 등
    val modifiedRequest = originalRequest.newBuilder()
        .header("Authorization", "Bearer token123")
        .build()

    // 수정된 요청을 다음 단계로 전달합니다.
    chain.proceed(modifiedRequest)
}

// OkHttpClient를 만들고 Interceptor를 추가합니다.
val client = OkHttpClient.Builder()
    .addInterceptor(interceptor)
    .build()

// Retrofit 빌더를 설정합니다.
val retrofit = Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .client(client) // 위에서 생성한 OkHttpClient를 설정합니다.
    .addConverterFactory(GsonConverterFactory.create()) // Converter 설정
    .build()

Converter

Http 통신에서 발생하는 데이터의 변환을 담당한다.
응답받은 데이터를 Java/ Kotlin 객체로 변환하거나, 반대로 Java/Kotlin 객체를 서버로 보내는 요청 데이터로 변환하는 작업을한다.

매핑 - 변환 처리하는 과정

대표적으로 Json, XML이 있다. Json 데이터를 Java나 Kotlin 객체로 변환하는 데 가장 많이 사용된다.

Convertor를 설정하기 위해서는 addConverterFactory()메서드를 사용한다.
예를들어 Gson 라이브러리를 사용해서 Json 데이터를 자바 객체로 변환하는 경우에는

val retrofit = Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(GsonConverterFactory.create()) // Gson을 사용한 JSON 변환
    .build()

다음과 같이 작성한다.

[요약]
Interceptor : HTTP 요청 및 응답을 가로채 응답을 로깅하거나, 헤더를 추가하는데 사용된다.
Converter : HTTP 통신에서 데이터 형식간의 매핑과 변환을 처리