이벤트 루프와 콜백 함수

이정기·2023년 4월 13일
0

TIL

목록 보기
53/71
post-thumbnail

Node를 다룬다면 Node가 어떤 구성을 하고 있고, 어떻게 동작되는지 알아야 한다 생각했다.

Node는 싱글 스레드 논 블로킹 기반인데, 싱글 스레드로 어떻게 여러 작업을 한 번에 처리 할 수 있는지 알아봤다.

이벤트 루프 (Event Loop)

Node.js 는 싱글 스레드 논 블로킹, 즉 하나의 스레드로 동작하지만 입출력(I/O)이 발생할 경우, 이를 비동기적으로 처리할 수 있다.

하나의 스레드는 하나의 실행흐름만을 가지고 있고 파일 읽기 와 같이 기다려야 하는 작업을 실행하면 그 작업이 끝나기 전까진 아무것도 할 수 없어야 한다.
<파일 읽기와 같은 입출력 작업은 외부 장치(하드디스크, 네트워크 등)와의 상호작용이 필요하므로 많은 시간이 소요되는데, 이러한 작업을 실행하는 동안 스레드가 다른 작업을 수행하게 되면 해당 작업이 완료되기 전에 결과를 알 수 없기 때문에 예측할 수 없는 결과를 낳을 수 있다.>

하지만 Node.js 는 하나의 스레드로 여러 비동기 작업들을 블로킹 없이 수행할 수 있는데 그 기반엔 이벤트 루프 가 존재

Node.js 의 구성

Node.js 는 C++ 로 작성된 런타임이고, 내부에 V8 Engine 을 가지고 있어 자바스크립트를 로컬에서 실행 할 수 있다.

그 외에 libuv(리버브) 라는 라이브러리가 존재하는데 Node.js 는 입출력 작업을 리버브에 위임함으로써 논 블로킹 입출력을 지원하고 그 기반에 이벤트 루프가 있다. 즉, 리버브 라는 추상화 된 라이브러리가 이벤트 루프라는 기능을 제공

이벤트 루프는 Node.js 가 여러 비동기 작업을 관리하기 위한 구현체!

이벤트 루프 구성

특정 작업을 수행하는 각 페이즈(Phase)

  1. Timer Phase
  2. Pending Callbacks Phase
  3. Idle, Prepare Phase
  4. Poll Phase
  5. Check Phase
  6. Close Callbacks Phase

순서대로 전환되며, 한 페이즈에서 다음 페이즈로 넘어가는 것을 틱(Tick)

각 페이즈는 자신만의 큐(Queue) 를 하나 씩 가지고 있고, 이벤트 루프가 실행해야 하는 작업들이 순서대로 담겨있다.

즉, Node 가 페이즈에 진입하면 에서 코드를 꺼내 하나씩 실행.

에 작업들을 다 실행하거나 실행한도에 다다르면 다음 으로 넘어간다.

이벤트루프에 대한 메트릭을 측정할 수만 있다면, 이 정보들을 이용해 Node.js 어플리케이션에 대한 전반적인 상태나 성능에 대한 중요한 정보들을 알아낼 수 있다.

출처
- 이벤트 루프 샅샅이 분석
- 이벤트 루프 제대로 이해하기

콜백 함수 (Callback Function)

콜백함수는 간단히 함수 안에서 실행하는 또 다른 함수

콜백함수와 이벤트 루프는 서로 밀접한 관계를 가지고 있다. 이벤트루프는 이벤트 발생 시 등록 된 콜백 함수를 호출하는 역할을 수행. 즉, 이벤트 발생 시 등록된 콜백함수를 큐에 넣어두고, 해당 콜백 함수가 실행되도록 한다.

나는 이미 콜백 함수를 이번 프로젝트에서 자주 이용해왔는데, 대표적으로 배열을 쉽게 다룰수 있도록 도와주는 map, filter, find / 시간에 따라 실행하는 함수 setTimeout , setInterval / 이벤트 핸들러 addEventListener 를 이용해왔다.

콜백함수는 공부와 예제를 직접 해볼 필요가 있음으로 나중에 다시 정리 해보자!

출처
자바스크립트 콜백 함수 총 정리

profile
Node.js 로 꿈을 꾸었다..

0개의 댓글