나의 개발 일상 기록
Retrofit 본문
Retrofit이란

Retrofit은 Java에서 REST Client를 간편하게 구현할 수 있도록 기능을 제공하는 라이브러리()입니다. Spring Web에서 제공하는 RestTemplate도 이와 동일한 기능을 제공하지만, Retrofit 을 사용할 때의 코드 가독성고 편의성이 좀 더 높습니다. ( https://square.github.io/retrofit/ )
Retrofit의 특징
- Retrofit 은 Annotation과 Interface로 선언된 HTTP API 명세를 기반으로 HTTP API 구현체를 생성해줍니다.
- Retrofit 은 HTTP API의 요청과 응답에서 타입을 강제하여 Type Safe 한 장점을 제공합니다. 타입이 강제되기 때문에 개발 과정에서 요청과 응답에 대한 예측이 가능합니다.
사용방법
1. build.gradle 에 dependncy 를 추가합니다.
// retrofit
implementation 'com.squareup.retrofit2:retrofit:2.9.0' // 필수
implementation 'com.squareup.retrofit2:converter-gson:2.9.0' // gson converter
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0' // logging interceptor
2. Retrofit이 제공하는 Annotation 을 활용하여 HTTP API Interface를 선언합니다.
public interface RetrofitOrderApi {
@POST("api/v1/gift-orders/init")
Call<CommonResponse<RetrofitOrderApiResponse.Register>> registerOrder(@Body OrderApiCommand.Register request);
@POST("api/v1/gift-orders/{orderToken}/update-receiver-info")
Call<Void> updateReceiverInfo(@Path("orderToken") String orderToken, @Body GiftCommand.Accept request);
}
- HTTP Method - @GET, @POST, @PUT, @DELETE 제공
- Request - Request Body 를 표현하는 @Body와 Form-encoded를 표현하는 @FormUrlEncoded, MuliPart 를 표현하는 @Part 등을 제공
- Request URL - URL의 Path Variable 을 표현하는 @Path, Query Parameter 을 표현하는 @Query 등을 제공
- Request Header - 요청 Header 를 표현하는 @Headers 또는 @Header 를 제공
3. HTTP 통신에 대한 baseUrl 과 converter 등을 설정하고, 선언된 HTTP API Interface 를 생성하는 Retrofit 객체를 생성하는 Bulider를 선언합니다.
public static Retrofit initRetrofit(String baseUrl) {
return new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(httpClient.build())
.build();
}
- httpClient 선언 시 Connection Timeout, ReadTimeout 설정이 가능하고, HTTP 요청과 응답에 대한 로깅을 남기는 Interceptor 선언도 가능합니다.
4. Retrofit.create() 메서드를 활용하여 사전에 선언한 HTTP API Interface의 실제 구현체를 생성하고 사용합니다.
@Bean
public RetrofitOrderApi retrofitOrderApi(){
var retrofit = RetrofitUtils.initRetrofit(baseUrl);
return retrofit.create(RetrofitOrderApi.class);
}
'WEB' 카테고리의 다른 글
| [트래픽 분산처리] 로드밸런싱(Load Balancing) (0) | 2022.02.15 |
|---|---|
| HTTP 상태 코드 (0) | 2021.05.21 |
| [Spring] 보안 요소 관련 Coding (0) | 2021.05.06 |
Comments