[WEB] 블로킹/논블로킹 and 동기 / 비동기
Blocking / Non-blocking
Blocking방식은 요청하고 응답 올때까지 기다리는 방식이고, Non-Blocking방식은 요청하고 딴일하다 나중에 응답신호가 오면 결과를 읽어 처리하는 방식
Synchronous / Asynchronous
동시에 발생하는 것들(always plural, can never be singular).
동시라는 것은 즉, 시(time)라는 단일계(system)에서 같이, 함께 무언가가 이루어지는 두 개 이상의 개체 혹은 이벤트를 의미한다고 볼 수 있겠습니다.
본격 Case Study
대표님, 개발자 좀 더 뽑아주세요..
Blocking & Synchronous
나 : 대표님, 개발자 좀 더 뽑아주세요..
대표님 : 오케이, 잠깐만 거기 계세요!
나 : …?!!
대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
나 : (과정 지켜봄.. 궁금함.. 어차피 내 일 하러는 못 가고 계속 서 있음)
Blocking & Asynchronous
나 : 대표님, 개발자 좀 더 뽑아주세요..
대표님 : 오케이, 잠깐만 거기 계세요!
나 : …?!!
대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
나 : (안 궁금함.. 지나가는 말로 여쭈었는데 붙잡혀버림.. 딴 생각.. 못 가고 계속 서 있음)
Non-blocking & Synchronous
나 : 대표님, 개발자 좀 더 뽑아주세요..
대표님 : 알겠습니다. 가서 볼 일 보세요.
나 : 넵!
대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
나 : 채용하셨나요?
대표님 : 아직요.
나 : 채용하셨나요?
대표님 : 아직요.
나 : 채용하셨나요?
대표님 : 아직요~!!!!!!
Non-blocking & Asynchronous
나 : 대표님, 개발자 좀 더 뽑아주세요..
대표님 : 알겠습니다. 가서 볼 일 보세요.
나 : 넵!
대표님 : (채용 공고 등록.. 지원자 연락.. 면접 진행.. 연봉 협상..)
나 : (열일중..)
대표님 : 한 분 모시기로 했습니다~!
나 : 😍
- 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않으면 Block (ex. 내가 대표님을 호출했지만 대표님이 기다리라고 한 상황)
- 호출된 함수가 자신이 할 일을 채 마치지 않았더라도 바로 제어권을 건네주어(return) 호출한 함수가 다른 일을 진행할 수 있도록 해주면 Non-block (ex. 대표님이 나보고 볼 일보라고함)
- 호출된 함수의 수행 결과 및 종료를 호출한 함수가(호출된 함수뿐 아니라 호출한 함수도 함께) 신경 쓰면 Synchronous (ex. 내가 계속 채용과정을 옆에서 지켜보고 있음)
- 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경 쓰고 처리한다면(as a callback fn.) Asynchronous (ex. 대표님이 알아서 뽑아주심)
동기방식(sync)은 요청자와 제공자사이에 계속 Connection이 맺어져 있어야 하고, 비동기방식(async)은 Connection은 끊어지고 서로간에 이벤트를 통해 통신하는 방식이다.
비동기방식(async)은 요청자와 제공자 사이에 Message Broker라는 또 다른 서비스가 중계해주지만, 동기 방식은 요청자 어플리케이션에 non-blocking처리를 하는 로직이 있다.
최근 흔히 사용하는 REST API는 동기(sync) 방식이고 보통 Non-Blocking방식으로 통신한다(Feat. WebClient)
Frontend와 backend사이는 거의 대부분 동기+non-blocking 방식으로 구현한다고 함
참조
https://musma.github.io/2019/04/17/blocking-and-synchronous.html
https://happycloud-lee.tistory.com/154