카테고리 없음

[Node.js] 동기와 비동기 정복하기 (1/2)

장일규 2022. 5. 27. 11:39

Node.js 애플리케이션에 특징 중 하나는 Single Thread방식으로 비동기 방식으로 빠른 속도로 처리할 수 있다는 특징이 있습니다.

 

오늘은 동기(Synchronized)에 대해서 공부해 보겠습니다.!

 

일상생활에서 콜센터에 전화를 할 때 동기 방식으로 수행된다면 어떤 방식으로 진행이 되는지 공부해보겠습니다.

 

콜센터에 적용하여 동기 방식을 비유

이번에 제주도 비행기 티켓이 무려 50% 세일을 하는 바람에 많은 고객들이 예매를 위해 콜센터에 전화를 합니다.

 

상담사는 한 명밖에 없기 때문에 먼저 걸려온 한 명에 고객 요청이 다 끝날 때까지, 나머지 사람들은 연결된 상태에서 대기해야 합니다.

 

실 생활에서 동기에 대해서 다뤄봤다면, 웹에 적용해보겠습니다.

✅웹에 적용하여 동기 방식을 비유

 

1. 클라이언트가 서버로 데이터 조회를 요청합니다.

 

 

 

1. 사용자 요청 값을 DB에 전달합니다.

서버는 클라이언트에 요청을 처리하기 위해서 스레드를 할당합니다.

서버는 데이터를 조회하기 위해서 DB에 접근하여 결과를 가져오기까지 시간적 비용이 발생합니다.

결과를 가져오는 동안 스레드는 다른 클라이언트에 요청에 대한 처리를 할 수가 없습니다.

마치, 스레드는 일상생활에서 콜센터 상담원과 같은 역할입니다.

 

다른 요청을 처리하기 위해서는 새로운 스레드가 필요합니다.

 

다시 일상생활에 예로 여러 클라이언트에 주어진 요청들을 동시다발적으로 처리한다고 했을 때, 모든 스레드를 다 사용하게 될 수 있습니다.

이 경우에는, 새로운 요청에 대해서는 클라이언트가 스레드가 반납이 될 때까지 기다려야합니다. 또는, 기다리는 것을 방지하기 위해서 하드웨어를 추가해야 합니다.

 

마치며

노드에서는 동기적(blocking) 아키텍처로 자원을 효과적으로 사용할 수 없습니다.

스레드는 한정적이고, 추가적인 작업이 필요합니다.

 

node 애플리케이션은 기본적으로 비동기적으로 작동하기에 추가적인 작업이 필요 없습니다.

Single Thread로 동작하고 모든 요청을 바로 이 하나의 스레드가 맡아서 처리합니다.

다음 시간에는 Node에서 비동기에 대해서 학습해 보겠습니다.