Notice
Recent Posts
Recent Comments
Link
«   2026/08   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

나의 개발 일상 기록

Retrofit 본문

WEB

Retrofit

느린 거북이 2021. 9. 28. 21:13

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