모바일 앱이 만들어질려면? 당연하게도 서버가 필요합니다!
서버로부터 다양한 데이터를 주고받을려면? API가 필요합니다!
프론트는 백엔드가 요구하는 데이터 형식에 맞추어 데이터를 제공해야하고 서버로부터 데이터를 받을 때 역시 백엔드가 주는 데이터 형식에 맞춰 프론트는 받을 데이터 형식을 정의해주어야합니다.
하지만 개발을 하다보면 이 과정을 늘 정확히 하기란 쉽지 않습니다.
사람인지라 사소한 변수명 오류가 있을 수도 있고 서버측의 오류가 있어 네트워크 통신이 원할하게 진행되지 못하는 문제가 발생하기 마련입니다.
이를 막기 위해서 Log창에 okhttp Logging Interceptor을 사용해 Http 통신 로그를 기록합니다.
하지만 수많은 로그가 뜨는 과정에서 조그만 Log창으로 오류를 파악하기란 쉽지 않습니다.
배경:
사실 몇달전 앱 개발 프로젝트를 진행하며 적극적으로 참고한 한 프로젝트 레포지토리가 있었는데 그 프로젝트에서 이 라이브러리를 쓰고 있어 호기심이 생겨 알아보다가 프로젝트에 적용하게 되었습니다.
https://github.com/ChuckerTeam/chucker
Chucker은 Http request와 response 결과를 디버깅하는 디바이스에서 UI로 제공합니다.
step 1
build.gradle에 chucker 라이브러리르 추가하는 구문을 작성해줍니다.
이 구문의 의미는 chucker 라이브러리를 디버그 빌드시에만 적용하고 릴리즈 빌드시에는 적용하지 않는다는 의미입니다.
//chucker
debugImplementation ("com.github.chuckerteam.chucker:library:4.0.0")
releaseImplementation ("com.github.chuckerteam.chucker:library-no-op:4.0.0")
step 2
OkHttpClient 인스턴스를 구성하고 ChuckerInterceptor을 추가하여 Http요청을 인터셉터하여 디바이스에 UI로 제공하도록 아래 코드와 같이 정의해줍니다.
@Singleton
@Provides
fun provideOkHttpClient(
tokenInterceptor: AuthInterceptor,
@ApplicationContext context: Context
): OkHttpClient {
val httpLoggingInterceptor = HttpLoggingInterceptor()
.setLevel(HttpLoggingInterceptor.Level.BODY)
return OkHttpClient.Builder()
.addInterceptor(tokenInterceptor)
.addInterceptor(httpLoggingInterceptor)
.addInterceptor(ChuckerInterceptor(context))
.build()
}
끝입니다! 간단하죠?
디버깅 모드로 실디바이스에서 앱을 빌드해보면
다음과 같이 알림창에 어떤 네트워크 요청을 주고받았는지 표시가 됩니다.

알림을 타고 들어가보면

이런 화면을 볼 수 있어 네트워크 요청과 응답이 어떤 형식으로 되고 있는지 시각적으로 간편하게 확인할 수 있습니다.
Chucker을 사용해서 조그만 Log창을 보며 나빠진 시력을 회복해보세요..!