[JS] NodeJS 알아보기

Fleuve·2020년 11월 15일
1
post-thumbnail

NodeJS란?

Node는 Browser와 같이 v8 엔진으로 만들어진 자바스크립트의 런타임입니다.
즉, Node는 자바스크립트를 기계어로 컴파일해주는 v8 엔진으로 만들어진 자바스크립트가 구동 중인 환경을 말합니다.
그리고 Node의 특성은 이벤트 기반 논블로킹 I/O모델이라는 것 입니다.
이벤트 기반? 논블로킹 I/O? 다소 생소한 말일 수 있겠지만 지금 부터 알아가 보도록하겠습니다!

이벤트 기반?

이벤트 기반이라는 말은 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 말합니다.
이벤트에는 버튼 클릭이나 네트워크에 리소스 요청하는 것 들이 있습니다.
쉽게 이해하기 위해 아래 클릭 이벤트가 발생했을 경우를 예로 들어보겠습니다.

const button = document.querySelector('button');

button.addEventListner('click', () => {
	alert('클릭 이벤트 발생!!');
})

위에 예제를 보면 클릭 이벤트가 발생 했을때 알림 창을 띄우는 콜백 함수를 실행시키는 로직을 작성했습니다. 이렇게 미리 이벤트가 발생했을때 지정한 작업을 수행하게 만드는 방식을 이벤트 기반(event-driven)이라고 합니다.

논블로킹 I/O?

논블로킹은 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 그 함수가 다시 테스크 큐를 거쳐 호출 스택으로 올라오기를 기다리는 방식입니다.
쉽게 말해서 다음 함수의 실행이 현재 함수의 종료를 기다리지 않는 것을 말합니다.
예를 들어 작업 시간이 오래 걸리는 함수가 있다라고 가정을 하겠습니다.

function longRunningTask() {
  //오래 걸리는 작업
console.log('작업 끝!');
}
console.log('시작');
longRunningTask();
console.log('다음 작업');

위 로직의 결과는 시작 -> 작업 끝! -> 다음 작업 순으로 콘솔에 찍히게 됩니다.
즉, longRunningTask 함수가 끝나기 전까지는 console.log('다음 작업')이 호출 되지 않습니다. 위 코드를 setTimeout을 사용하여 논블로킹 방식으로 코드로 바꾸겠습니다.

function longRunningTask() {
  //오래 걸리는 작업
console.log('작업 끝!');
}
console.log('시작');
setTimeout(longRunningTask, 0);
console.log('다음 작업');

결과는 시작 -> 다음작업 -> 작업 끝!

Node core module

  • 노드와 함게 번들링 되어 있는 모듈을 말합니다.
  • 대표적인 모듈로는 fs, http, path, url등이 있습니다.
  • require('')방식으로 모듈을 사용할 수 있습니다.

NPM(Node Package Model)

NPM은 세계에서 가장 큰 오픈 소스 라이브러리 생태계 중 하나입니다.
Node를 설치 하셨다면 Node의 패키지 매니저인 npm도 설치가 됩니다. 이 npm으로 수 많은 개발자가 만든 패키지를 설치하고 설치한 패키지의 버전을 관리할 수 있게 됩니다. 앞으로 사용하게 될 리액트나 express와 같은 라이브러리나 프레임워크도 하나의 패키지입니다.

package.json

npm을 활용하기 위한 정보들이 모여있는 파일로 이뿐만 아니라 프로젝트 전반에 관한 정보가 들어있는 파일입니다.

{
  "name": "package",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start" : "node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {},
  "devDependencies": {}
}
  • scripts : cli에서 해당 코드를 실행합니다.
  • devDependencies : production과 관계없는 개발만을 위한 dependency입니다. -D나 --dev 옵션을 줘서 등록합니다.
  • dependencies : 직접 production과 관련있는 dependency입니다.

마치며

오늘은 NodeJS와 Node의 생태계인 npm에 대해서 공부를 했습니다. 자바스크립트를 공부하면서 너무 많이 들었던 얘기였지만 완벽하게는 알지 못했지만 오늘 공부를 통해 Node가 무엇인지 Node를 어떻게 사용하는지 npm을 통해 모듈을 설치하고 사용하는 방법에 대해서 알게되었습니다!

0개의 댓글