node.js의 비동기적 작동은 어디로부터 왔는가(2)

김성윤·2023년 4월 25일
0

이 글은 node.js 디자인 패턴 바이블 도서를 읽고 정리한 내용입니다

리액터(Reactor) 패턴

리액터 패턴의 이면에 있는 주된 아이디어는 각 I/O 작업에 연관된 핸들러를 갖는다는 것이다 node.js에서의 핸들러는 콜백 함수에 해당

  1. 애플리케이션은 이벤트 디멀티플렉서에 요청을 전달함으로써 새로운 I/O 작업을 생성한다. 또한, 애플리케이션은 작업이 완료되었을 때 호출될 핸들러를 명시한다.
  2. I/O 작업 완료시 이벤트 디멀티플렉서는 대응하는 이벤트 작업을 이벤트 큐에 넣는다.
  3. 이벤트 루프가 큐의 항목을 순환한다
  4. 각 이벤트에 맞는 핸들러 호출
  5. 핸들러 실행이 완료되면 제어권을 이벤트 루프레 돌려준다(5a), 핸들러 실행 중 다른 비동기 작업을 요청할 수 있으며(5b), 이는 이벤트 디멀티플렉서에 새로운 항목을 추가하는 것이다.
  6. 이벤트 큐의 모든 항목이 처리되고 나면 이벤트 루프는 블로킹된다.

Reactor 패턴은 일련의 관찰 대상 리소스에서 새 이벤트를 사용할 수 있을 때까지 블로킹하여 I/O처리하고, 각 이벤트를 관련된 핸들러에 전달함으로써 반응한다

libuv

C 언어로 만들어진 라이브러리로, node.js를 주요 운영체제에서 호환되게 해주며, 서로 다른 리소스 유형의 논 블로킹 동작을 표준화하기 위해 만들었다.
node.js의 구성요소 중에서 가장 중요하다고 말할 수 있음.
이벤트 루프 생성, 이벤트 큐 관리, 비동기 I/O 작업 실행, 다른 유형의 작업을 큐에 담기위한 API들을 제공한다

node.js를 위한 구성

  • libuv와 다른 저수준 기능들을 래핑하고 표출시키기 위한 바인딩 셋
  • V8, 크롬 브라우저를 위해 구글이 개발한 JS엔진으로, node.js가 빠르고 효율적인 이유이기도 하다.
  • 고수준 node.js를 구현하고 있는 코어 JS 라이브러리

어떤 위대하신 분이 이벤트 루프에 대하여 친절하게 정리해주셨다.
https://www.korecmblog.com/node-js-event-loop/

profile
Nest.js 백엔드 개발자

0개의 댓글