이벤트 루프는 Node.js에서 이벤트 기반(non-blocking) I/O 모델을 구현하기 위한 핵심 개념 중 하나입니다.
Node.js는 이벤트 기반으로 비동기 처리를 하고,
이벤트 루프는 이벤트 큐에서 이벤트를 가져와 처리하는 역할을 담당합니다.
이벤트 루프는 노드의 내부적인 동작 원리 중 하나로, Call Stack, Task Queue, Event Queue 3가지 개념으로 구성됩니다.
Call Stack은 코드 실행 중 현재 실행중인 함수를 기록하는 스택 자료구조입니다.
Task Queue는 비동기 처리가 끝난 후 실행할 콜백 함수를 보관하는 큐 자료구조입니다. Event Queue는 이벤트 발생 시 처리할 콜백 함수를 보관하는 큐 자료구조입니다.
이벤트 루프의 동작 방식은 다음과 같습니다.
Call Stack이 비어있으면, Event Queue에서 이벤트를 가져와 Call Stack에 넣습니다.
Call Stack에서 이벤트를 처리합니다.
비동기 처리 함수(setTimeout, setInterval 등)가 호출되면, Call Stack에서 해당 함수를 제거하고, Task Queue에 콜백 함수를 보냅니다.
Call Stack이 다시 비어있으면, Task Queue에서 콜백 함수를 가져와 Call Stack에 넣습니다.
Call Stack에서 콜백 함수를 처리합니다.
이렇게 Event Queue와 Task Queue를 활용하여 비동기 처리와 이벤트 처리를 구현합니다.
이벤트 루프 설명 https://nodejs.org/ko/docs/guides/event-loop-timers-and-nexttick
이벤트 루프에 대한 시각적 설명 http://latentflip.com/loupe
자바스크립트는 함수도 하나의 자료형이므로 매개변수로 전달할 수 있습니다. 이렇게 매개변수로 전달하는 함수를 콜백함수라고 합니다. 콜백함수는 태스크가 끝나기 전에 함수가 실행되지 않는 것을 보장합니다. 다르게 말하자면 콜백은 그 태스크가 끝난 직후에 실행되기 때문에 비동기 자바스크립트 코드를 작성할 수 있도록 해주고 여러 문제와 에러들로부터 안전하게 지켜줍니다. 콜백함수를 만드는 방법은 어떤 함수의 파라미터로써 함수를 넘기고 어떤 행위나 태스크가 완료된 직후에 콜백 함수를 호출하는 것입니다.