이벤트 기반 비동기 방식 (Event Driven Non-blocking)

이전 Node.js와 친해지기 글에서 잠깐 언급 했었던 Node.js의 특징 중 하나인 이벤트 기반 비동기 방식에 대해 정리해 보려 한다.
학부 때 들었던 강의 자료에서는 간단하게 적혀 있었는데, 함께 보고 있는 책에서 해당 내용을 예시와 함께 설명하고 있어 참고했다.
(책 이름은 글 마지막 참고 부분에 링크로 첨부 🤓)


image 평소 가던 시장에 주말이라 사람이 많아서 위와 같이 가게마다 대기 시간이 있다고 가정해 보자. 각 가게마다 기다렸다가 물건을 구입하면 총 27분의 시간이 걸린다. 이를 단축하는 방법은 두 가지이다.

첫번째, 몸을 복제 해서 동시에 여러 가게에 간다.

image

이렇게 몸을 4개로 복제해 각 가게에 가면 약 9분 안에 물건을 구입할 수 있다.

이런 방법이 기존 네트워크 애플리케이션이 사용하는 스레드 기반 동기 방식이다.
작업 요청이 들어올 때마다 스레드를 여러 개 만들어 동시에 일을 처리하며, 일이 많으면 스레드를 많이 만들어야 해서 메모리 사용량이 계속 증가한다는 단점이 있다.

두번째, 시장에 대기 시스템을 도입해 대기표를 받고 기다린다.

image

각 가게를 돌면서 대기표를 받고, 대기 번호를 부르면 가게에 가서 물건을 구입한다. 이 방법 역시 약 9분 안에 모든 물건을 구입할 수 있다.

이런 방법이 Node.js에서 사용하는 이벤트 기반 비동기 방식이다.
스레드가 하나이지만 이벤트를 사용하기 때문에 빠른 속도로 일을 처리할 수 있으며, 일이 많아져도 스레드가 하나이기 때문에 메모리 사용량과 같은 시스템 리소스 사용량에는 변화가 거의 없다.

하지만, 일을 처리하는 한 명(스레드)이 쓰러지는 순간 프로그램 전체에 문제가 발생한다는 문제점이 있다.

사실!
Node.js도 내부적으로는 여러 개의 스레드가 스레드 풀로 동작한다.
또한 실제 웹 서버를 운용할 때는 코어를 분산해 관리하므로, 하나의 스레드만 사용한다고 볼 수 없다.

즉, 개발자가 스레드 하나를 운용하듯 프로그래밍 하면 플랫폼이 여러 스레드를 효율적으로 운용한다.


📚 참고

모던 웹을 위한 Node.js 프로그래밍 (저자:윤인성)

Joie-Kim

Joie-Kim

배운 것을 기록하는 습관! ✍️

comments powered by Disqus
rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin pinterest medium vimeo stackoverflow reddit quora quora