본문 바로가기

IoT Server 설계/Node.js

node.js 이론 및 설치

본 포스팅에서는 node.js의 기본 개념과 node.js의 특징 node.js를 활용하기 위한 설치 방법에 대하여 포스팅한다.







웹 프로그래밍 분야를 나누면 크게 프론트엔드백엔드로 나눌 수 있다. 

우리가 웹상에서 볼 수 있는 웹화면을 개발하는 것을 프론트엔드 개발이라고 할 수 있고 이러한 프론트엔드에서 전달된 데이터의 저장 및 관리를 하는 부분에 대한 개발을 하는것을 백엔드 개발이라고 정의할 수 있다. 이러한 프론트엔드와 백엔드의 개발의 경우 서로 언어와 개발환경이 상이하지만, node.js의 경우 자바스크립트 언어 하나만으로 프론트엔드와 백엔드 모두를 개발할 수 있다는 장점으로 최근 떠오르고 있는 기술이다. 이러한 의미에서 node.js는 프론트엔드와 백엔드를 모두 접할 수 있고 개발이 가능한 최적의 기술이다. 

본 포스팅에서는 node.js의 특징과 개발 환경 구축에 대해 포스팅한다.


1. node.js 특징


*Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임

- V8은 구글이 자신의 브라우저에서 사용하기 위해 개발한 자바스크립트 엔진이며, 이러한 V8은 빠른 속도로 자바스크립트를 해석하고 기계가 인식해서 수행 가능한 코드로 변환하는 역할을 담당

- V8은 인터프리터를 사용하는 대신 속도향상을 위해 자바스크립트를 머신코드로 변환 즉, 컴파일 과정이 없고 java script code -> native machine code로 변경 후 runtime시 다시 최적화 하여 실행하는 구조



REPL과 같이 웹 제공 혹은 터미널에서 제공

- 예전에는 자바스크립트 런타임이 브라우저 밖에 존재하질 않았지만 REPL(Read, Eval, Print, Loop)를 통해서 런타임을 제공한다.

- 이러한 REPL은 웹에서 제공하기도 하며 CMD, 터미널등에서도 제공 가능


이벤트 기반의 비동기 방식 (Non-blocking 패러다임)

- node.js는 일반적으로 고성능으로 알려져 있지만, 이 고성능은 자바스크립트에서 오는 것이 아니라고 node.js의 기본적인 구조인 Single Thread 기반의 비동기 I/O 처리에서 온다.


기존 HTTP 기반의 통신 방식



 

node.js 서버를 통한 통신 방식


위 그림의 기존 HTTP 기반의 통신 방식의 경우 클라이언트는 서버를 통해 데이터 수신을 받기 위해 서버와 지속적으로 통신을 해야한다. 이러한 경우 다수의 클라이언트와 통신하기 위해서는 스레드를 생성하여 통신하며, 이를 스레드 기반의 동기방식 이라고 한다.

하지만, 스레드 기반의 동기방식의 경우 스레드를 여러개 만들어 처리하게 되면 메모리 사용량이 많아지고 만약 스레드를 일정 수 이상 생성하여 활용하기 위해 로드밸런싱을 하더라도 이러한 멀티스레드 방식은 각 스레드는 독립적인 시점에서 동작하므로 공유자원에 대한 동기화 없이 접근할 경우 문제가 생길 수 있다. (메모리 문제 / 공유자원 접근 문제)


하지만 node.js는 이벤트 기반의 비동기방식이다. 요청이 있을경우 Event Loop에 Event를 발생하고, 다음 요청으로 넘긴 뒤 Event Loop는 해당 작업을 처리하여 Callback해주는 형식으로 서버측과의 지속적인 통신 하는 작업이 빠지며, 하나의 스레드를 사용해도 이벤트를 사용하여 서버에 무리를 적게 준다.



2. node.js 설치


설치환경: CentOS Linux 7.5.1804 / Kernal version: 3.10.0-862


# cd /tmp

# wget http://nodejs.org/dist/v6.3.1/node-v6.3.1-linux-x64.tar.gz

# tar xvfz node-v6.3.1-linux-x64.tar.gz

# mkdir -p /usr/local/nodejs

# mv node-v6.3.1-linux-x64/* /usr/local/nodejs

# export PATH=$PATH:/usr/local/nodejs/bin  (시스템 재 시작 할 경우)



오늘은 배가 고프니까 밥 먹어야되서 다음 글에서 계속하겠다

다음에는 node.js의 간단한 예제 프로그래밍과 node.js의 특징인 비동기 방식 이해를 위한 비동기 프로그래밍 예제를 실습 해보겠다.