동기 vs. 비동기

1 minute read

이번에 REST API를 사용하다 보니 동기와 비동기에 대한 개념이 필요했다. 동기와 비동기는 모두 한자어로 처음 접했을 때는 뜻이 한번에 와닿지는 않았다.

프로젝트에 사용하고 있는 RIOT API는 REST API라 볼 수 있는데, 네트워크에서 가져온 값을 가져오려니 문제가 발생했다. 😩 해당 프로젝트는 안드로이드 기반인데, 안드로이드는 메인 스레드에서는 네트워크 같이 시간이 오래 걸리는 작업을 하지 않는다. 안드로이드의 메인 스레드는 주로 UI와 관련된 작업만 처리한다고 한다.

그럼 값을 가져오려면 어떻게 해야하나? 나는 고민 끝에 새로운 스레드를 만들어 사용하려고 했는데 또 문제가 생겼다. 받아온 값을 전역으로 지정한 변수에 넣어서 리턴하는 방향으로 진행을 하려고 했는데 생각대로 잘 되지 않았다. 변수에 들어가지 않아 view에서는 확인이 불가했고, 대신 System.out.println()으로 확인을 해보았더니 잘 출력되는 것 같았다.

뭐가 문제였을까?

  • 동기적(Synchronous): 순차적, 직렬적으로 작업

  • 비동기적(Asynchronous): 병렬적으로 작업

받아오는 시간이 좀 걸려서 아직 값을 받아오지 않은, 즉 초기화했을 때의 상태가 보이던 문제는 이것이 동기적으로 작업되기 떄문이었다. 비동기적으로 작업할 경우, 이 문제를 해결할 수 있을 것으로 보인다. 🙏 처음에는 이 파트를 모두 수작업해야 하나 걱정이 많았는데, 다행히 동기 및 비동기 작업을 해주는 오픈소스들이 개발되어 있었다. 찾아본 결과로는 안드로이드에서는 Retrofit2와 OKHttp가 주로 사용된다고 한다. 안드로이드에서 기본적으로 제공되는 기능은 AsyncTask이다. AsyncTask의 경우에는 시간이 오래 지체되는 작업에 사용이 어렵다는 것이 단점이지만 내가 사용하는 것은 규모가 큰 작업이 아니기 때문에 이것을 사용하는 것도 고려중이다.

다음 작성글로는 이 오픈소스를 사용하여 문제를 직접 해결해보고 올릴 예정이다. 🙏🙏🙏