Node.js 개념과 특징

2020. 8. 15. 00:47✅ STUDY/node.js

Node.js 개념 정리

Node.js란,


노드의 공식 사이트(https://nodejs.org/ko/)에서는 노드를 다음과 같이 설명하고 있다.

Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임입니다.
Node.js는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다.
Node.js의 패키지 생태계인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.

 

간단하게 정리하자면,

서버 애플리케이션 실행 역할
자바스크립트 런타임
이벤트 기반 시스템
싱글 스레드
논블로킹 모델
웹 서버 내장

이 특징을 가지고 있는 것이 node.js이다!


 

 

서버 애플리케이션 실행 역할

노드를 통해 다양한 자바스크립트 애플리케이션을 실행할 수 있지만, 노드는 서버 애플리케이션을 실행하는 데 제일 많이 사용된다.

서버란 네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램을 말한다.
노드는 자바스크립트 애플리케이션이 서버로서 기능하기 위한 도구를 제공하므로 서버 역할을 수행할 수 있다.

자바스크립트 런타임

노드는 자바스크립트 런타임이다. 
런타임이란 특정 언어로 만든 프로그램들을 실행할 수 있는 환경을 뜻한다.

따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있게 해준다.

기존에는 자바스크립트 프로그램을 인터넷 브라우저(브라우저 또한 자바스크립트 런타임) 위에서만 실행할 수 있다.

브라우저 위의 환경에서 자바스크립트를 실행하기 위한 여러가지 시도가 있었으나, 자바스크립트의 실행 속도 문제 때문에 큰 호응을 얻지 못했다. 하지만 2008년 구글이 V8엔진을 사용해 크롬을 출시했고, 당시 V8엔진은 매우 빨랐고, 오픈 소스로 코드도 공개되었다. 이로써, 속도 문제가 해결되자 라이언 달은 2009년 V8 엔진 기반의 노드 프로젝트를 시작했다.

노드는 V8과 더불어 libuv라는 라이브러리를 사용한다.

우리가 코딩한 자바스크립트 코드는 노드가 알아서 V8과 libuv에 연결해준다.

이벤트 기반

이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다.
이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록해두어야 한다. 이것을 이벤트 리스너에 콜백 함수를 등록한다고 표현한다.

노드도 이벤트 기반 방식으로 동작하므로 이벤트가 발생하면 이벤트 리스너에 등록해둔 콜백 함수를 호출한다.

 

*이벤트 루프: 이벤트 발생 시 호출할 콜백함수들을 관리하고, 호출된 콜백 함수의 실행 순서를 결정하는 역할을 담당한다. 노드가 종료될 때까지 이벤트 처리를 위한 작업을 반복해 루프라고 불린다.

*태스크 큐: 이벤트 발생 후 호출되어야 할 콜백 함수들이 기다리는 공간이다. 콜백들이 이벤트 루프가 정한 순서대로 줄을 서 있으므로 콜백 큐라고도 불린다.

*백그라운드: 타이머나 I/O 작업 콜백 또는 이벤트 리스너들이 대기하는 곳이다.

논블로킹 I/O

논블로킹 방식이란 이전 작업이 완료될 때까지 멈추지 않고 다음 작업을 수행하는 것이다.
하지만, 싱글 스레드라는 한계 때문에 자바스크립트의 모든 코드가 시간적 이득을 볼 수 있는 것은 아니며, 주로 I/O 작업이 시간적 이득을 많이 본다.

싱글 스레드

싱글 스레드란, 한 번에 한가지 일만 처리하는 것이다.
멀티 스레드 방식보다는 컴퓨터 자원을 적게 사용하는 장점이 있지만, CPU코어를 하나밖에 사용하지 못하는 단점이 있다.

 


**결론**

노드는 싱글 스레드, 논블로킹 모델을 사용하므로 노드 서버 또한 동일한 모델이다.

노드 서버는 I/O가 많은 작업에 적합하다. 노드는 libuv라이브러리를 사용해 I/O작업을 논블로킹 방식으로 처리한다. 따라서 스레드 하나가 많은 수의 I/O를 혼자서도 감당할 수 있다. 하지만 CPU 부하가 큰 작업에는 적합하지 않다.

웹 서버가 내장되어 있어 입문자가 쉽게 접근할 수 있다. 노드 외의 서버를 개발하다 보면 Apache, nginx, IIS등의 별도의 웹 서버를 설치해야 하는 경우가 많다. 심지어 Tomcat과 같은 웹 애플리케이션 서버(WAS)를 추가로 설치해야하는 경우도 있다. 하지만 노드는 내장된 웹 서버를 사용하면 되므로 편리하다. 하지만 나중에 서버 규모가 커지면 결국 nginx등의 웹 서버를 노드 서버와 연결해야한다.

노드를 기반으로 돌아가는 대표적인 웹 프레임워크로는 Angular, React, Vue, Meteor 등이 있다.

노드를 기반으로 돌아가는 모바일 개발 도구로는 React Native와 Ionic Framework가 있다.


참고) 길벗출판사 Node.js 교과서

'✅ STUDY > node.js' 카테고리의 다른 글

REST API가 뭐야?  (0) 2020.08.15
http 모듈을 이용한 server 구현  (0) 2020.08.15