📜 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에서 networkSecurityConfigapplication태그에 설정해주었다.

 

→ 그리고 다시 앱을 실행시킨 후 회원가입 과정을 마치고 enter버튼을 누르니 다음과 같은 okHttp로그가 떴다.

 

→ 일단 내가 왜 response로서 돌려받은게 아무것도 없을까? 하며 코드를 다시 살펴보던 중 아래를 발결할 수 있었다.

  • joinEmail함수의 파라매터로 받아온 joinEmailRequest변수를 사용하지 않고 val을 사용하여 다시 새로 생성해주었었기 때문에 일어난 문제!
    • val joinEmailRequest를 삭제해주니 파라매터가 정상적으로 활성화 됨!

 

→ 이제 response값이 잘 나온다!

  • 단, 계속 400에러임은 다름이 없다.
  • 또 주목할 점은 비밀번호가 암호화가 되지 않은 상태에서 들어왔다는 것!
    AES256을 사용하여 비밀번호를 암호화해주어 서버에 다시 요청하자!

 


 

제 글이 당신에게 도움이 되었길 바랍니다.

추가적인 질문은 언제든지 환영해요.

 

제 글이 도움이 되셨다면 광고 하나만 클릭해주세요! 정말 큰 힘이 됩니다~! 🤠