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-server
가 node_modules
디렉토리에 설치된다.
lite-server
는 node.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을 반복.
이러한 REPL
은 Bable 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
명령어를 통하여 필요한 모듈을 다운로드 가능하다.