Page 16 -
P. 16
이벤트 기반 모델에서는 이벤트 루프(event loop)라는 개념이 등장합니다. 여러 이벤트가 동시에
발생했을 때 어떤 순서로 콜백 함수를 호출할지를 이벤트 루프가 판단합니다. 이 책을 읽는 여러
분은 자바스크립트의 기본을 알고 있으므로 이벤트 루프 역시 이미 익숙하겠지만, 노드와 자바스
크립트에서 이벤트 루프는 정말 중요한 개념이니 간략히 설명하겠습니다.
노드는 자바스크립트 코드의 맨 위부터 한 줄씩 실행합니다. 함수 호출 부분을 발견했다면 호출한
함수를 호출 스택(call stack)에 넣습니다. 다음 코드가 콘솔(브라우저 콘솔을 사용하면 됩니다. 크
롬의 경우 F12 를 눌렀을 때 나오는 개발자 도구의 Console 탭입니다)에 어떤 로그를 남길지 예측
해보세요. 만약 예측하기 어렵다면 자바스크립트를 복습해야 합니다.
function first() {
second();
console.log('첫 번째');
}
function second() {
third();
console.log('두 번째');
}
function third() {
console.log('세 번째');
}
first();
first 함수가 제일 먼저 호출되고, 그 안의 second 함수가 호출된 뒤, 마지막으로 third 함수가 호
출됩니다. 실행은 호출된 순서와 반대로 실행이 완료됩니다. 따라서 콘솔에는 세 번째, 두 번째,
첫 번째 순서로 찍히게 됩니다. 이를 쉽게 파악하는 방법은 호출 스택을 그려보는 것입니다.
그림 1-5 호출 스택
third()
second()
이 순서로 이 순서로
쌓이고 실행됨
first()
anonymous
그림 1-5에서 anonymous 함수는 처음 실행 시의 전역 컨텍스트(global context)를 의미합니다. 컨
텍스트는 함수가 호출되었을 때 생성되는 환경을 의미합니다. 자바스크립트 코드는 실행 시 기
본적으로 전역 컨텍스트 안에서 돌아간다고 생각하는 게 좋습니다. 함수는 실행되는 동안 호
28
node_06.indd 28 2020-07-14 오전 11:01:52