📜 TIL
[Android] Retrofit활용해 서버와 통신 및 okHttp로 로그찍어보기
둥굴둥굴둥굴레차
2023. 2. 20. 13:07
Retrofit활용하여 서버와 앱이 통신하도록 만들기
→ Retrofit을 활용하여 서버와 통신할 준비는 위 영상강의를 통해 구축했다.
→ 그런데 서버로부터 아무런 반응을 얻어내지 못했다.
- 서버에게 데이터를 요청할 때 header값을 같이 넣어 요청해야하는데 header를 넣지 않아서 아무런 값을 얻어내지 못한 것 같다.
- 아무 개발자나 ODDICT서버에 접근하여 데이터를 빼낼 수 없도록, 서버로 데이터를 요청할 때 header에 요청값을 넣어 보내야 하기 때문이다.
서버와 앱이 잘 통신되고 있는지 okHttp로 로그를 찍어 확인하기
https://j-k4keye.tistory.com/14
DefaultRestClient.kt
class DefaultRestClient<T> {
private var service: T? = null
private val headers: MutableMap<String, String> = HashMap()
private var retrofitClient: Retrofit? = null
private lateinit var instance: DefaultRestClient<Any>
...
// okHttp의 Logger를 사용하여 로그 찍어보는 작업
val logginInterceptor = HttpLoggingInterceptor()
logginInterceptor.level = HttpLoggingInterceptor.Level.BODY
okHttpClientBuilder.addInterceptor(logginInterceptor)
val client = Retrofit.Builder()
.baseUrl(baseUrl)
.client(okHttpClientBuilder.build())
.addConverterFactory(GsonConverterFactory.create())
.build()
this.service = client.create(service)
return this.service!!
}
...
}
- 로그를 찍어보는 로직 자체는 성공적! 그러나 Logcat에서 HTTP traffic to ~~ not permitted이란 에러가 발생했다.
- 내 소스코드에서 baseUrl은 "http://***.***.***.**:8080"이러한 주소인데, http를 접속허용하는 설정을 해주지 않아서 발생한 것!
→ 기존 소스에서 http주소를 허용하는 xml파일을 끌어와 Manifest에서 networkSecurityConfig를 application태그에 설정해주었다.
→ 그리고 다시 앱을 실행시킨 후 회원가입 과정을 마치고 enter버튼을 누르니 다음과 같은 okHttp로그가 떴다.
- {}
- 400
- 에러코드가 400이다!
- The request could not be understood by the server due to malformed syntax.
- 이는 서버가 “요청의 syntax가 잘못되어서 이해를 못하겠다”라고 말하는 것과 같다.
- 에러코드가 400이다!
→ 일단 내가 왜 response로서 돌려받은게 아무것도 없을까? 하며 코드를 다시 살펴보던 중 아래를 발결할 수 있었다.
- joinEmail함수의 파라매터로 받아온 joinEmailRequest변수를 사용하지 않고 val을 사용하여 다시 새로 생성해주었었기 때문에 일어난 문제!
- val joinEmailRequest를 삭제해주니 파라매터가 정상적으로 활성화 됨!
→ 이제 response값이 잘 나온다!
- 단, 계속 400에러임은 다름이 없다.
- 또 주목할 점은 비밀번호가 암호화가 되지 않은 상태에서 들어왔다는 것!
AES256을 사용하여 비밀번호를 암호화해주어 서버에 다시 요청하자!