Node.js 란?

필기맨·2022년 6월 16일
0

노드 공식 홈페이지에서 노드를 다음과 같이 정의한다.

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

즉, 웹 브라우저 없이도 JavaScript 어플리케이션을 실행할 수 있다는 뜻이다. 또 노드는 웹 서버와 같이 확장성이 있는 네트워크 프로그래밍에 많이 사용된다. JavaScript는 Non-blocking I/O와 단일 스레드, 이벤트 루프 등 높은 처리 성능을 갖고 있기 때문에 노드와 JavaScript로 네트워크 프로그래밍을 하기에 적합하다.

노드의 특징들을 정리하면 아래와 같다.

  1. 노드는 V8이라는 JavaScript 엔진 위에서 동작하는 JavaScript 런타임 환경이다.
  2. 노드 덕분에 웹 브라우저 없이 실행 가능한 JavaScript 어플리케이션을 만들 수 있게 됐다.
  3. 또, JavaScript와 노드로 서버를 만들 수 있다.
    이전엔 서버를 만들기 위해선 다른 언어를 사용했어야 했는데, 노드 덕분에 JavaScript 하나의 언어로 서버, 웹 페이지를 모두 만들 수 있게 됐다.

JavaScript 런타임이란?

런타임은 프로그램을 실핼할 수 있는 환경을 뜻한다. JavaScript 런타임(웹 브라우저, 노드 등)은 아래와 같은 특징을 갖고 있다.

단일 스레드

JavaScript 코드는 동시에 실행될 수 없다. 즉, 동기적으로 처리한다. 코어가 여러 개 있어도 메인 스레드 위에서만 동작한다. 따라서, 하나의 heap 영역과 call stack을 갖는다.

어떻게 단일 스레드로 비동기 처리를 할 수 있을까?

Non-blocking

JavaScript는 싱글 스레드이기 때문에 순차적으로 일을 하나보면 blocking 문제가 발생한다. 하지만 JavaScript 런타임은 다르다. 웹 브라우저나 노드는 비동기 요청을 처리할 수 있는 API를 지원한다. 이로써, 함수 호출 시 당장 실행하는 것이 아니라 콜백 함수를 받고, 이를 다른 곳에 저장해둔 뒤 요청이 완료되면 완료된 순서대로 일을 처리할 수 있다. 즉, 비동기적 처리를 할 수 있게 된다.

이벤트 루프

JavaScript 런타임에서 비동기 콜백의 프로세스를 이벤트 루프라고 한다. 많은 이벤트가 발생했을 때, 어떤 순서로 콜백 함수를 실행해야할 지를 이벤트 루프에서 관리한다. 이를 통해 비동기적인 동시성이 가능해진다.

profile
필기맨

0개의 댓글