Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

갑을병정이야기

Retrofit을 이용한 REST API 활용 방법

Billcorea 2024. 12. 4. 15:33
반응형

Retrofit을 이용한 REST API 활용 방법

주변기기 통신 형상화 feat AI

개요

Retrofit은 Android 및 Java 애플리케이션에서 REST API를 호출하기 위해 널리 사용되는 타입 안전 HTTP 클라이언트입니다. 이 글에서는 Retrofit을 이용하여 REST API를 호출하는 방법과 함께 발생할 수 있는 오류 상황과 해결 방법을 소개합니다.

1. 의존성 추가

프로젝트에 Retrofit과 OkHttp를 포함시키기 위해 build.gradle 파일에 다음과 같은 종속성을 추가합니다.

groovy
dependencies {
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    implementation 'com.squareup.okhttp3:okhttp:4.9.0'
}

2. API 인터페이스 정의

API 엔드포인트를 정의합니다. 예를 들어, 사용자 정보를 쿼리 파라미터로 전달하여 요청하는 경우를 보여드립니다.

java
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;

public interface ApiService {
    @GET("users")
    Call<UserResponse> getUser(@Query("id") int userId);
}

3. 데이터 모델 정의

API 응답을 매핑할 데이터 모델 클래스를 정의합니다.

java
public class UserResponse {
    private int id;
    private String name;
    private String email;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

4. Retrofit 인스턴스 생성

OkHttp 클라이언트를 설정하고, Retrofit에 통합합니다.

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

public class RetrofitClient {

    private static final String BASE_URL = "https://api.example.com/";
    private static Retrofit retrofit;

    public static Retrofit getRetrofitInstance() {
        if (retrofit == null) {
            // HttpLoggingInterceptor 설정 (옵션)
            HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
            logging.setLevel(HttpLoggingInterceptor.Level.BODY);

            // OkHttpClient 설정
            OkHttpClient okHttpClient = new OkHttpClient.Builder()
                    .addInterceptor(logging) // 로깅 인터셉터 추가
                    .build();

            // Retrofit 인스턴스 생성
            retrofit = new Retrofit.Builder()
                    .baseUrl(BASE_URL)
                    .client(okHttpClient) // 커스텀 OkHttpClient 설정
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }

    public static ApiService getApiService() {
        return getRetrofitInstance().create(ApiService.class);
    }
}

5. API 호출 및 응답 처리

API를 호출하고 응답을 처리하는 코드를 작성합니다.

java
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class Main {
    public static void main(String[] args) {
        ApiService apiService = RetrofitClient.getApiService();
        Call<UserResponse> call = apiService.getUser(1);

        call.enqueue(new Callback<UserResponse>() {
            @Override
            public void onResponse(Call<UserResponse> call, Response<UserResponse> response) {
                if (response.isSuccessful()) {
                    UserResponse user = response.body();
                    System.out.println("ID: " + user.getId());
                    System.out.println("Name: " + user.getName());
                    System.out.println("Email: " + user.getEmail());
                } else {
                    System.err.println("Request failed. Code: " + response.code());
                }
            }

            @Override
            public void onFailure(Call<UserResponse> call, Throwable t) {
                t.printStackTrace();
            }
        });
    }
}

오류 상황과 해결 방법

  1. NoClassDefFoundError: com/google/gson/Gson
    gradle
    implementation 'com.google.code.gson:gson:2.8.7'
    
  2. 이 오류는 Gson 라이브러리가 프로젝트에 포함되지 않았을 때 발생합니다. Gradle 파일에 다음과 같이 Gson 종속성을 추가하여 해결할 수 있습니다.
  3. NoClassDefFoundError: okio/Sink
    gradle
    implementation 'com.squareup.okio:okio:2.10.0'
    
  4. 이 오류는 Okio 라이브러리가 프로젝트에 포함되지 않았을 때 발생합니다. Gradle 파일에 다음과 같이 Okio 종속성을 추가하여 해결할 수 있습니다.
  5. Request failed. Code: 404
  6. 이 오류는 요청한 리소스를 찾을 수 없을 때 발생합니다. API 엔드포인트와 쿼리 파라미터가 올바른지 확인하십시오.

결론

Retrofit과 OkHttp를 사용하여 REST API를 호출하는 방법과 함께, 발생할 수 있는 일반적인 오류와 그 해결 방법을 소개했습니다. 이 글이 Retrofit을 활용하는 데 도움이 되길 바랍니다.

반응형