마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

asynctask로도 서버 요청, 응답받기가 가능할까요?

0 추천
프로젝트를 진행하는데 다음단계로 넘어가야하는데, 다음단계에서 서버를 사용하더라구요.

그래서 서버의 처음 개념부터 영상을보고 공부했는데

서버에 요청 응답을 보내기위해서 처음에는 소켓을 이용하는 방법. 더 나아가 HTTP 포맷을 이용해 웹에 요청,

응답을 받거나 이제 더 나아가 volley까지 사용하는걸 해봤는데요,

안드로이드에서는 네트워킹을 사용할때 스레드가 필수적이라 하여

서버소켓을 사용할떄도 스레드,핸들러를 사용하고, HTTP를 사용할때도 스레드를 사용했습니다.

이제 그러다가 더 간편하게 이 두개를 한번에 처리하는 volley라이브러리를 사용해 스레드,핸들러를 처리하

지 않아도 되는 그런 간편함을 알게되었는데요.

 

궁금한게, 이전에 스레드와 핸들러 사용법을 배우면서 스레드와 핸들러를 매번 따로 정의하고 하는 번거러움

이 있어 이걸 한번에 해줄 수있는 AsyncTask라는걸 또 공부했는데요.

이때쯤 궁금해지기 시작했는데.. 제가 본 영상에서는 서버소켓이나 HTTP나 둘다 스레드와 핸들러를 굳이

따로 정의(?)해서 처리를 하던데.. 영상 시청자가 초보자라 그에 맞게 타겟팅을 맞춰서 이해를 돕도록 한것인

지는 모르겠지만

asynctask가 있으면 한번에 객체를 만들고 내부에서 서버요청이나 응답받고 UI접근까지 다 할수 있지 않나라

는 생각을 했습니다.. 근데 영상에서는 딱히 언급이 없어서 질문드립니다.

asynctask로도 서버요청하고 응답을 받을 수 있나요?

그리고 이렇게 쓰면서 생각한거지만 만약에 된다면 volley라이브러리도

스레드와 핸들러를 내부에서 다 처리해준다던데 차이점이 무엇인가요..?
codeslave (3,940 포인트) 님이 2020년 10월 29일 질문

1개의 답변

+1 추천
할 수 있죠, 근데 AsyncTask는 최근에 deprecated 되어서 더이상 사용하시면 안되구요. OkHttp + Retrofit와  RxJava 또는Coroutines 가 업계의 암묵적인 표준입니다. Java와 Reactive 스타일의 코드를 선호하시면 RxJava, Kotlin과  async await 형태의 코드를 선호하시면 Coroutines를 사용하시면 됩니다.
그리고 AsyncTask는  UI thread -> Background thread -> UI thread의 스위칭을 해줍니다. Volley는 안써봐서 잘 모르겠지만, 기본적으로 동일한 역할을 할거고 AsyncTask보다는 기능이 더 많겠죠.
spark (227,530 포인트) 님이 2020년 10월 29일 답변
추천 드렸는데 spark 님 AsyncTask가 최근에 deprecated 되어서 더이상 사용하면 안된다는 내용을 설명혹시 해주실 수 있나요?
구글이 얼마 전에 Android11 (API 30)을 변경된 사항을 발표했는데, 그 중의 하나가 AsyncTask의 deprecation입니다.
개발자 문서를 보면,
https://developer.android.com/reference/android/os/AsyncTask
This class was deprecated in API level 30.
Use the standard java.util.concurrent or Kotlin concurrency utilities instead.
라고 나옵니다. 구글에서는 Android11을 발표하면서 Kotlin Coroutines를 비동기 작업의 표준적인 방법으로 선언했지만, 아직은 RxJava가 훨씬 많이 쓰이는 상황입니다. Coroutines를쓰면 코드가 좀 간단해지기는 하죠. 물론, 공부해야할 것이 만만치는 않지만요.
안드로이드 앱은 구글의 앱관리 정책상 매년 최상위버전에서 한단계 아래인 버전까지 업데이트를 해주어야 앱출시가 가능합니다. 그러니까  앱을 계속 릴리즈하려면 Android10까지는 지원해야 한다는 말이죠. 따라서 조만간 Android11을 지원해야 하기 때문에 AsyncTask는 사용하시면 안됩니다. 사용하더라도 다시 코드를 수정해야 겠죠.
그리고 코드 측면에서 보면 AsyncTask는 그리 좋은 코드는 아닙니다. 예전에는 AsyncTask 안에다 ProgressDialog 같은 거를 띄우는 코드도 넣고 그랬던 적이 있는데, 여러개의 요청을처리하는 데 별로 적합하지 않고 아주 간단하 처리만 하도록 설계되었죠. 그리고 콜백을 안전하게 처리하거나 기존 요청을 처리하거나 하는 등의 작업을 쉽지 않습니다. 주의해서 짜지 않으면 메모리누수를 만드는 코드를 짜기에 좋도록 설계되어 있습니다.
안드로이드를 계속 하실거면 Kotlin + Coroutines는 배우셔야 할거예요.
매우 친절한 답변 감사합니다. 이해가 쏙쏙 되네요. 내년에 바꿔야할께 수두룩하네요.  11월2일 대응도 이제 겨우 다끝났는데.......
...