Android Studio
API 호출을 위한 Retrofit 클라이언트 설정 - NetworkClient, API, Config
ssury94
2025. 3. 5. 21:28
NetworkClient
NetworkClient 클래스는 Retrofit을 활용한 네트워크 통신을 관리하는 역할을 합니다.
주로 API 호출을 위한 Retrofit 클라이언트를 설정하고 제공하는 역할을 합니다.
이 클래스는 네트워크 요청을 처리하기 위한 모든 설정을 한 곳에서 관리할 수 있도록 도와줍니다.
NetworkClient 클래스의 주요 역할:
- Retrofit 클라이언트 초기화:
- NetworkClient 클래스는 Retrofit 객체를 생성하여 API 호출에 필요한 클라이언트를 초기화합니다.
- 한 번 생성된 Retrofit 인스턴스는 싱글톤 패턴으로 관리되어, 여러 네트워크 요청에서 재사용됩니다. 이 방식은 불필요한 객체 생성을 방지하고 성능을 최적화합니다.
- 네트워크 통신 설정:
- OkHttpClient를 사용하여 타임아웃, 인터셉터, 로깅 등 네트워크 관련 설정을 처리합니다. 예를 들어, 요청이 너무 오래 걸리거나 실패하는 경우를 대비하여 타임아웃을 설정하거나, 네트워크 요청과 응답을 로깅하여 디버깅을 돕습니다.
- HTTP 요청과 응답 처리:
- HttpLoggingInterceptor를 활용하여 네트워크 통신 시 로그를 출력합니다. 이를 통해 요청/응답 헤더, 본문 내용, 상태 코드 등을 볼 수 있습니다. 이는 개발 시 디버깅에 유용하며, 배포 전에는 로그 레벨을 NONE으로 설정하여 보안을 강화할 수 있습니다.
- API 서비스 객체 생성:
- Retrofit 객체를 사용하여 API 서비스 인터페이스를 생성합니다. 이 인터페이스는 실제 API 호출을 처리하는 메서드들을 정의한 곳입니다. Retrofit은 이 인터페이스를 구현하여 실제 네트워크 호출을 실행합니다.
- 싱글톤 패턴 적용:
- 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 요청을 정의하고, 네트워크 호출을 생성