ANDROID/Android 개발 이슈 & 해결
[Android] Retrofit2 연결 오류 해결 - java.net.UnknownServiceException, java.net.SocketTimeoutException
주 녕
2021. 10. 25. 15:13
반응형
프로젝트를 하면서 외부 DB를 사용하게 되었다.
Retrofit을 이용하여 진행하게 되었는데, Google에서 제공한 test URL에서는 잘 작동했는데
백엔드 개발자 친구가 준 URL에서는 여러 오류들을 만나게 되었다. 우선 해당 URL은 아직 로컬 서버인 상태였다!
java.net.UnknownServiceException
java.net.UnknownServiceException: CLEARTEXT communication to ~ not permitted by network security policy
- 발생 원인 : http 서버 호출 시 발생하는 에러인데, 안드로이드 9.0 부터는 보안상의 문제로 http 관련 호출을 차단한다.
- 해결 방법 2 : https로 호출하기 (권장 사항) - 근본적인 원인 해결 방안
- 해결 방법 1 : default 값을 변경하기 - 근본적인 보안 문제 해결 방안은 아님(일시적)
AndroidManifest.xml
<application
android:usesCleartextTraffic="true"
...>
res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true"> IP or 도메인 주소 </domain>
</domain-config>
</network-security-config>
java.net.SocketTimeoutException
java.net.SocketTimeoutException: failed to connect to ~ from ~ after 10000ms
- 타임아웃(Timeout) : 프로그램이 특정한 시간 내에 성공적으로 수행되지 않아 진행이 자동적으로 중단되는 것
- 소켓 타임아웃(SocketTimeout) : 클라이언트와 서버가 연결된 후에 서버는 데이터를 클라이언트에게 전송하는데, 이때 하나의 데이터를 여러 개의 패킷으로 나누어 전송하게 된다. 이 여러 개의 패킷이 각각 전송될 때의 시간 차이가 발생하는데 이 차이의 임계치를 말한다.
- 해결 방법 1 : 연결 제한 시간(위에서 말한 임계치)를 늘린다.
- 해결 방법 2 : 서버를 제대로 올린다... (우리는 이 방법이 맞았닿ㅎ)
반응형