본문 바로가기

Back-End/NodeJS

1. Asynchronous Event-Driven 프로그래밍에 관하여 - Mastering Node.js

Asynchronous Event driven 프로그래밍에 관하여

Node는 event-driven, asynchronous I/O를 이용하여 프로세스가 blocking 되는걸 방지해준다. 

이번 포스팅에서는 Node를 이용하여 어떻게 이벤트 드리븐 프로그래밍을 구현하는지 알아볼 것이다. 

1. 노드가 timers, callbacks, I/O events를 어떻게 다루는지 

2. Promises, Generator, asyns/await를 이용하여 어떻게 동시성을 제어하는지 

이 포스팅의 예제를 살펴보면, Node가 왜 성공했는지 살펴볼 수 있다고 한다...(?)

Node`s Unique design


Event loop

  • Event loop는 Javascript 코드가 돌고 있는 thread에서 동작한다. 이벤트를 블라킹하는 것은 결국 전체 스레드를 블라킹하는 것이다.
  • Event loop는 많은 I/O 작업들을 libuv에게 위임한다. 

Node 문서에 따르면, 
이벤트 루프( Event loop ) 는 Node.js가 non-blocking I/O작업을 할 수 있도록 해준다. 자바스크립트가 단일 스레드임에도 불구하고

가능할 때마다 이러한 작업들을 시스템 커널단에 위임하기 때문이다.

노드 아키텍처를 구축할 때, 이벤트 루프를 Concurrency 매니저 역할로 취급한다.

이벤트드리븐 프로그래밍이 어떻게 동작하고, Node에서 이벤트들이 어떻게 처리되는지 이해하고 싶다면 http://www.princeton.edu/~achaney/tmve/wiki100k/docs/Event-driven_programming.html 해당 url을 참고하면 좋을 것이다.

하나의 예제를 살펴보자.

const fs = require('fs');
fs.readFile('foo.js', {encoding:'utf8'}, (err, fileContents) => {
console.log('Then the contents are available', fileContents);
});
console.log('This happens first');

해당 과정이 어떻게 흘러가는지... TODO