본문 바로가기
전공수업/Node.js

Node.js의 정의, 특성, 역할

by JooRi 2024. 3. 18.
728x90
SMALL

 

* 노드의 정의

Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다.

여기서 런타임이란 특정언어로 만든 프로그램들을 실행할 수 있게 해주는 가상머신의 상태이다.

즉, 노드는 자바스크립트로 만든 프로그램들을 실행할 수 있게 해 준다.

 

노드의 내부 구조

노드는 V8과 libuv를 내부에 포함하고 있다.

- V8 엔진: 오픈소스 자바스크립트 엔진

- libuv: 노드의 특성인 이벤트 기반 및 논블로킹 I/O 모델을 구현한 라이브러리

 

* 노드의 특성

1. 이벤트 기반 동작

노드는 이벤트가 발생할 때 미리 지정해 둔 작업을 수행하는 방식을 사용한다.

 

노드의 특성 - 이벤트 기반

- 이벤트 리스너: 이벤트를 등록하는 함수

- 콜백 함수: 이벤트 발생 시 실행될 함수

 

 

function run() {
console.log('3초 후 실행');
}

console.log('시작');
setTimeout(run, 3000);
console.log('끝');

/* 출력 */
시작
끝
3초 후 실행

 

위 코드 동작 방식

1. 호출 스택에 함수가 쌓여있다.

2. 콜백함수 run은 백그라운드로 가서 타이머 3초 대기 후 

3. 태스크 큐로 가서 대기 후

4. 호출 스택 비워지면 올라감

5. 호출 스택에서 실행 후 비워지면

6. 이벤트 루프는 태스크 큐 콜백이 들어올 때까지 대기

 

 

 

 

- 이벤트 루프: 이벤트 발생 시 호출할 콜백함수 관리, 콜백함수의 실행 순서 결정(노드 종료까지 반복 작업)

- 태스크 큐(콜백 큐): 콜백 함수들을 기다리는 공간, 콜백들은 이벤트 루프가 정한 순서대로 대기

- 백그라운드: 타이머, I/O 작업 콜백, 이벤트리스너들이 대기하는 곳

 

2. 논블로킹 I/O

오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 한다.

논블로킹 방식(비동기식) 하에서 일부 작업은 백그라운드에서 병렬로 실행되고, 나머지는 블로킹 방식으로 실행된다.

여기서 일부작업은 네트워크 I/O(네트워크 연결/닫기, HTTP 요청 및 응답), 파일 I/O(파일 읽기/쓰기), 프로세스 및 시스템 작업을 말한다.

블로킹, 논블로킹

 

3. 싱글스레드

일부작업에서 논블로킹 방식을 사용하지만, 직접 처리할 수 있는 스레드(프로세스 내에서 실행되는 작업의 단위)는 하나이기 때문에 싱글스레드라고 표현한다.

블로킹이 발생하는 경우 나머지 작업은 모두 대기해야 하기 때문에 비효율적이다.

대신 위에서 말한 논블로킹 모델을 채택하여 일부 작업(I/O 관련 코드)을 백그라운드(다른 프로세스)에서 실행 가능하다.

즉, I/O 관련 코드가 아닌 경우 싱글 스레드(블로킹 모델)이다.

 

싱글스레드 모델은 메모리 자원을 적게 사용하지만, 에러를 처리하지 못하는 경우 멈추게 된다.

멀티스레드 모델은 에러 발생 시 새로운 스레드를 생성하여 극복할 수 있지만, 새로운 스레드 생성이나 놀고 있는 스레드 처리에 비용이 발생하고 자원을 많이 사용한다.

 

* 노드의 역할

1. 서버 역할

서버는 네트워크를 통해 클라이언트에 서비스를 제공하는 컴퓨터 또는 프로그램을 말한다.

노드는 서버가 아닌, 서버를 구성할 수 있게 하는 모듈을 제공한다.

 

노드 서버의 장단점은 아래와 같다.

장점 단점
멀티스레드 방식에 비해 컴퓨터 자원을 적게 사용 싱글스레드이기에 CPU 코어를 하나만 사용
I/O 작업이 많은 서버로 적합 CPU 작업이 많은 서버로 부적합
웹서버가 내장되어 있음 서버 규모가 커졌을 때 서버 관리에 어려움
멀티스레드 방식보다 쉬움 하나뿐인 스레드가 멈추지 않도록 관리해야 함
JSON 형식과 호환이 쉬움  

 

2. 서버 외 역할

노드는 자바스크립트 런타임이기 때문에 용도가 서버에만 한정되지 않는다.

웹, 모바일, 데스크톱 애플리케이션에도 사용된다.

- 웹 프레임워크: React, Vue, Angular 등

- 모바일 앱 프레임워크: React Native, NativeScript 등

- 데스크톱 개발 도구: Electron(Atom, Slack, VSCode, Discord 등)

 

 

성결대학교 정보통신공학과 웹서버프로그래밍 강의(2024) 

본 게시물은 위 강의 및 교재를 기반으로 정리한 글입니다.
728x90
LIST

댓글