본문 바로가기

Node js

node js 특징

반응형

Asynchronous

일이 처리할 때 하나의 일이 끝날 때 까지 기다렸다가 일을 처리하는 것이 synchronous 라고 합니다.

그와 다르게 여러가지 일을 동시에 수행하며 일을 처리하는 것이 asynchronous 라고 합니다.

asynchronous가 synchronous에 비해 효율적이지만 매우 복잡하므로 잘 이해할 수 있도록 정리해보겠습니다.

 

 

우선, node js 문서 사이트로 이동합니다.

https://nodejs.org/dist/latest-v12.x/docs/api/fs.html

 

File System | Node.js v12.16.1 Documentation

 

nodejs.org

위 사이트로 이동하면 node js 에서 많이 사용하는 file system과 관련된 문서를 볼 수 있습니다.

이 중에서 일부를 보면

위 그림과 같이 sync 가 붙어있는 function 을 볼 수 있습니다.

함수명에서 알 수 있듯이 node js 는 비동기방식을 선호하는 것을 알 수 있습니다.

 

이들의 차이가 무엇인지 이제 node js 코드를 통해 보겠습니다.

fs.readFileSync는 return 값이 있는 반면, readFile은 callback 함수라 지정한 경로의 파일을 읽고 나면 callback function을 실행해줍니다.

쉽게 말하면 readFileSync는 코드를 작성해준 순서대로 실행되어 그 결과를 볼 수 있는 반면, 

readFile은 비동기적으로 동시에 일이 수행되어 항상 순서대로 값이 나오지는 않습니다.

 

비동기적인 방식으로 작업을 하는 것이 node js 의 성능을 끌어올릴 수 있는 방법입니다.

 

 

Callback

앞서 보았던 function인 readFile을 이용해 callback의 대략적인 설명을 먼저 드리겠습니다.

 

readFile이란 function은 첫번째 parameter에서 설정한 directory에서 utf8 인코딩으로 파일을 읽은 후 function을 실행시키게 됩니다.

이렇게 어떠한 일을 한 후에 function을 호출하는 것이 callback이라 할 수 있습니다.

 

이제 sample code를 통해 callback의 개념을 보겠습니다.

먼저, node js 에서 함수는 값이 될 수 있으며 이름이 없는 함수를 익명함수라고 부릅니다.

 

var a  = function (){}; 이렇게 익명함수를 a라는 변수에 할당할 수 있습니다.

 

이제 익명함수를 이해해 보겠습니다. 

위 그림과 같이 slowFunc이란 함수는 callback이란 함수를 인자로 갖습니다.

이렇게 함수가 수행된 후 실행되는 함수를 callback 함수라고 합니다.

 

 

Package Manager 

프로그램을 package라고 부릅니다.

package Manager란 소프트웨어를 관리해주는 프로그램입니다.

각각의 컴퓨터 언어와 운영체제별로 package manager는 굉장히 중요한 역할을 하고 있습니다.

 

NPM

pm2 는 package manager입니다.

node js 로 만들어진 프로그램들은 npm을 통해서 쉽게 설치 가능합니다.

그전에!! window cmd의 경우 관리자권한으로 실행을 해주시고 리눅스나 다른 운영체제의 경우 sudo 명령어를 통해 pm2를 설치해줍니다.

 

pm2를 설치하고 이를 실행하는 방법은 하단의 이미지와 같습니다.

보다 자세한 설명은 공식 사이트를 참고하시길 바랍니다.

https://pm2.keymetrics.io/

 

PM2 - Home

Advanced process manager for production Node.js applications. Load balancer, logs facility, startup script, micro service management, at a glance.

pm2.keymetrics.io

pm2를 통해 js 수정시에 node를 재실행해야하는 불편함을 없앨 수 있습니다.

반응형

'Node js' 카테고리의 다른 글

HashBang  (0) 2020.08.27
암호화  (0) 2020.08.24
openldap with ldapjs  (0) 2020.07.30
node js 01  (0) 2020.02.20
Node js 설치 및 Eclipse plugin 설치  (0) 2020.02.08