동기와 비동기의 개념 및 차이에 대해 쉽게 알아보자.

동기(Synchronous) 방식

동기란, 말 그대로 동시에 일어난다는 뜻입니다.

요청을 하면 동시에 응답을 한다는 약속으로, 바로 요청을 하면 시간이 얼마가 걸리던지 요청한 자리에서 응답(결과)가 주어져야 합니다.

 

동기의 예 중에는 여러가지가 있지만, 콜센터의 직원을 예로 설명해 보겠습니다.

콜센터 직원 한명에게 3명의 고객이 전화를 건다고 생각해봅시다.

한명의 직원은 각기 다른 3명의 고객들의 이야기를 듣고 대답해줄 순 없을 겁니다.

그렇기 때문에 전화가 온 순서대로 고객의 전화를 받고 그 뒤 고객들은 "상담원이 통화중이니 잠시만 기다려주세요"라는 안내 음성을 들은적이 있을겁니다.

콜센터 직원은 제일 먼저 통화를 건 고객 1과의 전화를 먼저 한 후 끝나면 대기가 걸려있던 고객 2의 대기를 풀고 전화를 받습니다.

이런식으로 동기 방식은 먼저 발생한 일이 끝 날 떄 까지 아무것도 못하고 대기해야한다는 단점을 가지고 있습니다.

 

또 다른 예로 "계좌이체"를 예시로 들수 있습니다.

계좌이체 같은 작업은 동기방식으로 처리를 해야 서로 동시에 요청과 응답을 확인하기 때문에 둘 중한 명이 못받는 상황이 발생하지 않을 것 입니다.

  1. 철수는 짱구가 10,000원만 빌려달라해서 10,000원을 송금하려 합니다.
  2. 철수의 계좌에서 짱구의 계좌로 10,000원을 송금합니다. ( 송금한 금액이 빠질 예정이며 아직 빠지진 않습니다.)
  3. 짱구는 10,000을 받았다는 것을 확인하고 철수에게 받았다고 응답을 보냅니다. ( 받은 금액은 추가될 예정이며 아직 추가되진 않습니다)
  4. 철수와 짱구가 서로 보내고 받았다는게 확인되면 그때서야 각자의 계좌의 금액이 증감됩니다.

만약 철수가 짱구한테 10,000원을 송금하고 받았다는 응답을 받기도 전에 맹구한테도 10,000원을 보낸다면 어떻게 될까요 ?

아마 시스템이 꼬이면서 누구는 받고 누구는 못받는 상황이 발생할 수 있을겁니다.

 

이처럼 동기 방식은 같은 일을 동시에 진행하고 둘의 작업의 처리기간은 일치해야합니다.

 

동기 방식의 특징
  • 요청을 보내고 실행이 끝나면 다음 동작을 처리하는 방식순서에 맞추어 진행되기 때문에 제어하기 쉽다.
  • 여러가지 요청을 동시에 처리할 수 없어 효율이 떨어진다.
  • 설계가 간단하다.
  • A노드와 B노드 사이의 작업 처리 단위(transaction)을 동시에 맞추겠다.

 


비동기(Asynchronous) 방식

비동기는 동기의 반대로 동시에 일어나지 않음을 의미합니다.

요청과 결과가 동시에 일어나지 않을 것이라는 약속입니다.

비동기 방식은 동기와 다르게 요청을 한후 응답을 받을 때 까지 기다리지 않아도됩니다.

 

에를 들어 우리가 카카오톡을 할 때를 봅시다.

철수가 심심해서 짱구에게 " 뭐 해 " 라고 카톡을 보냈습니다.

그리고 짱구에게 답장을 받기도 전에 맹구에게 " 뭐 해 " 라고 카톡을 보냈습니다.

비동기를 통해 철수는 짱구에게 카톡을 보냈을 때 답변을 받지 않고도 맹구에게도 카톡을 보낼 수 있습니다.

 

이처럼 비동기는 동기와 다르게 둘의 작업이 동시에 일어나지 않고 작업 처리기간이 일치하지 않아도되며,

요청후 그 요청에 대한 응답을 계속 기다리지 않아도 다른 활동을 할 수 있습니다.

 

 

비동기의 특징
  • 요청을 보내고 해당 동작의 처리 여부와 상관없이 다음 요청이 동작하는 방식작업이 완료되는 시간을 기다릴 필요가 없기 때문에 자원을 효율적으로 사용할 수 있다.
  • 동기보다 설계가 복잡하다.

 

 


동기와 비동기의 차이

  • 동기

설계가 매우 간단하고 직관적이지만, 응답이 주어질 때 까지 아무것도 못하고 대기해야 합니다.

 

  • 비동기

동기보다 설계가 복잡하지만, 결과가 주어지는데 시간이 걸리더라도 그 시간 동안 다른 작업을 할 수 있습니다.