본문 바로가기
IT_Developers/Node.js

Node.js - 싱글 스레드(Single thread), 비동기(Asynchronous) 이란?

by 고코더 2019. 11. 22.

노드JS가 운영되는 방식


안녕하세요.
고코더 입니다.


Node.js의 가장 큰 특징이라고 하면 싱글 쓰레드에 비동기 처리 방식입니다. 사용자의 요청은 한 곳에서 받지만 작업은 실질적으로 멀티쓰레드로 운영하여 결과를 구현합니다.
예제로 이 방식을 표현해보겠습니다.


 1. 싱글 스레드, 비동기 예제



" 따뜻한 오후 서점 독서중인 고코더는 배가 고파서 푸드코트로 이동합니다. 
주문 방식은 먼저 한식,중식,일식,양식등 다양한 입점사들의 요리를 보고 선택을 합니다.
그리고 계산대 앞에서 줄을 섭니다. 앞 손님은 돈까스를 주문합니다. 저는 요리 시간이 오래 걸리는 스테이크를 주문했습니다. 제 뒤에 기다리던 분은 재 빠르게 라면 하나를 주문합니다.
카운터 점원이 계산을 하면서 호출벨을 나눠주고 요리에 맞는 입점사 식당에 주문을 입력합니다. 입점식당은 주문 모니터에 "돈까스 1인분" 내역을 확인하고 요리에 들어갑니다.


고코더는 ITExpress 블로그에서 코딩 강의를 보면서 주문 벨을 만지작 거리면서 기다립니다. 저보다 늦게 주문한 라면이 제일 먼저 나오네요.
그리고 제 앞에서 돈까스를 주문했던 분도 음식을 픽업하고 자리에 돌아옵니다. 그리고 조금 기다리니 제 호출벨이 울리고 마지막으로 제가 주문한 스테이크를 가지러 갑니다. "

요즘 대부분 푸드코트가 운영되는 방식입니다. 계산은 한군데서 요리는 각 입점사가 하는 방식입니다.

여기서 푸드코트 계산을 담당하는 직원은 싱글 스레드 입니다. 
그리고 각 요리를 만들어서 벨을 호출하는 식당들은 비동기 방식입니다. 

입력은 하나의 스레드에서 받지만 순서대로 처리 하지 않고 먼저 처리된 결과 값을 반환해주는 방식이 바로
노드가 사용하는 싱글 스레드 비동기 방식입니다.

그렇다면 멀티 스레드 방식으로 운영되는 푸드코트는 어떨까요?


 2. 멀티 스레드, 동기 방식



어릴적 갔던 푸드코트들은 입주 식당마다 계산 점원이 따로 있었습니다. 
각 먹고 싶은 식당 앞에서 줄을 서고 계산하고 음식을 기다리는 방식입니다. 
배가 너무 고파서 오늘은 중식과 한식을 동시에 먹고 싶다면 각 식당에서 줄을 서고 결제를 합니다. 
음식점 마다 서있는 사람들로 인해 복잡하고 음식점들도 계산을 하는 직원이 한명씩 더 필요했습니다. 

만약 아주 큰 공간에 직원이 충분한 식당들로 이루어진 구조라면 물런 멀티스레드 동기 방식이 유리할 수도 있습니다.



마무리



하지만 최소한에 자원으로 최대한에 효율을 이끌어야 하는 인프라에 기본을 생각한다면 비동기가 좋지 않을까요?


댓글