Node.js
Chrome V8 JavaScript 엔진을 기반으로 한 서버 사이드 런타임 환경이다.
비동기 I/O 모델을 사용하여 높은 처리량과 낮은 지연 시간을 제공한다.
1. 특징 및 장점
이벤트 기반 | 비동기 작업을 처리하는 이벤트 루프를 사용해 효율적인 처리가 가능하다. |
모듈 시스템 | CommonJS와 ESM 두가지 모듈 시스템을 통해 유연한 코드 작성이 가능하다. |
높은 성능 | V8 엔진을 통해 자바스크립트를 빠르게 실행할 수 있다. |
단일 언어 사용 | 클라이언트와 서버에 모두 자바스크립트가 사용이 가능해 쉽게 작업이 가능하다. |
대규모 커뮤니티 | 활발한 커뮤니티와 많은 패키지를 통해 다양한 라이브러리와 도구 사용이 가능하다. |
2. Node.js의 사용 사례
웹서버, 실시간 애플리케이션, 마이크로서비스 아키텍처 등 많은 곳에서 사용되고 있다.
3. 논 블로킹 I/O (Non-Blocking Input/Output)
요청을 처리하는 동안 다른 작업을 계속할 수 있게 해주는 방식이다.
I/O 작업이 완료될 때까지 기다리지 않고 다음 작업을 수행이 가능하다.
서버의 성능을 극대화하고 여러 동시 연결을 처리할 수 있게 해준다.
4. 싱글 스레드(Single Thread)
스레드를 하나만 사용하고 동시에 한 작업만 처리한다.
Node.js는 싱글 스레드로 작동하지만 I/O 작업이 발생하면 비동기적으로 처리하여 여러 작업을 동시에 처리할 수 있게 한다. 복장성이 줄고 개발자가 더 쉽게 코드를 작성할 수 있다.
5. 호출 스택(Call Stack)
함수의 실행 순서를 관리하는 자료구조이다. 현재 실행중인 함수와 대기중인 함수의 목록을 유지한다.
함수가 호출되면 스택에 추가되고 실행이 완료되면 스택에서 제거된다.
6. 이벤트 루프(Event Loop)
Node.js의 비동기 처리를 관리하고 호출 스택과 메세지 큐를 연결하는 역할을 한다.
호출 스택이 비어있을때 이벤트 루프는 메세지 큐에 대기중인 콜백을 호출 스택으로 이동시킨다.
이 과정을 반복해 비동기 작업을 처리한다.
실행이 필요한 함수가 있는지 보기 위해 call back 함수를 계속 감시하면서 순서대로 실행한다.
아래의 코드를 예시로 이러한 방식으로 실행된다.
const bar = () => console.log(‘bar’); // 'bar' 함수를 정의하고 호출이 되면 'bar' 메시지 출력
const baz = () => console.log(‘baz’); // 'baz' 함수를 정의하고 호출이 되면 'baz' 메시지 출력
const foo = () => { // 'foo' 함수를 정의
console.log(‘foo’); // 'foo' 메시지 출력
bar(); //'bar' 함수 호출 후 메시지 출력
baz(); // 'baz' 함수 호출 후 메시지 출력
};
foo(); // 'foo' 함수 호출후 실행
비동기적이 아닌 함수 호출은 call stack에 쌓이고 Event Loop는 call stack의 맨 위부터 호출된 함수를 꺼내 실행한다.
출처
https://startcoriny.tistory.com/entry/Nodejs%ED%8A%B9%EC%A7%95
Node.js특징
Node.js는 대표적으로 논 블로킹(Non-blocking) I / O, 싱글 스레드(Single Thread), 이벤트 루프(Event Loop)의 특성이 있습니다. 논 블로킹 I / O(Non-Blocking Input / Output) 블로킹 I/O와 논블로킹 I/O는 프로그램의 실
startcoriny.tistory.com
Node.js를 파헤치자 - 작동 원리, 싱글스레드, 논블로킹I/O, 이벤트 기반
Node란? Node.js는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임이다. - by node 공홈 런타임이란 특정 언어로 만든 프로그램을 실행할 수 있는 환경을 의미한다. 이전까지 Javascript는 웹 브라우저에
velog.io
Node.js에서 Event Loop의 역할과 동작방식
이번 글에선 Node.js에서 Event Loop란 무엇인지와 Event Loop가 어떤 역할을 수행하는지를 살펴보고자 합니다.
medium.com
'TIL' 카테고리의 다른 글
TIL 240906 (OSI 전송 계층) (0) | 2024.09.06 |
---|---|
TIL 240905 (OSI 네트워크 계층) (0) | 2024.09.05 |
TIL 240831 (SQL 기초다지기2) (0) | 2024.08.31 |
TIL 240830 (SQL 기초 다지기) (0) | 2024.08.30 |
TIL 240825 (로그라이크 기능 추가 2) (0) | 2024.08.25 |