1. Node.js는 무엇인가 ?


Java 모든 OS운영체제에서 가상머신(Virtual Machine) 환경 안에서 런타임 이 구독 되듯이 Node.JS는 웹 브라우저에 종속적인 자바스크립트에서 외부에서 실행 할 수 있는 런타임 환경을 Chrome V8 엔진을 제공하여 여러 OS환경에서 실행할 수 있는 환경을 제공한다. 이것을 ``Node.JS` 라고 정의할 수 있다.

  • 구글 V8 자바스크립트 엔진
  • 고성능 네트워크 서버
  • 단일 쓰레드(Single Thread) 이벤트 루프(Event Loop) 기반
  • 비동기 처리 (바로 적용됨 )
  • 자바스크립트
  • 개발 생산성 향상
  • 방대한 모듈 제공 (NPM)

Node.js 를 이용한 서버 생성

node.js 서버를 개설할 폴더를 생성한다. 폴더에 index.html 파일을 생성한다.

npm init

폴더경로 위에 명령어를 입력 후 전부 엔터로 넘기면 (default 값으로 설정함) pakage.json 파일로 생성된다.

npm install lite-server

위와 같이 명령어를 입력하면 lite-servernode_modules 디렉토리에 설치된다.

lite-servernode.js 기반 경량 웹 서버이며, html 또는 js의 변경을 감지하여 socket 을 이용해 css 변경을 주입하는 기능을 제공한다.

package.json 파일에 dependencies 가 추가되며 lite-server 의 의존성이 추가된 걸 확인 할 수 있다.

"start": "npm run lite"
"lite": lite-server"

scripts 속성에 start 속성에 대한 정보를 입력하여 npm 구동시 실행할 명령어를 입력한다. npm 실행시 자동으로 lite-server가 구동되면서 index.html 이 웹브라우져에 로딩된다.

Javascript 실행 환경


첫 번째로 Node.js는 REPL (Read, Eval, Print, Loop) 을 통해서 런타임을 제공한다.

1.Read : 유저의 입력 값을 받아서 메모리에 저장 2.Eval : 입력 값의 평가, 실행 3.Print : Eval로 인해 반환된 값을 출력 4.Loop : 1~3을 반복.

이러한 REPLBable REPL 과 같이 웹에서 제공해주기도 하고, ` Node.JS에서 제공하는 REPL`은 윈도의에 CMD, 맥의 터미널 등등에서 제공을 해준다.

런타임이란(프로그래밍 언어가 구동되는 환경)


예전에는 자바스크립트 런타임 브라우저 밖에 존재하질 않았다. 하지만 그러한 한계를 극복하고 Node.js가 나왔다.

Node.js 를 통해서 서버 만들수 있다. 이러한 이유로 대부분의 사람들은 Node.js를 백엔드 영역이라고 오해하게 되었다.

프론트엔드 개발자는 언제 Node.js를 쓸까 ? 바벨 뿐만 아닌 웹팩, 걸프, CRA, Vue-CLI 등등 npm으로 설치하는 모든 CLI는 Node.js를 이용한다. 그리고 `npm(Node Package Manger)을 쓴다는 것 자체가 Node.js를 이용한다고 보면 된다.

Node.js 정리


  • Node.JS 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 한다.
  • Nde.JS는 자바스크립트를 서버로서 이용할 때 쓰인다.
  • 자바스크립트는 브라우저에 종속된 언어이고 밖으로 꺼낼때는 Node.JS를 사용한다.
  • Node.js는 비동기식으로 처리되며 , 프론트엔드 & 백엔드에서 쓰인다.

장점

  • 실시간으로 작동되어 프로젝트에 쓰기 좋다.
  • node.js Express를 사용해 서버를 만들 수 있다. 서버 무리가 적다.
  • Npm(node package manager)을 통해 다양한 모듈(패키지) 제공 npm을 이용해 자신이 필요한 라이브러리와 패키지를 검색해서 설치하고 사용 할 수 있기 때문에 효율성이 좋다.
  • 구글이 만드는 JavaScript 엔진을 사용한다. 구글은 V8엔진 성능 업그레이드를 계속 하고 있다.
  • C++로 개발된 V8 JavaScript 엔진이기 때문에 확장성이 좋다.

단점

  • 이벤트 기간 비동기방식이라 서버단 로직이 복잡한 경우 콜백함수의 늪에 빠질 수 있다. 예를들어, 한번의 요청에 의해 DB에서 조회한 결과값에 따라 다른 로직을 처리해야 하며, 이런 로직이 여러개인 경우 콜백함수 늪(Callback Hell) 에 빠진다.
  • 단일 쓰레드(Single Thread)이기 때문에 하나의 작업 자체가 많이 걸리는 웹서비스에는 어울리지 않다. 게시판형태와 같이 가벼운 웹서비스에 어울린다.
  • 코드가 수행되어야 코드에 에러가 있는지 알 수 있으며, 에러가 날 경우 프로세스가 내려가기 때문에 테스트가 매우 중요하다. 반드시 모든 케이스에 대해 소스코드를 검증해야 한다.

Node.js가 어울리는 웹서비스


  • 간단한 로직
  • 대용량(동시에 여러 request를 처리)
  • 빠른 응답시간 요구
  • 빠른 개발 요구
  • 비동기방식에 어울리는 서비스(네트워크 스트리밍 서비스, 채팅 서비스 등)

Node.js 가 어울리지 않는 서비스


  • 단일 처리가 오래 걸리는 경우 : 싱글 쓰레드이기 때문
  • 서버 체크로직이 많은 경우 : 비동기 방식이기 때문에 콜백(CallBack Hell)에 빠지지 않기 위해
  • 업무 복잡도/난이도가 높은 경우 : 에러가 나면 서버가 죽기 때문에 코드 품질 중요

2. npm


node packge manger 의 줄임말로 node.js 설치시 자동으로 설치가 된다. node.js에 필요한 패키지들을 관리한다. npm 명령어를 통하여 필요한 모듈을 다운로드 가능하다.