Page 15 -
P. 15
그림 1-3 노드의 내부 구조
Node.js Core Library
1
Node.js Bindings
V8 libuv 노드 시작하기
오픈 소스 비동기 I/O
자바스크립트 엔진
노드는 V8과 더불어 libuv라는 라이브러리를 사용합니다. V8과 libuv는 C와 C++로 구현되어
있습니다. 여러분이 코딩한 자바스크립트 코드는 노드가 알아서 V8과 libuv에 연결해주므로, 노
드를 사용할 때 C와 C++는 몰라도 됩니다.
libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있습니다. 이 모
델이 무엇이고 어떤 장단점들이 있는지 알아봅시다.
1.1.3 이벤트 기반
이벤트 기반(event-driven)이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미합
니다. 이벤트로는 클릭이나 네트워크 요청 등이 있을 수 있습니다.
이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두어야 합니다. 이를
이벤트 리스너(event listener)에 콜백(callback) 함수를 등록한다고 표현합니다. 버튼을 클릭할 때 경
고창을 띄우도록 설정하는 것을 예로 들어보겠습니다. 클릭 이벤트 리스너에 경고창을 띄우는 콜백
함수를 등록해두면 클릭 이벤트가 발생할 때마다 콜백 함수가 실행되어 경고창이 뜨는 것입니다.
노드도 이벤트 기반 방식으로 동작하므로, 이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백 함
수를 호출합니다. 발생한 이벤트가 없거나 발생했던 이벤트를 다 처리하면, 노드는 다음 이벤트가
발생할 때까지 대기합니다.
그림 1-4 이벤트 기반
2. 이벤트 발생
이벤트 리스너
1. 이벤트 리스너에
시스템
콜백 함수 등록
3. 등록된 콜백 함수 호출
27
node_06.indd 27 2020-07-14 오전 11:01:51