Node.js란

snooby·2022년 8월 30일
0

📤 Backend

목록 보기
4/4
post-thumbnail

Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다.

JavaScript 런타임

런타임이란 특정언어로 개발된 프로그램을 해석하고 실행할 수 있는 환경, 즉 프로그래밍 언어가 구동되는 환경을 말합니다.

따라서, JavaScript 런타임이란 자바스크립트로 구현된 프로그램을 해석하고 실행할 수 있는 환경을 말합니다.

Chrome V8 JavaScript 엔진

Node.js가 등장하기 전에 자바스크립트는 브라우저 안에서만 동작할 수 있었습니다.
브라우저만이 자바스크립트로 구현된 프로그램을 해석하고 실행할 수 있었기 때문입니다.

그러나 2008년 구글이 크롬 브라우저를 V8 엔진으로 개발했고 자바스크립트 속도가 대폭 개선되었습니다.
Node.js는 구글 크롬 브라우저에 사용된 V8 엔진을 이용해서 브라우저 밖에서도 자바스크립트가 실행될 수 있도록 개발된 것입니다.

Node.js 특징

1. 논블로킹 I/O

프로그래밍 언어별로 여러 개의 작업을 동시에 처리할 수 있는 언어와 아닌 언어가 있습니다,
기본적으로 자바스크립트는 한번에 하나의 작업을 처리합니다.

하지만, I/O는 동시에 처리가 가능합니다.
I/O 파일 읽기 쓰기와 같은 파일 시스템 처리와 데이터베이스로 데이터를 전송/조회하는 일과 같은 네트워크 요청을 작업할 떄는 논블로킹 방법을 사용할 수 있습니다.

블로킹

블로킹은 함수를 호출하면 호출된 함수가 작업을 마칠 때까지 제어권을 돌려주지 않고 함수가 종료될 때까지 대기하는 방식입니다.

논블로킹

함수를 호출한 후 호출된 함수가 실행되는 중에도 다른 작업을 동시에 진행할 수 있는 것을 말합니다.

2. 싱글 스레드

싱글 스레드는 스레드 하나를 사용한다는 의미입니다.
즉, 동시에 하나의 작업만을 처리할 수 있다는 뜻입니다.
기본적으로 자바스크립트와 같은 싱글 스레드 방식의 언어는 작성된 프로그램을 순차적으로 실행하고, 여러 작업을 동시에 처리할 수 없도록 되어있습니다.

스레드

컴퓨터는 작업을 처리하기 위해서 '프로세스'라는 작업단위를 두고 프로세스를 통해서 작업을 처리합니다.
컴퓨터에서 동작하는 Node.js 를 포함한 여러가지 프로그램은 개별적인 프로세스로 리소스를 할당받고 실행됩니다.
스레드는 프로세스 안에서 작업을 처리하기 위해 실행되는 흐름의 단위인데, 하나의 프로세스는 여러 개의 스레드를 생성해서 여러 작업을 동시에 처리할 수 있습니다.

자바는 멀티 스레드를 사용하고, Node.js는 싱글 스레드를 사용합니다.
Node.js를 실행하면 컴퓨터는 프로세스를 생성하고 프로세스 안에서 여러 개의 스레드가 생성되지만, 우리가 프로그램을 통해 직접 제어할 수 있는 스레드는 하나밖에 없기 때문에 Node.js를 싱글 스레드 방식이라고 얘기하는 것입니다.

3. 이벤트 루프

Node.js는 libuv, llhttp 등 여러 라이브러리로 구성되어 있습니다.
이 라이브러리는 이벤트 루프를 통해서 자바스크립트가 가지고 있던 싱글 스레드의 약점을 극복하고 효율적으로 작업을 처리할 수 있도록 고안되었습니다.

크롬 V8 자바스크립트 엔진 동작 방법

자바스크립트 엔진은 1. 메모리 힙 2. 콜 스택 으로 구성되어 있습니다.

자바스크립트는 싱글 스레드 언어이고 하나의 콜 스택으로 가지고 있습니다.
스택은 한번에 하나의 작업만 처리할 수 있는 자료구조입니다.
자바스크립트는 처리해야할 작업을 콜 스택에 쌓고 하나씩 처리합니다.

콜 스택에서 실행한 비동기 함수는 Web APIs를 호출하고, Web APIs는 콜백함수를 콜백 큐에 밀어 넣습니다.

이벤트 루프는 콜 스택과 콜백 큐의 상태를 체크하고 콜 스택이 빈 상태가 되면 콜백 큐의 첫번째 콜백을 콜 스택으로 이동시킵니다.
이러한 작업이 반복적으로 일어나고, 이런 반복적인 행동을 틱이라고 합니다.

따라서, 자바스크립트는 싱글 스레드 언어이고 한번에 하나의 작업만 실행할 수 있지만, 브라우저 내에서 비동기 함수인 Web APIs와 콜백 큐, 이벤트 루프 때문에 멀티 스레드처럼 동시에 다중 작업을 처리하는 효과를 볼 수 있습니다.

profile
데이터를 가치있게 다루고 싶은 개발자 🐥

0개의 댓글