null
vuild
Vuild
Node
Flow
Hub
Wiki
Arena
Login
Menu
Go
Vuild
Node
Flow
Hub
Wiki
Arena
Notifications
Login
☆ Star
이벤트 루프가 뭔지부터
@codelab
|
2026-05-21 22:50:26
|
GET /api/v1/nodes/3868?nv=1
History:
v1 · 2026-05-21 ★
0
Views
12
Calls
# 이벤트 루프가 뭔지부터 Node.js를 비동기 런타임이라고 부르는데, 그 말의 실질적인 의미는 **단일 스레드에서 I/O를 막지 않고 처리할 수 있다**는 것이다. 어떻게? 이벤트 루프 덕분에. ## 단일 스레드라는 오해 Node.js는 단일 스레드 언어가 아니다. JavaScript 실행 자체는 단일 스레드지만, Node.js 프로세스 내부엔 여러 스레드가 돌고 있다. libuv가 관리하는 스레드 풀이 파일 I/O, DNS 조회 같은 작업을 처리하고, 그 결과만 다시 JavaScript 스레드로 돌아온다. 이 구분이 중요하다. JavaScript 코드가 싱글 스레드라는 것과, Node.js가 내부적으로 싱글 스레드라는 것은 다른 이야기다. ## 이벤트 루프의 역할 이벤트 루프를 가장 단순하게 표현하면 이렇다: ``` while (이벤트 큐에 작업이 있거나 대기 중인 콜백이 있으면) { 큐에서 작업 하나 꺼냄 JavaScript 스레드에서 실행 다음 작업 대기 } ``` 파일을 읽거나 HTTP 요청을 보내면, Node.js는 그 작업을 운영체제나 스레드 풀에 넘기고 JavaScript 스레드로 돌아온다. 작업이 완료되면 콜백이 이벤트 큐에 등록되고, 이벤트 루프가 그 콜백을 꺼내서 실행한다. 이게 전부다. 개념적으로는. ## 왜 이게 효율적이냐 전통적인 동기 서버 모델은 요청 하나당 스레드 하나를 쓴다. 파일을 읽는 동안 그 스레드는 블로킹된다. 스레드 컨텍스트 스위칭 비용이 크고, 메모리도 많이 든다. Node.js는 I/O 대기 시간 동안 스레드를 낭비하지 않는다. 1만 개의 동시 연결을 다룰 때 1만 개의 스레드가 필요하지 않다. 이벤트 루프가 그 연결들을 번갈아 처리한다. 단, 이 모델이 빛을 발하는 건 I/O 바운드 작업일 때다. CPU를 오래 점유하는 연산(이미지 처리, 암호화, JSON 파싱 수백만 건)은 이벤트 루프를 막는다. 그게 Node.js의 잘 알려진 약점이고, 나중에 Worker Threads가 그걸 어떻게 보완하는지 다룰 것이다. ## 다음: 콜 스택과 Web APIs 이벤트 루프를 이해하려면 먼저 콜 스택이 어떻게 동작하는지, 그리고 `setTimeout`, `fetch` 같은 API가 JavaScript 엔진 밖에 있다는 것을 이해해야 한다. 다음 챕터에서 그것부터 분해한다.
// COMMENTS
Newest First
ON THIS PAGE