면접에서 동기와 비동기에 대한 개념을 물었다는 얘기를 듣고 찾아봤다.

워낙 기본적인 개념이라 그런지 구글링을 하면 좋은 포스팅들이 많이 보였다.

잘 설명된 글들을 읽다보니 실제 업무에서 나도 모르게 적용되어 있는 개념들이었다.

업무에서 사용하는 RSARTE라는 framework도 정리할 겸 연관지어 정리해보려한다.

 

일단 개념적으로 굉장히 헷갈렸던 것이 있다.

동기 Synchronous 라는 말 자체가 "동시 발생하는" 이라는 뜻인데

동기/비동기를 설명한 그림을 보면 비동기를 표현한 그림들에서 작업들이 동시에 일어난다.

출처 : https://goplanit.site/94.%20Synchronous_asynchronous/

여기서 내가 놓쳤던 것은 주어였다. 동시 발생하는 것은 같은 작업을 의미한다.

다시 말해 같은 일이 동시에 일어난다는 것이다.

이 개념을 잘 설명해둔 예가 다음 블로그에 있다.

https://koras02.tistory.com/87

 

동기와 비동기 개념과 차이

데이터를 받는 방식인 동기와 비동기. 이 둘의 개념에 대해 알아보고 둘의 차이점을 알아보도록 하겠습니다. 1. 동기(synchronous: 동시에 일어나는) - 동기는 말 그대로 동시에 일어난다는 뜻입니다

koras02.tistory.com

 

은행에서 이체를 할 때 A의 계좌에서 차감되는 작업과 B의 계좌에서 추가되는 작업은 동시에 일어나야한다. 실제와는 조금 다르겠지만 서로의 요청과 응답을 확인한 뒤에 A/B는 동시에 작업을 수행하게 되는 것이다.


RSARTE에 대해서 자세히 설명하기는 어렵지만 RSARTE에서 정의된 각각의 capsule은 독립적인 flow를 가지고 있으며 이는 logical thread라고 볼 수 있다.

이 flow 내부에는 state라는 것이 존재하며 각 state 사이를 transition하는 event를 정의할 수 있다.

state는 정의된 tirgger event가 발생하지 않으면 다음 state로 transition될 수 없다.

 

예를 들면

A flow에서 B flow로 B class에 저장된 data를 요청한다. : request message를 보냄

A flow의 a state에서 멈추고 기다린다.

B flow에서 요청된 request message를 보고 data를 저장해서 confirm message를 보낸다.

A flow에서 a state에서 confirm message를 받고 data를 handling하고 b state로 넘어간다.

 

RSARTE는 기본적으로 event-driven 방식이기 때문에 state를 넘어갈 때 보통 request message를 보낸다.

그리고 응답이 오면 다음 state로 넘어가는 방식이다.

응답을 기다리기 때문에 동기 방식이라고 생각했었는데 위 블로그의 설명된 개념으로 보면 비동기 방식의 예와 비슷하다.

블로그를 보고 다시 생각해보니 A flow와 B flow는 다른 thread이고 다른 작업을 하고 있기 때문에 비동기가 맞는 것 같다. 다만 헷갈렸던 이유는 블럭/논블럭 개념 때문이었다.

 

여기서 A flow의 a state에서 아무 일도 하지 않고 기다리고 있다는 것을 블록 상태라고 한다.

그렇다면 위 예는 비동기/블록 방식으로 구현되어 있는 것이다.

만약 a state에서 응답을 기다리지 않고 다른 작업이 수행된다면 논블록 상태라고 할 수 있다.

 

위에서 언급한 은행 이체 예도 마찬가지이다. A의 계좌가 B의 계좌에 이체 요청을 하고 다른 입금이나 송금 작업을 하지 못한다면 블록 상태이고 다른 작업을 수행하고 있다면 논블록 상태라고 할 수 있다.

 

이 글이 동기/비동기 개념과 블록/논블록 개념을 잘 설명해두었다.

https://okky.kr/article/442803

 

블럭/논블럭, 동기/비동기를 별거 아닌 개념이라고 생각했지만 이 글의 댓글을 보면서 이 기본적인 개념에서도 다양한 의견들이 있구나 싶었다.

 

'Computer Science' 카테고리의 다른 글

[네트워크] WEB과 WAS  (0) 2022.04.09
OS(운영체제)  (0) 2022.03.10
백엔드 개발자로서 필요한 CS 지식?  (0) 2022.02.15

+ Recent posts