가볍게 쉬운 비유 예시를 먼저 소개하겠다.
Intro
해야할 일이 빨래, 설거지, 청소 3가지가 있다.
- 이 일들을 동기적으로 처리한다면 빨래 -> 설거지 -> 청소이다.
- 비동기적으로 처리한다면 빨래는 업체에 맡기고, 설거지는 대행 업체에 시키고 청소 역시 대행 업체에 시킨다. 어떤 것이 먼저 끝날지는 모른다. 일을 마친 업체는 나에게 말해줄것이니 나는 다른 일을 하면된다. (백그라운드 처리에서의 비동기)
Synchronous :: 동기
- 동시에 일어난다는 뜻이다. 요청과 그 결과가 동시에 일어난다.
- 요청을 하면 얼마가 걸리던 그 자리에서 결과가 주어져야 한다.
- A노드와 B노드 사이의 작업 처리 단위(트랜잭션)를 동시에 맞추겠다.
Asynchronous :: 비동기
- 동시에 일어나지 않는다는 뜻이다. 요청과 결과가 동시에 일어나지 않을 것.
- 요청한 그 자리에서 결과가 주어지지 않는다.
- 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
Versus
-
동기 방식은 설계가 매우 간단하고 직관적이지만 결과가 올때까지 아무것도 못하고 대기해야 한다는 단점이 있다.(Blocking으로 받아들이자.)
-
비동기 방식은 동기보다 복잡하지만, 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있으므로 자원을 효율적으로 사용할 수 있다는 장점이 있다.(Non-Blocking으로 받아들이자.)