TIL-sparta

[TIL] 스파르타) Node.js 강의 수강

Megadr0ne 2024. 5. 11. 22:57

 

 > 주말 간에 Node.js 강의를 1-5까지 수강하고 배운 내용을 짧게 정리해보았다(강의노트 ~1-2). 몇 년 전에 Node.js를 사용하여 프로젝트를 진행할 때는 몰랐던 기반 구조와 관련된 부분들을 배웠다. Event loop와 관련된 부분은 어떻게 활용하는지 새 프로젝트를 진행하면서 체득해 나가야겠다.

 

학습 키워드: javascript, Node.js, event loop, non-blocking I/O, event queue

 

Node.js

1) What is it?:

 - Node.js: Chrome V8 JavaScript 엔진(C 기반)으로 빌드된 JavaScript 런타임으로, 'single threaded event loop' 방식이다. Single thread는 일반적으로 하나의 작업이 완료되기 전에는 다른 작업의 실행이 중단되는 blocking 모델인데, Node.js의 경우 libuv(C++기반, lib-u-v로 발음한다고 함)를 이용하여 구현된 event loop를 통해 I/O 작업을 처리하는 non-blocking I/O 방식이다.

 

2) How does it work?:

 - Non-blocking I/O: 호출된 I/O작업 함수의 작업 완료 여부와 관계 없이 호출한 함수에게 즉시 제어권을 돌려준다. 예를 들면 파일을 읽으며 동시에 연산을 할 수 있다. Asynchronous I/O와는 약간의 차이가 있다.

 - Call stack: JS에서는 함수가 실행될 때 call stack에 추가되고, 완료되면 pop되는데, 이 방식은 네트워크 요청과 같이 시간이 많이 걸리는 작업을 처리하는 동안 다른 작업을 할 수 없게 되는 문제가 있다. 이 문제를 해결하기 위해 Node.js는 event loop와 event queue를 사용한다.

 - Event driven: 이벤트의 발생에 따라 상태가 바뀌는 구조를 event driven structure라고 한다.

 - Event loop: timers, pending callbacks, idle/prepare, poll, check, close callbacks 의 6개 Queue를 이용해 비동기 작업들을 모아두고 관리하는 도구다. 각각의 큐의 동작은 하단에 링크한 Node.js의 Event loop 페이지를 참고하자.

 

3) Why single thread over multi-thread?:

 - 쓰레드의 생성과 관리에 드는 부담을 줄일 수 있고, Node.js는 특히 event loop가 많은 요청을 동시에 효율적으로 처리할 수 있도록 도와주기 때문에 . 또한 연결 요청 부하에 따른 서버의 확장이 매우 자유로워 웹 서버에 특화된 철학이 녹아있는 언어라고 한다. 다만, 아무래도 하나의 프로세스만으로 실행되는 싱글 쓰레드의 특성 상 CPU-intensive한(CPU 연산의 비중이 많은) 작업에는 적합하지 않다.

 

 

--

 

REFERENCES:

 

 

1주차 | Notion

Built with Notion, the all-in-one connected workspace with publishing capabilities.

teamsparta.notion.site

 > 강의 노트, Node.js 1주차

 

Event-driven architecture - Wikipedia

From Wikipedia, the free encyclopedia Software architecture model Event-driven architecture (EDA) is a software architecture paradigm concerning the production and detection of events. Overview[edit] An event can be defined as "a significant change in stat

en.wikipedia.org

 > Wikipedia, Event-driven Architecture

 

Difference between Asynchronous and Non-blocking - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 > geeksforgeeks.org, Asynchronous and Non-blocking

 

Node.js — The Node.js Event Loop

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 > nodejs.org, Event Loop

728x90