본문 바로가기

안드로이드 스튜디오

[안드로이드 스튜디오]Retrofit2 라이브러리 사용을 위한 설정 방법(Gson 컨버터,OkHttp 로깅 인터셉터)

Retrofit이란?

Retrofit은 Square에서 개발한 타입 안전한 HTTP 클라이언트로, REST API와의 상호작용을 단순화해준다. Retrofit을 사용하면 네트워크 요청을 쉽게 만들고 응답을 간단하게 처리할 수 있다. 또한, Gson과 같은 JSON 파서와 쉽게 통합할 수 있어 데이터 모델링도 편리하다.

 

1. Retrofit

implementation("com.squareup.retrofit2:retrofit:2.11.0")

Retrofit은 HTTP 클라이언트 라이브러리로, RESTful 웹 서비스와의 상호작용을 매우 쉽게 만들어준다. Retrofit을 사용하면 간단하게 API 인터페이스를 정의하고 네트워크 요청을 관리할 수 있다.

2. Gson 컨버터

implementation("com.squareup.retrofit2:converter-gson:2.11.0")

Gson은 Google에서 만든 JSON 라이브러리로, JSON 데이터를 Java 객체로 변환하거나 그 반대로 변환할 수 있다. Retrofit과 함께 사용하면 서버로부터 받은 JSON 응답을 쉽게 Java 객체로 변환할 수 있다.

 

3. OkHttp 로깅 인터셉터

implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")

OkHttp는 Retrofit의 기본 HTTP 클라이언트로 사용되며, OkHttp의 로깅 인터셉터는 네트워크 요청과 응답을 로그로 출력해준다. 이는 디버깅 시 매우 유용하며, 네트워크 요청의 내용을 쉽게 확인할 수 있다.

 

시작하기

나는 메모 API를 VSC 코드에서 작성 후 SQL과 연동하여 포스트맨에 실행시켰으며, 이렇게 개발한 메모API 를 이용하여 레트로핏2 를 사용 할 예정이다.  

먼저 메니페스트에 인터넷 권한 설정해준다.

    <uses-permission android:name="android.permission.INTERNET" />

Retrofit을 프로젝트에 추가하려면 먼저 build.gradle 파일에 의존성을 추가한다.

implementation("com.squareup.retrofit2:retrofit:2.11.0")

implementation("com.squareup.retrofit2:converter-gson:2.11.0")

implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")

 

Retrofit 설정

먼저 도메인 사용을 위해 Config 클래스 하나 만들어준다(하드코딩 방지)

api 폴더를 하나 만들어 주고 NetworkClient 자바 클래스 만들어주기

코드 아래와 같이 작성하면 레트로핏 러이브러리 설정 및 코드 작성 끝 

package com.kks.memo.api;

import android.content.Context;

import com.kks.memo.config.Config;

import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class NetworkClient {

    public static Retrofit retrofit;

    public static Retrofit getRetrofitClient(Context context){
        if(retrofit == null){
            // 통신 로그 확인할때 필요한 코드
            HttpLoggingInterceptor loggingInterceptor =
                    new HttpLoggingInterceptor();
            loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

            // 네트워크 연결관련 코드
            OkHttpClient httpClient = new OkHttpClient.Builder()
                    .connectTimeout(1, TimeUnit.MINUTES)
                    .readTimeout(1, TimeUnit.MINUTES)
                    .writeTimeout(1, TimeUnit.MINUTES)
                    .addInterceptor(loggingInterceptor)
                    .build();
            // 네트워크로 데이터를 보내고 받는
            // 레트로핏 라이브러리 관련 코드
            retrofit = new Retrofit.Builder()
                    .baseUrl(Config.DOMAIN)
                    .client(httpClient)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }

}