앱 개발을 하다보면 서버와 REST API 를 이용하여 데이터를 주고 받게 됩니다.
분명 잘 개발한거 같은데, 응답으로 실패가 되거나 json 오류 등등 여려가지 문제가 발생하는 경우가 비일비재 합니다.
이럴때는 서버에서 내려오는 실제 데이터를 보면 금방 해결할수 있습니다.
그럼, 서버에서 내려오는 데이터를 어떻게 확인할까요?
아래의 링크의 내용처럼 API Tester 앱을 이용하는 경우도 있겠지만, Android는 라이브러리를 추가하여 웹브라우저에서 확인이 가능합니다.
facebook에서 만든 라이브러리로 네트워크 뿐만아니라, 데이터베이스도 모니터링이 가능합니다.
제가 개발했던 앱에서는 DB를 사용하지 않았으므로 네트워크 모니터링에 대해서만 말씀드리겠습니다.
1. 안드로이드 프로젝트의 build.gradle(모듈 수준)에 라이브러리를 implementation 합니다.
dependencies {
...
// rest api logging
implementation 'com.facebook.stetho:stetho-okhttp3:1.5.1'
implementation 'com.facebook.stetho:stetho:1.5.1'
}
2. Android Application 클래스(AppMain.kt)를 생성하고, 초기화를 합니다.
class AppMain: Application() {
override fun onCreate() {
super.onCreate()
...
Stetho.initializeWithDefaults(this)
}
}
3. Retrofit 인스턴스 생성시에 네트워크 인터셉터로 추가합니다.
Retrofit.Builder()
.client(OkHttpClient.Builder().run {
addNetworkInterceptor(StethoInterceptor())
...
build()
})
.baseUrl("https://picsum.photos")
.addConverterFactory(GsonConverterFactory.create(get()))
.build()
.create(LoremPicsumApiService::class.java)
addNetworkInterceptor(StethoInterceptor()) 를 추가함으로써 웹브라우저 개발자 도구에서 로그를 확인할수 있습니다.
이제 코드 구현은 완료되었습니다.
이제 웹브라우저를 실행시킵니다.
4. 저는 마이크로 소프트의 엣지 브라우저를 사용합니다.
(기존에는 크롬을 사용했는데, 언제부터인가 화면이 깨져서 보여서 엣지를 사용하게 되었습니다.)
URL 입력창에 edge://inspect 라고 입력하고 엔터.
(크롬 브라우저는 chrome://inspect 라고 입력하고 엔터.)
이제 위와 같이 개발 도구 화면을 보실수 있으십니다.
그리고, 단말을 케이블에 연결하고, 앱을 실행!!
위의 그림 하단에 Remote Target 항목에 단말 모델명이 표시되고, 그 아래로 실행한 앱의 package name이 표시됩니다.
그 아래에 inspect 를 누르면 모니터링 화면이 표시됩니다.
위의 그림과 같이 왼쪽에는 단말에 표시된 화면이 보입니다.
이제 Rest API를 호출하는 버튼이나 화면을 실행 시킵니다.
그러면, 화면 오른쪽에 요청한 API와 요청/응답 데이터가 보이게 됩니다.
이미지 목록을 요청한 REST API 응답 데이터입니다.
이와 같이 네트워크 데이터를 모니터링 및 디버깅을 할수 있습니다.
다른 탭을 눌러시면, 헤더나 POST로 전송한 데이터도 보실수 있습니다.
stetho 관련 문서 링크 공유합니다.
전체 개발 소스는 아래 Github 링크를 확인해 주세요.
좀더 쾌적한 개발을 원하시는 모든분들에게 도움이 되었으면 합니다.
'Android + Kotlin' 카테고리의 다른 글
[Android Kotlin] inline 함수 어떤 경우에 사용하나요? (0) | 2022.01.20 |
---|---|
[Android Kotlin] <T>, <K, V> , <*> 너희 정체가 뭐니? (0) | 2022.01.13 |
[Android Kotlin] Paging 3.0 리스트에 Empty View와 Item Listener 구현하기 (0) | 2022.01.11 |
[Android Kotlin] 페이징 리스트에 리플래시(SwipeRefreshLayout) 구현하기 (0) | 2022.01.09 |
Paging 3.0 + MVVM + Flow를 이용하여 리스트 구현하기 (1) | 2022.01.04 |