티스토리 뷰

반응형

어떤 라이브러리를 사용하는 것이 좋은지 고민이 될 정도로 다양한 라이브러리가 공개되어 있습니다.

Android에서 구성한 Rest API 통신이 정상적으로 동작하는지 궁금할 때가 많습니다.

대부분의 사람들은 Application Debugging 또는 PostMan을 활용하여 HTTP 통신이 정상으로 이뤄졌는지 확인 합니다.

만약 환경이 Application Debugging 또는 PostMan 으로 HTTP 통신을 확인 못한다면 어떻게 확인할 수 있을까요?

이런 문제점을 Chuck Library 로 해결할 수 있습니다.


Chuck Libray란?

Chuck Library 는 인-앱 Android OkHttp Clients의 간단한 인앱 HTTP 관찰하는 라이브러리 입니다.

인앱? HTTP 관찰? 처음에는 이해하기 어려웠습니다.

좀 더 풀어서 정리하면 HTTP 통신을 앱에서 할 경우 Chuck Library는 HTTP 통신에 대한 결과를 Ok Http Clients 로 Catch 하여 사용자 정보(HTTP 전송 성공 유무, 전송 시간, request, response )를 제공합니다.



Chuck 사용법

사용하는 방법은 간단합니다.

먼저 build.gradle 에서 dependency을 추가합니다. no-op 을 통하여 release 빌드와 debug 빌드를 구분합니다.

 dependencies {
  debugCompile 'com.readystatesoftware.chuck:library:1.1.0'
  releaseCompile 'com.readystatesoftware.chuck:library-no-op:1.1.0'
}

no-op로 구분하는 이유release build 에서는 Chuck 라이브러리 동작을 안하게 됩니다.


다음은 OkHttpClient에 ChuckInterceptor을 추가하는 소스코드를 작성합니다.

java

OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new ChuckInterceptor(context))
.build();

kotlin

var client:OkHttpClient = OkHttpClient.Builder()
.addInterceptor(ChuckInterceptor(context))
.build()

OKHttpClient에 addInterceptor 에 ChuckInterceptor()을 추가하면 됩니다.

Restrofit 을 사용하신다면 Restrofit.client()에 방금 생성한 client을 넣어주면 됩니다.

Kotlin

 val retrofit = Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(
                 GsonConverterFactory.create(GsonBuilder().serializeNulls().create()))
.baseUrl(LogBaseURL)
.client(getClient(context)) // AddInterceptor로 생성한 Client
.build()

Application에서 retrofit HTTP 통신을 하면 Notification으로 HTTP 통신 성공 여부를 보여줍니다.

Notification에 접속하면 상세한 HTTP 통신 여부, request, response 에 대한 내용을 보여줍니다.


Chuck Library 더 활용하기

Chuck Library 에서도 사용자가 옵션을 주어 제어를 할 수 있습니다.

  • showNotificationChuck에 대한 Notification을 보여줄 것인지 설정합니다. (기본값 : True)

  • maxContentLengthChuck에 저장되는 Content 길이를 설정합니다. (기본값: 250000L )

  • retainDataForChuck에 저장되는 기간을 설정합니다. (기본값 : 1주)

    /** Retain data for the last hour. */
        ONE_HOUR,
    /** Retain data for the last day. */
        ONE_DAY,
    /** Retain data for the last week. */
        ONE_WEEK,
    /** Retain data forever. */
        FOREVER

Kotlin

fun getClient(context: Context) : OkHttpClient {
       var client:OkHttpClient = OkHttpClient.Builder()
              .readTimeout(30, TimeUnit.SECONDS)
              .writeTimeout(30, TimeUnit.SECONDS)
              .connectTimeout(30, TimeUnit.SECONDS)
              .addInterceptor(ChuckInterceptor(context)
                              .showNotification(false)
                              .maxContentLength(100)
                              .retainDataFor(ChuckInterceptor.Period.ONE_HOUR))
              .build()
       return client
  }


정리

Chuck Library 에 대해서 알아봤습니다.

인앱으로 HTTP 디버깅 할때에는 유용하게 사용될 수있는 Chuck Library는 개발하는데 유용하게 사용될 것으로 예상됩니다.

반응형
댓글