안드로이드 에뮬레이터에서 로컬호스트 접속(서버 통신)
안드로이드 앱 개발 중 okhttp3를 사용하여 서버와 통신이 필요한 작업이 있었다.
장고에서 로컬 서버를 열어서 rest api로 get 요청을 보내야 하는데, 안드로이드 스튜디오에서 로컬 호스트로 접속하려 했더니 이런 로그가 뜬다.
이유를 찾아보니
에뮬레이터도 하나의 OS이기 때문에 localhost는 자기 자신이다. 즉 내가 만든 서버가 아닌 에뮬레이터 자신의 서버를 향해 통신을 하기 때문에 통신이 안되는 것.
10.0.0.2로 변경하면 된다.
예를들어 .url("http://127.0.0.1:8000/app/hello/") 였다면 .url("http://10.0.2.2:8000/app/hello/") 로 변경
-참고자료
실행되는 각 에뮬레이터 인스턴스는 개발 머신의 네트워크 인터페이스나 설정과 분리된 가상 라우터/방화벽 뒤에서 실행된다.
각 인스턴스를 위한 가상 라우터는 10.0.2/24 네트워크 주소 공간을 관리한다. - 라우터가 관리하는 모든 주소는 10.0.2.<xx>의 형태를 가지고 여기서 <xx>는 숫자이다. 이 공간 내의 주소는 에뮬레이터/라우터에 의해 다음과 같이 미리 할당되어 있다.
개발 머신의 127.0.0.1은 에뮬레이터의 자체 루프 백 인터페이스에 대응한다. 개발 머신의 루프 백 인터페이스(127.0.0.1)에서 실행되고 있는 서비스를 액세스 하고 싶으면 127.0.0.1 대신 특별 주소인 10.0.2.2를 사용해야 한다.
마지막으로 각 에뮬레이터 디바이스의 미리 할당된 주소들은 안드로이드 에뮬레이터에 한정된 것이고 실제 디바이스에서는 완전히 다를 수도 있음을 주의해야만 한다.
[출처] 안드로이드 어플 개발 : 서버가 localhost인 경우, android emulator로 테스트할 때 URL 주소|작성자 스제