본문 바로가기

Android 공부

16. 안드로이드 Retrofit

Retrofit 은 안드로이드에서 http 통신을 편리하게 만들어주는 라이브러리이다. OkHttp 라이브러리를 들어봤다면 뭐가 다른지 헷갈릴 수 있을 것이다. OkHttp 는 java 라이브러리로 이 역시 http 통신을 돕는데, Retrofit 의 베이스가 된다. Retrofit 은 속도, 편의성, 가독성 측면에서 장점을 지니고 있어 통신에 가장 많이 쓰이는 라이브러리라 할 수 있다. 

 


 

Retrofit 을 제대로 구현하기 위해서는 3가지 구성요소를 갖추어야 한다. 

 

1. DTO : Data Transfer Object 모델로 받은 데이터를 가공하고 타입 변환하는데 사용한다. 코틀린에서 data class 파일을 만들어서 선언하여 사용할 수 있다. 미리 통신해서 주고받을 데이터의 틀을 만들어두는 것이라고 생각하면 된다. 
2. Interface : 사용할 동작을 미리 정의해두는 인터페이스이다. 여기서 사용할 동작이란 http method를 포함하며, get, post 등을 어노테이션을 통해 선언하고 인터페이스를 만들어 두는 것이다. 
3. Retrofit.Builder() : 인터페이스를 실제로 사용할 인스턴스로 여기서 base Url이나 Converter을 설정할 수 있다. 

 

글로만 설명하면 이해가 어려우니 코드를 통해서 살펴보겠다. 

 

먼저 Retrofit 객체를 초기화하는 코드이다. 위의 구성요소 중 3번에 해당하는 내용이다. 

 

//retrofit client 선언
object RetrofitClient {
    private var retrofitClient : Retrofit? = null

    fun getClient(baseUrl : String) : Retrofit?{
        val client = OkHttpClient.Builder()
        val loggingInterceptor = HttpLoggingInterceptor(object :HttpLoggingInterceptor.Logger{
            override fun log(message: String) {
                Log.d(TAG, "log: message ${message.toString()}")
            }
        })
        loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY)
        client.addInterceptor(loggingInterceptor)

        if(retrofitClient == null){
            retrofitClient = Retrofit.Builder()
                .baseUrl(baseUrl)
                .client(client.build())
                .addConverterFactory(GsonConverterFactory.create())
                .build()
        }
        return retrofitClient
    }
}

 

위의 코드는 실제로 내가 프로젝트에서 사용하고 있는 코드이다. 

 

  • baseUrl” 에는 통신할 base url 을 넣어준다.
  • client” OkHttp 객체를 이용해서 통신 로그를 찍을 수 있게 한다. setLevel을 통해서 어느 단계까지 로그를 볼 것 인지 설정할 수 있다.
  • addConverterFactory” 에는 Json을 Gson형태로 변환시킬 수 있는 라이브러리인 GsonConverterFactory를 사용할 수 있다. 나는 프로젝트에서 서버와 Json 형태로 데이터를 주고받았기 때문에 converter 를 사용했다.
💡 Gson : java 에서 Json 을 파싱하고 생성하기 위해 사용되는 오픈소스. Java Object 와 Json문자열 간의 변환을 지원.

 

 

서버와 통신하는 Retrofit을 사용하게 되면 서버로 데이터를 보내기도 하지만 서버로부터 response 를 받게 된다. 여기서 response 처리를 하는 방법은 크게 두 가지로 나뉘는데, 하나는 Call 객체를 사용하는 것이고, 하나는 Response 객체를 사용하는 것이다. 

 

Call 을 통해서 처리하면 onResponse, onFailure 메소드를 이용하여 명시적으로 성공, 실패로 나누어 처리하게 된다. 통신에 성공했을 경우 onResponse 안에서, 실패했을 경우 onFailure 안에서 처리하게끔 해준다. 

 

반면 Response 를 이용하면 성공, 실패로 나누어 데이터를 처리하는 것이 아니라 서버로 부터 status code를 받아서 프론트에서 분기해 데이터를 처리할 수 있다. 나는 현재 response 를 사용해서 처리를 하고 있는데 비동기 처리가 많고 데이터 처리를 하는데 있어서 자유도가 더 높다고 생각되어서 response를 통해 처리하는 것을 더 선호한다. (지금까지 개인적으로 공부한 바로는 두 경우 모두 특별히 성능 면에 있어서 장단점은 없는 것 같다.)

 

 

Retrofit에 대해서 다시 공부하고 정리해보았는데, 확실히 사용해보고 정리하니 더 이해가 잘 되는 부분이 있는 것 같다. 아래는 내가 처음 retrofit을 공부하고 정리한 게시물이다. 실제 코드를 많이 첨부해서 가독성은 더 좋아보이지만, 저 당시보다 지금 알고있는 내용이 더 많은 것 같아서 뿌듯하다. 

 

 

 

1. Android Retrofit - POST 이용하기

프로젝트에 대한 전체적인 설명을 이틀 정도 숙지하고 난 후에 약 이틀간 안드로이드에서 REST API로 통신할 수 있는 Retrofit을 공부했다. 방학 동안 잠깐 찍먹했던 경험이 있어서 할만 하겠다는 생

self-motivated-developer.tistory.com

 

2. Android Retrofit - GET 이용하기

새로 시작한 프로젝트의 서버와 통신을 위해 retrofit을 사용했고 로그인 과정에서 post 와 get을 이용해 서버와 통신에 성공했다. post에 관한 자세한 내용은 이전글에 기록되어 있다. 1. Android Retrofit

self-motivated-developer.tistory.com

 

'Android 공부' 카테고리의 다른 글

18. 안드로이드 Intent  (0) 2023.01.31
17. 안드로이드 Room  (0) 2023.01.30
15. REST API 에 대하여  (0) 2023.01.26
14. HTTP 에 대하여  (0) 2023.01.21
13. 안드로이드 범위지정함수 (Scope Functions)  (0) 2023.01.20