Node.js 란 무엇인가

sunny·2021년 11월 7일
0

백엔드

목록 보기
1/4

1. Node.js

Node.js란?

Node.js는 Chrome V8 Javascript 엔진으로 빌드된 Javascript 런타임으로,
웹브라우저에 종속적인 자바스크립트를 외부에서 실행할 수 있는 Runtime 환경 Chrome V8 엔진을 제공하여 여러 OS 환경에서 실행할 수 있는 환경을 제공해준다.
즉, javascript라는 브라우저에 내장되어 있는 언어를 브라우저가 아닌 컴퓨터에서도 사용할 수 있도록 해주는 것!! 자바스크립트 실행기

웹페이지를 화면에 표시한다는 목적을 가진 웹브라우저와 달리 Node.js는 컴퓨터를 직접적으로 제어한다.
Node.js는 웹서버와 같이 확장성 있는 네트워크 프로그램을 제작하기 위해 만들어졌다.

  • V8 엔진: JavaScript 엔진 위에서 동작하는 자바스크립트 런타임(환경)
    (쉽게 말해, 자바스크립트 코드를 해석해서 컴퓨터에게 실행시키는 역할)
  • 런타임: 특정 언어로 만든 프로그램들을 실행할 수 있는 환경

이벤트 기반

노드는 V8과 더불어 libuv라는 라이브러리를 사용하는데,
libuv 라이브러리는 노드의 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다.

  • 이벤트 기반(event-driven): 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식
  • 즉, 이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두고, 이를 이벤트 리스너에 콜백 함수를 등록한다.
    이후 이벤트가 발생하면 리스너에 등록해둔 콜백 함수를 호출하며 이벤트가 끝난 후 노드는 다음 이벤트가 발생할 때까지 대기한다.

이벤트 루프

이벤트 루프(event loop)는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백 함수를 호출할지를 이벤트 루프가 판단한다.
노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복 하므로 루프(loop)라고 부릅니다.

논 블로킹I/0

  • 이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있다.
  • 작업에는 두가지 종류가 있는데, 동시에 실행될 수 있는 작업동시에 실행될 수 없는 작업!
  • 특히 파일 시스템 접근, 네트워크를 통한 요청 작업은 I/O의 일종이며 이러한 작업을 할 때 노드는 논 브로킹 방식으로 처리
  • 논 블로킹: 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것
  • 블로킹: 이전 작업이 끝나야만 다음 작업을 수행

싱글 스레드

자바스크립트 코드는 동시에 실행될 수 없는데 그 이유는 노드가 싱글 스레드 기반이기 때문이다.

  • 프로세스: 운영체제에서 할당하는 작업의 단위
    노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스이다. 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.
  • 스레드: 스레드는 프로세스 내에서 실행되는 흐름
    프로세스는 스레드를 여러 개 생성해 여러 작업을 동시에 처리할 수 있는데 스레드들은 부모 프로세스의 자원을 공유한다. 같은 주소의 메모리에 접근 가능하므로 데이터를 공유할 수 있다.

노드는 싱글스레드, 논 블로킹 모델로, 싱글 스레드가 혼자서 일을 처리하지만 들어온 요청 순서가 아닌 논블로킹 방식으로 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행한다!

결론

노드는 기본적으로 싱글 스레드, 논 블로킹 모델을 채용하므로 I/O 요청이 많이 발생하면 노드를 서버로 사용하는 것이 좋다. 하지만 노드는 CPU 부하가 큰 작업에는 적합하지 않다. 우리가 작성하는 코드는 모두 스레드 하나에서 처리되기 때문에 코드가 CPU연산을 많이 요구하면 스레드 하나가 혼자서 감당하기 어렵기 때문이다.

즉, 개수는 많지만 크기는 작은 데이터를 실시간으로 주고받는데 노드는 적합하다. 예를 들어 네트워크나 데이터베이스, 디스크 작업 같은 I/O에 특화되어 있다. 실시간 채팅 애플리케이션, 주식 차트도 포함.

⭐결론, 노드의 장점⭐

  • 멀티 스레드 방식에 비해 적은 컴퓨터 자원을 사용
  • I/O작업이 많은 서버로 적합
  • 웹 서버가 내장되어 있어 별도의 웹서버를 설치할 필요가 없다.
  • 넷째, 자바스크립트를 사용하기 때문에 JSON 형식과 쉽게 호환

❗참조 및 출처❗
Nodejs 개념 이해하기(Nodejs 란?)

0개의 댓글