Android Studio

API 호출을 위한 Retrofit 클라이언트 설정 - NetworkClient, API, Config

ssury94 2025. 3. 5. 21:28

 

NetworkClient

NetworkClient 클래스는 Retrofit을 활용한 네트워크 통신을 관리하는 역할을 합니다.

주로 API 호출을 위한 Retrofit 클라이언트를 설정하고 제공하는 역할을 합니다.

이 클래스는 네트워크 요청을 처리하기 위한 모든 설정을 한 곳에서 관리할 수 있도록 도와줍니다.

 

NetworkClient 클래스의 주요 역할:

  1. Retrofit 클라이언트 초기화:
    • NetworkClient 클래스는 Retrofit 객체를 생성하여 API 호출에 필요한 클라이언트를 초기화합니다.
    • 한 번 생성된 Retrofit 인스턴스는 싱글톤 패턴으로 관리되어, 여러 네트워크 요청에서 재사용됩니다. 이 방식은 불필요한 객체 생성을 방지하고 성능을 최적화합니다.
  2. 네트워크 통신 설정:
    • OkHttpClient를 사용하여 타임아웃, 인터셉터, 로깅 등 네트워크 관련 설정을 처리합니다. 예를 들어, 요청이 너무 오래 걸리거나 실패하는 경우를 대비하여 타임아웃을 설정하거나, 네트워크 요청과 응답을 로깅하여 디버깅을 돕습니다.
  3. HTTP 요청과 응답 처리:
    • HttpLoggingInterceptor를 활용하여 네트워크 통신 시 로그를 출력합니다. 이를 통해 요청/응답 헤더, 본문 내용, 상태 코드 등을 볼 수 있습니다. 이는 개발 시 디버깅에 유용하며, 배포 전에는 로그 레벨을 NONE으로 설정하여 보안을 강화할 수 있습니다.
  4. API 서비스 객체 생성:
    • Retrofit 객체를 사용하여 API 서비스 인터페이스를 생성합니다. 이 인터페이스는 실제 API 호출을 처리하는 메서드들을 정의한 곳입니다. Retrofit은 이 인터페이스를 구현하여 실제 네트워크 호출을 실행합니다.
  5. 싱글톤 패턴 적용:
    • NetworkClient는 싱글톤 패턴으로 작성되어 Retrofit 객체가 애플리케이션 내에서 한 번만 생성되고, 이후 재사용됩니다. 이렇게 하면 Retrofit 클라이언트를 여러 번 생성할 필요 없이, 성능과 메모리 효율성을 높일 수 있습니다.

 

AndroidManifest.xml에 인터넷 권한 부여

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

 

 

build.gradle.kts Dependencies에 아래 라이브러리 추가

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")

 

NetworkClient 클래스 작성

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);
            //body - 로그를 확인, NONE - 로그를 확인하지 않음 (배포 이후엔 None으로 변경)

            // 네트워크 연결관련 코드
            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(com.marurun66.simplememo.config.Config.DOMAIN)
                    .client(httpClient)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();
        }
        return retrofit;
    }
}

 

 

 

Config

public class Config {
    //api 엔드포인트
    public static final String DOMAIN = "https://block-edu.s3.ap-northeast-2.amazonaws.com";
}

일반적으로 Config 클래스에서 다루는 내용:

API 엔드포인트, API 키, 데이터베이스 설정, 기타 설정 값 - 하드코딩된 값을 관리하는 용도로 사용

 

 

MemoAPI ( 이번 예시에서는 GET으로 메모 정보만 가져옵니다)

import com.marurun66.simplememo.model.MemoResponse;

import retrofit2.Call;
import retrofit2.http.GET;

public interface MemoApi {
    @GET ("/posting.json")
    Call<MemoResponse> getMemoList();
}

 

Retrofit은 인터페이스를 사용하여 HTTP 요청을 정의하고, 네트워크 호출을 생성