본문 바로가기

Server/Node.js

<노드JS> 노드 JS란

 

1. 노드 JS란

* 정의

 - 노드 js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임이다. (Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine. )

 

 - 위 문구는 노드js 공식사이트에서 노드js를 설명하는 문장이다. 흔히 노드js를 서버라고 오해하는 경우가 많으나 노드js는 단지 js코드를 실행시켜주는 도구 중 하나이다.

 

 - 노드외의 런타임을 예시로 알아보자면 웹 브라우저(크롬, 엣지, 사파리, 파이어폭스 등)들이 있다. 

 

 - js가 브라우저에 한정된 언어라는 단점을 극복하기 위해 js 런타임을 만들기 위한 다양한 시도들이 있었으나 엔진 속도 문제를 극복하지 못하였다. 그러나 크롬 V8 엔진이 엄청난 속도를 보여주게 되어, 이 엔진을 이용하여 노드js가 탄생하였다.

 

* 특징

 - 위에서도 언급했듯이 V8 자바스크립트 엔진을 사용하여 코드를 빠르게 실행한다.

 

 - 이벤트기반으로 동작한다. 노드js는 이벤트가 발생할 때를 리스너가 감지하도록 하여 미리 지정해둔 작업인 콜백함수를 수행한다.

 

 - 비동기 I/O 처리 : 노드js 의 모든 API는 비동기방식으로 동작한다. 노드js는 논블로킹 방식으로 오래 걸리는 함수를 백그라운드로 보내어 다음 코드가 먼저 실행되도록 한다.

 

 - 단일 쓰레드 모델을 사용한다. 노드js는 주로 멀티 프로세스를 활용한다. 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 단일 쓰레드(싱글 스레드)라고 표현단다. 참고로 14버전부터 멀티 스레드가 사용가능하다. 싱글 스레드를 사용하긴 하지만 논 블로킹 모델을 채택하였기 때문에 일부 코드를 백그라운드에서 실행 가능하다는 것을 알아두자.

 

* 활용

 - 노드js는 멀티 프로세싱을 통해 I/O 요청이 많은 곳에서 뛰어난 성능을 보여준다. 그러나 CPU 사용률이 높은 어플리케이션에는 좋지 않다.

 

 - 데이터를 실시간으로 다루고 스트리밍 하는 서비스에 좋다.

 

 - 멀티 스레딩에 비해 프로그래밍이 비교적 쉽다.

 

2. 노드js 사용하기

* REPL

 - 노드js를 설치하면 REPL(Read, Evaluate, Print, Loop)이라는 콘솔을 사용할 수 있다.

 

 - 자바스크립트는 스크립트 언어이므로 즉석에서 코드를 실행할 수 있다.

 

 - 터미널을 열어 node를 입력하면 실행되고, 이 때부터 js 코드를 사용할 수 있다. 마치 브라우저 개발자 도구의 콘솔창같다.

 

 - 입력한 값의 결과가 바로바로 출력되므로 간단한 코드를 테스트하기 좋다. 그러나 긴 코드를 입력할 때에는 부적합하므로 아래 js 파일 실행 부분을 살펴보자.

 

* js 파일 실행

 - 노드js 는 자바스크립트 런타임이므로 브라우저 외부에서 js파일을 실행하도록 할 수 있다.

 

 - 아래와 같이 js파일을 만들고 실행시켜보자.

 

// helloHarry.js
function helloHarry() {
  console.log('Hello Harry!');
}
helloHarry();

 

 - 위와 같이 js파일을 만들고 터미널에 다음과 같이 파일을 실행한다.

 

node helloHarry

 - 위처럼 파일을 실행하면 콘솔창에 함수가 실행되는 것을 볼 수 있다.

 

* 모듈로 만들기

 - 노드는 자바스크립트 코드를 모듈로 만들 수 있다. 여기서 모듈이란 특정한 기능을 하는 함수나 변수들의 집합을 의미한다. 모듈을 만들면 여러 프로그램에서 재활용이 가능하다는 장점이 있다.

 

// var.js
const harry = "해리"
const iu = "아이유"

module.exports = {
  harry,
  even,
};

 

 - 코드에서 module.exports로 모듈로 만들 값을 지정할 수 있고, 다른 파일에서 require로 그 모듈의 내용을 가져올 수 있다.

 

// index.js
const { harry, iu } = require('./var');

console.log(harry); // 해리
console.log(iu); // 아이유

 

 - const { harry, iu } 는 module.exports를 구조분해 할당한 것이다.

 

 - 참고로 es6부터 자바스크립트 자체 모듈 시스템 문법인 import, export default가 생겼지만 아직 노드에서는 주로 위의 문법을 사용한다.

 

 


 

 

참고

 

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

 

[리뉴얼] Node.js 교과서 - 기본부터 프로젝트 실습까지 - 인프런 | 강의

노드가 무엇인지부터, 자바스크립트 최신 문법, 노드의 API, npm, 모듈 시스템, 데이터베이스, 테스팅 등을 배우고 5가지 실전 예제로 프로젝트를 만들어 나갑니다. 최종적으로 클라우드에 서비스

www.inflearn.com

 

 

[Node.JS] 강좌 01편: 소개 | VELOPERT.LOG

Node.js 가 뭐지? NodeJS 는 구글 크롬의 자바스크립트 엔진 (V8 Engine) 에 기반해 만들어진 서버 사이드 플랫폼입니다. 2009년에 Ryan Dahl에 의해 개발되었으며 현시점 (2016-02-07) 최신 버전은 v5.5.0 입니다

velopert.com