티스토리 뷰

1. Problem





위와같이 코드를 짰는데 뭔가 이상했다. 

일반적인(?), 내 의도대로라면, Log가 log 1~8까지 차례대로 찍혀나가야 했는데 결과를 보니 그렇지 않았다. 


아래처럼 onResponse()/onFailure() callback이 가장 나중에 call 되더라.

생각해보면 Callback method를 이용한 asynchronous한 처리이기 때문에 당연한 일이다. 

한마디로 main thread는 결과를 기다리지 않고 제 갈길을 계속 가는 거다.


그런데 나는 server로부터 return되는 response값에 따라 다른 처리가 필요했기에

완전히 synchronous하게 처리해야 했다.




2. Solution




: 찾아보니까 retrofit은 동기/비동기 처리를 모두 지원한다고 한다.

(참고: retrofit2부터는 service interface에서는 둘다 Call을 return받는 것으로 바뀌어서 차이가 없고, 

다른 method를 쓰도록 된 것 같다.)


그런데 android에서는 network처리를 '작업 thread'에서만 처리할 수 있도록 예전에 바뀌었기 때문에 

동기식으로 처리한다고 해도, 또 다른 thread에서 돌려야 했고, 내가 원하는 타이밍에 network처리를 하고, 

그 결과 값을 return받아서 사용하는 건 똑같이 순서가 뒤죽박죽이었다. 

(비동기처리와 마찬가지로)


그래서 내린 결론은 임의로 타이밍을 맞춰주는 것이다. 

그래서 Thread.sleep(1000);으로 1초를 기다리고 처리를 했더니, 

그동안 network처리 시간이 충분했는지, return값을 받고, 내가 원하는 방향으로 처리할 수 있었다. 




3. 느낀점 / 배운점 

: 내가 원하는대로 구현은 가능했지만, 실제로 현업에서도 login을 이런식으로 network를 구현하는지는 알아봐야 할 일이며, retrofit이 빠르고 편리하지만, 무조건 장점만 있는 건 또 아닌것 같다. 







댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함