개요
크게 시스템을 나누면 요청자와 제공자로 나눌 수 있습니다.
요청을 할 때와 제공을 할 때 어떤 방식으로 되어 있는지에 대해서 논의해야 하는 경우에
동기와 비동기, 블럭킹과 넌블럭킹을 다루어야 합니다.
아래 네 가지 형태로 구성될 수 있습니다.
- 동기 + 블럭킹
- 동기 + 넌블럭킹
- 비동기 + 블럭킹
- 비동기 + 넌블럭킹
위에 내용처럼 동기 != 블럭킹, 비동기 != 넌블럭킹이 아니라는걸 알 수 있습니다.
REST API는 동기 방식이고 넌블럭킹방식으로 통신으로 하며, frontend와 backend는 대부분 동기 + 넌블럭킹 방식으로 구현합니다.
동기 : Synchronous
그럼처럼 두명이 손을 잡고 있는것처럼 동시에 어떤 일을 하는걸 의미
요청자와 제공자 사이에 지속적으로 Connection을 가지고 있는 상태로 세션을 가지고 통신
- 요청한 결과가 한 자리에서 동시에 일어나는걸 의미
- 서로 다른 노드가 작업 처리 단위를 동시에 함
- 순차적으로 일을 처리
비동기 : Asynchronous
그럼처럼 두명이 각자 일을 하고 있다가 전화라는 이벤트를 통해 서로 통신하는걸 의미
요청자와 제공자 사이에 Connection이 없는 상태로 이벤트를 통해 통신
- 요청한 결과가 동시에 일어나지 않는걸 의미
- 서로 다른 노드가 작업 처리 단위를 맞추지 않아 동시에 일어나지 않음
- 병렬적으로 일을 처리
블럭킹 : Blocking
그림처럼 한명이 다른 사람에게 일을 해달라고 요청하고 요청 받은 사람이 다할 때까지 기다리는걸 의미
요청하고 응답이 올때까지 기다렸다가 응답이 오면 다른일을 하거나 결과를 처리하는 방식
넌블럭킹 : Non-Blocking
그림처럼 요청을 하고 나서 다른 일을 하다가 요청한 일이 끝나면 응답을 받는걸 의미
요청을 하고 다른 일을 하다가 응답이 오면 결과를 읽어서 처리하는 방식
상황별 : 상사와 직원
동기와 블럭킹
상사 : 쿼리 좀 작성해주세요
직원 : 넵. 기다려주세요
직원 : (쿼리 짜는중)
상사 : (쿼리 짜는걸 뒤에서 말 없이 지켜보고 있음)
동기와 넌블럭킹
직원 : 지출결의서 결제 요청드립니다.
상사 : 놓고 가셔서 해야 할 일 하세요.
직원 : 넵. (할 일 하는중)
직원 : 결제하셨나요?
상사 : 아직이요
직원 : 결제하셨나요?
상사 : 아직이요!
비동기와 블럭킹
직원 : 지출결의서 결제 요청드립니다.
상사 : 네. 잠시만 기다려주세요.
직원 : (할 일 많은데..?!)
직원 : (해야 할 일 많은데 결제 요청했다가 할 일 못하고 기다리면서...할 일 생각뿐임)
상사 : (결제 진행중)
비동기와 넌블럭킹
상사 : 쿼리 좀 작성해주세요.
직원 : 넵. 작성하고 말씀드릴게요
상사 : (할일 하는 중)
직원 : (쿼리 짜는 중)
직원 : 쿼리 다 작성했습니다.
상사 : 오킹
'개발(합니다) > 컴퓨터 일반&CS' 카테고리의 다른 글
[티스토리] 티스토리 오픈 API 사용 방법 (0) | 2021.10.09 |
---|---|
[CS] OOP-객체지향 생활 체조 9가지 (1) | 2021.08.28 |
[알고리즘]백트레킹 (0) | 2019.01.13 |
[알고리즘]동적 계획법, 탐욕(그리디) 알고리즘 (0) | 2019.01.13 |
[알고리즘]분할 정복 (0) | 2019.01.12 |