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을 사용하여 비밀번호를 암호화해주어 서버에 다시 요청하자!
제 글이 당신에게 도움이 되었길 바랍니다.
추가적인 질문은 언제든지 환영해요.
제 글이 도움이 되셨다면 광고 하나만 클릭해주세요! 정말 큰 힘이 됩니다~! 🤠
'📜 TIL' 카테고리의 다른 글
[Android] 서버 로그인 시 비밀번호 암호화 적용해주기 (0) | 2023.02.27 |
---|---|
[Android] 안드로이드 개발자 면접질문 정리 part 1 (0) | 2023.02.22 |
[Android] 화면 이동하자마자 키보드가 생기며 입력창에 포커스 맞추는 기능 구현 (0) | 2023.02.19 |
[Android] OnBackPressedCallback 사용하여 뒤로가기(Back Press) 구현하기 (0) | 2023.02.17 |
[Android] 로그인 시 아이디 패스워드 유효성 검사하는 로직 만들기 (1) | 2023.02.15 |