프론트엔드

Node.js 기초부터 튼튼히 (1) 시작하기

CyberI 2017. 4. 4. 17:05

Node.js에 대한 더 자세한 내용을 살펴보고 싶다면, 아래 링크를 클릭해주세요.

▶ Node.js 기초부터 튼튼히 (2) 내장 모듈

▶ Node.js 기초부터 튼튼히 (3) 이벤트


Node.js 기초부터 튼튼히 (1)

   소개   

Node.js는 서버 환경에서 작동하는 자바스크립트입니다.

자바스크립트 기반의 서버 개발 환경이라니?  사실, 자바스크립트를 통해 서버 개발 환경에서 활용하기에는 속도가 문제가 되었어요. 

노드JS 는 flicker(온라인 사진 공유 커뮤니티)에서 개발/운영을 담당하였던 Joynent 라는 회사의 라이언 달(Ryan Dahl)이라는 개발자가 만든 기술입니다. 당시 플리커에서 사진을 업로드하게 되면 업로드 진행상황에 대하여 알려주는 기능이 있었는데 파일 업로드 진행 현황을 서버 쿼리에 전송하는 과정에서의 복잡성을 줄이고자 고안해낸 기술이 바로 노드JS에요.

속도적인 문제를 깨끗이 해결해준 node.js의 비법은 google의 크롬 브라우저에서 사용하는 V8 자바스크립트 엔진을 사용하면서도 이벤트 기반의 비동기 방식을 사용하여 이벤트 처리에 있어 빠른 속도를 발휘합니다. 처리속도가 빠르기에 대규모 네트워크 앱 개발에 아주 적합하죠! 최근에는 간단한 스크립트에도 많이 사용되어지고 있습니다.

처음 Node.js에 대해 알게 되었을때는 단순한 백엔드 플랫폼이라고 생각했지만, 이제는 수많은 곳에서 사용되어지는 프론트엔드와 백엔드를 자바스크립트로 빠르게 개발해주는 좋은 플랫폼이라는 생각이 듭니다.

그렇기에 노드에 대하여 글을 통해 기초부터 튼튼히(복습 겸 공부)를 해보려고 합니다.
 

자! 다시 한번 Node.js의 장점을 정리하자면

- 자바스크립트 기반으로 되어있어 클라이언트/서버를 고려하지 않으며 독립적 수행이 가능한 것과

- 구글의 자바스크립트 엔진을 사용하기 때문에 '속도'에 관련하여 걱정할게 없다는 것!
(물론 C/C++로 개발된 서버애플리케이션보다는 느리지만, 생산성이나 여러 비용을 고려해본다면 이득)

짧게 요약하자면, 자바스크립트와 비교한다면 서버개발환경에서도 사용가능한데, 더 생산성있단 것!!

그리고 위에서 언급되었던 이벤트 기반 비동기 방식에 대해 한번 더 이야기해보면,

기존의 서버는 스레드 기반의 동기 방식입니다. 스레드 기반의 동기 방식은 작업 요청이 들어올 때마다 스레드를 여러개 만들어 동시에 일을 처리하는 방식입니다.

하지만, 일이 많아지면 스레드의 개수가 증가하게 되고 사용량이 무수히 늘어난다는 단점이 있죠....

이에 반해 비동기 방식은, 요청한 순서에 따라 처리하기 때문에 일의 양이 많아도 작동하는 스레드가 순차적으로 처리하여  메모리나 사용량에 변화를 주지 않습니다.

하지만, 하나의 스레드로 작업을 처리하기 때문에 문제가 발생한다면 프로그램에 치명타를 입힐수 있죠.....

노드JS는 이벤트기반의 비동기 방식이라고 여러번 언급했습니다. 싱글-스레드 기반으로 동작하는 서버에 이벤트를 사용하여 비동기 방식으로 요청을 처리하는 동시에 다음 요청을 받을 수 있어 빠른 속도로 일을 처리할 수 있습니다.

 

마지막으로, 노드 모듈을 설치할 수 있는 패키지 매니저 NPM(Node Packaged Modules)은 정말 다양하고 많은 패키지 모듈을 제공하니 만드실 필요 없습니다. 필요에 맞게 잘 찾아 쓰시면 되요.

 ( npm 사이트 둘러보기 - https://www.npmjs.com ) 

 

    설치    

 

설치 하나도 어렵지 않아요!

공식홈페이지 (http://nodejs.org) 에 들어가셔서 사용하시는 운영체제에 맞게 다운로드 하시고 가볍게 install을 거치시면 설치가 완료됩니다.

 

LTS 버전은 long time support 버전으로 안정적이므로 추천!

하지만, 여러 기능이 추가된 최신버전을 사용하고 싶다면 current 버전 추천!

설치가 완료되었다면 제대로 설치되었는지 가볍게 console.log를 찍어보면 아래와 같이 출력될거에요.

> console.log('hello');

// hello

// undefined

그럼, 설치도 완료되었고 노드에 사용되어지는 모듈/객체에 대해 알아보도록 할게요.

 

   모듈   

 

노드에는 global객체가 존재하지만 그 외에도 전역변수와 전역함수가 있습니다.

그중에서도 exports, process 객체에 대해 설명하고자 합니다.

(더 많은 정보와 다양한 모듈은 API 문서에서 확인하실 수 있습니다. > 바로가기 )

 

 process 객체 

프로그램과 관련된 정보를 나타내는 객체로 자바스크립트에는 없는 객체에요 (only노드)

 

-process.version : Node.js 버전 보기

현재 제가 사용중인 노드의 버전을 보면 4.6.0을 사용중이네요..^^;;(업데이트해야겠댜)

> process.version

// 'v4.6.0'

 

-process.argv : 실행중인 매개 변수 출력

당연히 node.exe파일을 사용하여 테스트 중이므로 아래와 같이 나오네요 ㅎㅎ

> process.argv

// [ 'C\\program Files\\nodejs\\node.exe' ]

 

-process.exit() : 프로그램 종료

> process.exit()

// 바로 종료 ^0^~******

 

 

-process.memoryUsage() : 메모리 사용정보 리턴

치면칠수록 메모리가 늘어나느것이 눈에 보이네요ㅋㅋ....

> process.memoryUsage()

// { rss: 24100864, heapTotal: 947314, heapUsed: 4736616 }

> process.memoryUsage()

// { rss: 25268224, heapTotal: 947314, heapUsed: 5939880}

 

 

-process.uptime() : 프로그램 실행시간 리턴

uptime 메소드를 이용한다면 시간과 관련된 동작들을 쉽게 구현할 수 있을거 같네요

> process.uptime()

// 395.991

 

 exports 객체 

노드에서는 export객체를 사용하여 객체의 속성이나 메서드를 지정하여 기능을 확장할 수 있어요.

 

sub.js라는 스크립트 파일에 아래와 같은 곱하기 메소드가 있어요. ( multiple(a,b) )

> exports.multiple = function (a,b) {

return a*b;

};

 

multiple함수를 불러올 스크립트 main.js를 생성하고 다음과 같이 작성하시고

> var module = require('./sub.js');

> console.log(module.multiple(2,3));

 

main.js를 실행하시면 (node main) 결과값을 확인하실수 있습니다.

 

이번글에서 노드에 대해 간단히 접해보았는데요. 다음글에서는 노드가 제공하는 여러가지 내장 모듈에 대해 같이 실행해보고 간단한 퀴즈를 해결하보면서 노드가 얼마나 편리한지 같이 알아가는 시간을 갖도록 하겠습니다.