오답노트

node.js 기초 - 1. 이벤트루프 본문

node.js

node.js 기초 - 1. 이벤트루프

장비 정 2021. 6. 14. 15:04

node.js (이하 노드) 는 Chrome V8 Javascript 엔진으로 빌드 된 Javascript 런타임.

(런타임 : 특정 언어로 만든 프로그램들을 실행할 수 있는 환경)

 

노드는 자바스크립트 어플을 실행할 수도 있지만, 주로 서버 어플을 실행하는 데 제일 많이 사용 된다.

 

노드 내부 구조

 : Node.js Core Library -> Node.js Bindings -> V8, libuv

(libuv : 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현.)

 

1. 이벤트 기반.

 : 이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식 (클릭, 네트워크 요청 등)

 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두어야 함. (이벤트 리스너(event listener) 에 콜백(call back)을 등록.) e.g. 버튼을 클릭할 때마다 경고창을 띄우도록 설정하는 것을 예를 들면, 클릭 이벤트 리스너에 경고창을 띄우는 콜백 함수를 등록해두면 클릭 이벤트가 발생할 때마다 경고창이 나타남.

 노드도 이벤트 기반 방식으로 동작하므로, 이벤트가 발생하면 이벤트 리스너에 등록 된 콜백 함수를 호출. 발생한 이벤트가 없거나 발생한 이벤트가 종료 되면 노드는 다음 이벤트가 발생할 때까지 대기.

 

 이벤트 루프란 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할 것인지 판단.

 노드는 자바스크립트 코드의 맨 위부터 한 줄씩 실행. 함수 호출 부분을 발견하면 호출한 함수를 함수 스택(casll stack)에 저장. 그 후 함수 스택의 윗쪽부터 차례대로 실행.

 

function first() {
    second();
    console.log('첫 번째');
}

function second() {
    third();
    console.log('두 번째');
}

function third() {
    console.log('세 번째');
}

first();

 

 위에서 설명한 것처럼 함수가 호출 될 때마다 함수 스택에 쌓인다. (first, second, third 순) 그 후, 함수가 실행 될 때는 함수 스택에 쌓인 순서의 반대순서로 실행이 된다. (third, second, first 순)

 stack 이라는 말처럼, 순서대로 쌓인 함수들을 위에서부터 다시 차례대로 꺼내와 실행시킨다고 생각하면 된다. 또, 그렇게 실행 된 함수는 함수 스택에서 지워진다.

 

  • 이벤트 루프(event loop) : 이벤트 발생 시 호출 할 콜백 함수들을 관리하고, 호출 된 콜백 함수의 실행 순서를 결정하는 역할을 담당한다. 노드가 종료 될때까지 이벤트 처리를 위한 작업을 반복하므로 루프(loop)라고 부른다.
  • 백그라운드(back-ground) : setTimeout 같은 타이머나 이벤트 리스너(event listener) 들이 대기하는 곳. 자바 스크립트가 아닌 다른 언어로 작성 된 프로그램이라고 봐도 무방. 여러 작업이 동시에 실행 될 수 있음.
  • 태스크 큐(task qeue) : 이벤트 발생 후 백그라운드에서는 태스크 큐로 타이머나 이벤트 리스너의 콜백 함수를 보냄. 정해진 순서대로 콜백들이 줄을 서있으므로 콜백 큐라고도 부름. 콜백들은 보통 완료 된 순서대로 줄을 서있지만 특정한 경우에는 순서가 바뀌기도 한다.

 

'node.js' 카테고리의 다른 글

006_formatting_2.js  (0) 2021.06.15
005_formatting_1.js  (0) 2021.06.15
004_hello.js  (0) 2021.06.15
003_es6.js  (0) 2021.06.15
node.js 기초 - 2. 논블로킹 I/O  (0) 2021.06.14