Node.js는 Chrome V8JavaScript 엔진으로 빌드된 JavaScript 런타임입니다. 이는 이벤트 기반, 논 블로킹 I/O 모델을 사용해 가볍고 효율적입니다.
V8 엔진: 브라우저 환경 이외에서도 자바스크립트 사용을 가능하게 함.
libuv: Node.js가 비동기 I/O 작업을 수행할 수 있게 해주는 라이브러리.
2. Node.js의 장점
인기와 특성
Node.js는 웹 프레임워크 기술 부문에서 1위를 차지하는 대표적인 웹 프레임워크입니다. 특성으로는 논 블로킹 I/O, 싱글 스레드, 이벤트 루프 등이 있습니다.
3. 논 블로킹 I/O (Non-Blocking Input/Output) 사용
블로킹과 논 블로킹
블로킹(Blocking) I/O: 한 번에 하나의 작업만 처리.
논 블로킹(Non-blocking) I/O: 동시에 여러 작업 처리 가능.
4. 싱글 스레드(Single Thread)
싱글 스레드의 장점과 한계
Node.js는 싱글 스레드로 동작하지만 비동기적으로 처리하여 여러 작업을 동시에 처리합니다. 하지만 CPU 집중적인 작업에는 적합하지 않을 수 있습니다.
5. 호출 스택(Call Stack)
호출 스택의 역할
호출 스택은 함수의 실행 순서를 추적하는 자료구조로, 함수가 완료되면 호출 스택에서 제거됩니다. 이는 비동기 작업에서 문제가 되는데, 특히 네트워크 요청과 같이 시간이 많이 걸리는 작업을 기다리는 동안 JavaScript는 아무 작업도 할 수 없습니다. 이러한 문제를 해결하기 위해 자바 스크립트는 이벤트 루프와 이벤트 큐를 사용 하게 됩니다.
6. 이벤트 루프(Event Loop)
이벤트 루프 - 자바스크립트가 비동기 적으로 일을 처리할 수 있게 해주는 친구
여러 이벤트들과 같은 비동기 작업들을 모아서 관리하고 어떤 순서대로 실행해야 하는지 도와주는 도구다.
이벤트 루프는 호출 스택(Call Stack)과 이벤트 큐(Event Queue)를 관찰하면서, 호출 스택이 비어있고, 이벤트 큐에 작업이 있다면, 이벤트 큐의 작업을 호출 스택으로 이동하는 역할을 담당합니다.
자바스크립트는 이벤트 루프를 활용하여 시간이 오래 걸리는 작업을 이벤트 큐에 넣어 비동기적으로 처리하고, 그 동안 호출 스택에서 다른 작업들을 계속 처리할 수 있습니다.