-
[TIL] 스파르타) Node.js 강의 수강TIL-sparta 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:
> 강의 노트, Node.js 1주차
> Wikipedia, Event-driven Architecture
> geeksforgeeks.org, Asynchronous and Non-blocking
> nodejs.org, Event Loop
728x90'TIL-sparta' 카테고리의 다른 글
[TIL] 스파르타) Chapter 3 개인 과제 시작, MongoDB와 auto increment (0) 2024.05.13 프로그래머스) 햄버거 만들기 풀이 (Java) (0) 2024.05.12 [TIL] 스파르타) CS 강의 수강 (TCP/IP, HTTP, HTTPS) (0) 2024.05.10 [TIL] 스파르타) CS 강의 수강 (OSI model), 프로젝트 복기 조금 (0) 2024.05.09 [TIL] CSS 기능들 (custom variable, transition) (0) 2024.05.08