소프트웨어를 개발할 때 동기 또는 비동기적으로 코드를 작성하는 일은 매우 중요하다. 용도나 방식에 따라서 올바른 방식을 적절히 선택해야하는데 이러한 동기와 비동기에 대해 개념을 정리해 보고자 한다.
동기식 통신 및 동기식 프로그래밍이란 Synchronous란 뜻대로 동시에 일어난다는 뜻이다.
동시에 일어난 다는 것은 Request를 보내게 된다면 얼마나 시간이 걸리든 그 자리에서 Response를 받는다는 말이다. 즉, 두 서버 사이의 Transaction 을 맞추겠다는 의미이다.
Synchronous(동기식) 에서는 Request를 보내면 Response를 기다리기 때문에 Request를 보낸 Thread는 Response가 도착하기 전까지는 아무것도 하지 못하는 Block 상태가 됨을 의미한다.
비동기식 통신 및 비동기식 프로그래밍이란 ASynchronous란 뜻대로 동시에 수행하지 않는다는 뜻이다.
동기식과는 반대로 Request를 보내더라도 Response를 언제 받아도 상관이 없다는 말이다. 즉, Request를 보내고 Response를 상관하지 않는 상태가 되는 것이다.
비동기식에서는 동기식과는 반대로 Response를 기다리지 않고 있으니 Request를 보낸 Thread는 다른 일을 할 수 있다. Request를 보내고 Response를 기다리지 않고 다른 일을 하는 이러한 상태를 Non Block 상태라고 한다.
비동기식은 비동기식 처리를 요청할 때 할일 이 끝난 후 처리결과를 알려주는 콜백이라는 함수를 함께 알려준다. 호출받은 함수는 처리가 끝나면 요청한 함수를 호출하여 처리 결과를 전달하게 된다. 이러한 함수 호출의 흐름은 사용자가 아닌 일을 마친 시스템이 호출하는 형태이기 때문에 콜백이라고 불린다.
비동기 방식은 DOS같은 단일 운영체제에서는 불가능하며 windows 같은 multitask 환경에서만 가능하다.
동기와 비동기에 대해 정말 간단하게 개념과 장단점만 살펴보았다. 웹에서는 Ajax 등을 사용하여 비동기적인 통신을 구현할 수 있는데 현재 내가 공부중인 안드로이드에서는 코루틴을 사용한다. 코루틴에 대한 내용은 동기와 비동기의 포스팅에 넣기보다 안드로이드 태그로 따로 정리하는게 좋을꺼 같아서 포함하지는 않았다. 이 글에서는 간단히 동기와 비동기가 무엇인지와 둘의 차이 정도만 집고 넘어가면 좋을거 같다!!!!
와! 코딩을 전혀 모르는 저희 동생도 알아 들을만큼 쉽고 명쾌한 설명! 감사합니다.