티스토리 뷰



Login을 구현하면서 

가장 많은 시간을 썼던게, android http 통신할때 server의 주소를 정확히 명시하는 일이었다. 

필자는 하나의 pc로 node.js server를 돌리고 client를 test했고, 이런 상황에서는 localhost로 http request를 보내야 하는게 상식적이다. 





꽤 오랜 시간동안 다음과 같은 log와 싸워야 했다. 


-> client에서 잘 가는데 서버에서 받을 줄을 모른다. (분명 서버는 잘 돌아가고 있고, 하염없이 request를 기다리고 있는 상태....)



public static final String BASE_URL = "http://localhost:4903";

나는 당시 BASE_URL을 다음과 같이 쓰고있었다. 


그런데 구글링 하던 중 다음과 같은 글을 발견했다. 


"pc의 localhost와 android의 localhost는 다릅니다. 저렇게 하면 android의 localhost를 가리키고 있는 겁니다."


한마디로 루프백(127.0.0.1)을 돌리고 있는거였다. 






그래서 구글의 조언대로 다음과 같이 바꿨다. 


public static final String BASE_URL = "http://10.0.2.2:4903";

10.0.2.2는 android에서 pc의 localhost를 가리킬 수 있는 주소라고 하더라. 

그래도 똑같은 현상이 지속되었다. 

알고보니 얘는 Emulator에서 local server를 가리킨다고 한다. (나는 실제 device로 테스트 했었다.)





그래서 결국 다음과 같이 바꿨다. 


public static final String BASE_URL = "http://172.xx.x.x:4903";

-> device로 테스트 하기위해서는, 실제 내부 ip주소(IPv4) 주소로 접근해야만 한단다. 

그리고 결국 감격의 성공 ㅠㅠㅠㅠㅠㅠㅠ


뭐가 문제인지 몰라서 동시에 여러가지 변수를 복합적으로 생각했었는데.. 

이런 문제도 발생할 수 있다는 걸 알게되었다. 


별거 아닌것 같지만 사실 큰 배움이다. 

앞으로 http 통신 할 때는 단번에 할 수 있겠지~~ 








RESTful 통신이고, 간단하게 정리하면 다음과 같다. 


1. Emulator로 테스트 할 때 : http://10.0.2.2:4903

2. Device에서 테스트 할 때 : http://172.xx.x.x:4903





댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함