새소식

Web Programming

Node.js 기초 | 한 장으로 보는 Node.js 특징

  • -
728x90

1. Node.js란 무엇인가?

정의와 구성요소

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)를 관찰하면서, 호출 스택이 비어있고, 이벤트 큐에 작업이 있다면, 이벤트 큐의 작업을 호출 스택으로 이동하는 역할을 담당합니다.

 

자바스크립트는 이벤트 루프를 활용하여 시간이 오래 걸리는 작업을 이벤트 큐에 넣어 비동기적으로 처리하고, 그 동안 호출 스택에서 다른 작업들을 계속 처리할 수 있습니다.


주석

  • V8 엔진: Chrome의 JavaScript 실행 엔진.
  • libuv: 비동기 I/O를 지원하는 C 라이브러리.
  • 블로킹 I/O: 요청 처리 중 다른 작업을 수행하지 못하는 상태.
  • 논 블로킹 I/O: 여러 작업을 동시에 처리할 수 있는 상태.
  • 싱글 스레드: 하나의 실행 단위로 동작하는 구조.
  • 호출 스택: 프로그램에서 함수 호출 순서를 관리하는 구조.

Node.js 공식 웹사이트를 참조하세요.

 

 


싱글 스레드를 사용하는데 논 블로킹이 어떻게 가능할까?

싱글 스레드는 한 번에 하나의 작업만 할 수 있지만, 논블로킹 비동기적 방식을 사용하면 I/O 작업과 같이 시간이 걸리는 작업을 대기하지 않고 다음 작업으로 넘어갑니다.

예를 들어, 파일 읽기 작업을 요청하고, 즉시 다음 코드로 넘어가며, 파일 읽기가 완료되면 콜백 함수를 실행합니다.

이로써 하나의 스레드를 통해 동시에 여러 작업을 처리하는 것처럼 보이게 합니다. 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.