[JavaScript] Node.js

에이블·2022년 6월 13일
0

1. Node.js 란?

노드 공식 사이트에서는
Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.
라고 나와있습니다.

런타임
특정 언어로 만든 프로그램들을 실행할 수 있는 환경
즉, Node.js는 자바스크립트 실행기라고 생각할 수 있다.

서버
Node.js는 서버로서 활용될 수 있습니다.

서버 : 네트워크를 통해 클라이언트 정보나 서비스를 제공하는 컴퓨터 또는 프로그램을 말합니다.

클라이언트 : 요청을 보내는 주체로 브라우저일 수도 있고, 데스크톱 프로그램일 수도 있고, 모바일 앱일 수도 있고, 다른 서버에 요청을 보내는 서버일 수도 있습니다.

2. Node.js의 특성

Node.js는 libuv라는 라이브러리를 사용합니다.
이 라이브러리는 이벤트기반, Non-Blocking I/O 모델을 구현합니다.

이벤트 기반
이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업(이벤트 리스너에 콜백함수를 등록)을 수행하는 방식을 의미합니다.
이벤트로는 클릭이나 네트워크 요청등이 있을 수 있습니다.

만약 이벤트가 여러개 동시에 발생하게 된다면 이벤트 루프가 어떤 순서로 콜백함수를 호출할지 판단합니다.

Node가 종료될 때 까지 이벤트 처리를 위한 작업을 반복하므로 루프라고 부릅니다.
기본적으로 이벤트는 호출스택에 쌓여 순서대로 실행됩니다.

Non-Blocking I/O
🛴 Blocking
Node.js 프로세스에서 추가적인 JavaScript의 실행을 위해 JavaScript가 아닌 작업이 완료될 때까지 기다려야만 하는 상황입니다. 이벤트 루프가 블로킹 작업을 하는 동안 JavaScript 실행을 계속할 수 없기 때문입니다.

Node.js에서 I/O 등의 JavaScript가 아닌 작업을 기다리는 것보다 CPU 집약적인 작업 때문에 나쁜 성능을 보여주는 JavaScript는 보통 블로킹이라고 부르지 않습니다.
libuv를 사용하는 Node.js 표준 라이브러리의 동기 메소드가 가장 대표적인 블로킹 작업입니다. 네이티브 모듈도 블로킹 메소드를 가질 수 있습니다.

Node.js 표준 라이브러리의 모든 I/O 메소드는 논블로킹인 비동기 방식을 제공하고 콜백함수를 받습니다.
일부 메소드는 같은 작업을 하는 블로킹 메소드도 가지는데 이는 이름 마지막에 Sync가 붙습니다.

🛴 Sync/Async/Blocking/Non-Blocking은 따로 다루겠습니다.
profile
꺾이지 않는 마음

0개의 댓글