Skip to content

Latest commit

 

History

History
102 lines (63 loc) · 4.43 KB

nodejs의_특징.md

File metadata and controls

102 lines (63 loc) · 4.43 KB

Node.js의 특징

  • 자바스크립트 런타임

    • 언어나 프레임워크, 라이브러리가 아니다.
    • 자바스크립트가 브라우저 환경에서 돌아가는 대신 내 컴퓨터에서 서비스 혹은 런타임으로 실행된다.
  • V8자바스크립트 엔진을 사용한다.(크롬브라우저와 동일)

참고 - Javascript_Engine

  • 언어 차원에서 네트워크를 지원한다.
    • 서버사이드 언어로 사용할 수 있다.

왜 사용하는가?

빠르고, 효율적이고, 확장성이 아주 크다

  • Event driven이기 때문에 싱글 루프에서 실행되고, non-blocking이다. 따라서 non-blocking i/o model을 가진다.

blocking 모델에서는 하나의 스레드에 프로세스가 할당되면 끝날 때까지 기다려야 한다(sit and wait). 비동기적 작동이 안되기 때문에 요청이 발생할때마다 새로운 스레드를 생성한다. 반면, non-blocking i/o는 이벤트 루프로 처리를 하기 때문에 응답을 기다리지 않고 계속해서 요청을 보낼 수 있다.

인기가 많다!

mean stack 혹은 mern stack의 n이 노드다!

  • 리엑트, 뷰, 앵귤러 등과 자주 사용되는데, 같은 언어로 프런트와 백을 할 수 있기 때문

동작방식

Node.js는 **싱글 스레드(Single Thread)**로 동작하고, 비동기적인 **event driven**방식을 사용한다.

이는 자바스크립트와 같다. 자바스크립트 엔진을 사용하기 때문이다.

차이점은 setTimer()과 같은 함수 혹은 XHR 등을 사용하는 대신, EventEmitter 클래스를 사용하여 이벤트와 리스너를 바인딩(binding) 한다.

또한, node.js는 수많은 연결이 하나의 스레드를 통해서 이루어진다. Non-blocking I/O를 사용하기 때문이다.

이때, 이벤트 루프를 이용하여 데이터 통신을 한다. 따라서, 이전의 데이터 전송의 완료여부와 상관없이 다음 작업이 진행된다.

Event loop에 대한 내용은 B_EventLoop, EventLoop, EventLoop_Advanced 를 참고


Node.js에 적합한 프로젝트 타입

간단하게 요약하면 CPU intensive하지 않은 것이 적합하다.

앞서 말했듯, node.js의 I/O실행은 비동기적이다. Blocking 없이 통신을 할 수 있는 것이 장점이다.

하지만, 많은 CPU 사용이 요구되어 CPU의 작업 처리가 한계에 다다른다면 결국 서버가 느려질 것이다. 그렇게되면 당연히 어플리케이션이 느려진다.

따라서 다음과 같은 프로젝트들이 어울린다.

  • micro services 및 REST API

  • 리얼타임 서비스(채팅, 라이브업데이트)

  • CRUD Apps

    블로그나, 쇼핑카트, 소셜 네트워크 등

CPU intensive하지 않은 선에서 툴이나 유틸리티도 괜찮다.


NPM(Node Package Manager)

Node.js를 설치하면 NPM이 생기는데, 써드 파티 패키지나 모듈을 설치하는데 사용된다.

패키지들은 node_modules폴더에 저장된다.

설치된 패키지나 denpendency는 package.json에 담긴다.

node.js의 모듈들은 package의 dependency를 통하여 연결된다.

npm init // Generates a package.json file
npm install express // installs a package locally
npm install -g nodemon // installs a package globally (-g플래그를 더해주면 된다.)

Modules of Node.js

모듈은 노드의 아주 큰 부분이다.

  • 기본적으로 node.js에 포함된 코어 모듈이 있고,

  • NPM을 통해 받을 수 있고

  • 내가 만들 수도 있다.

변수들과 함수들과 클래스들 혹은 기타등등을 모듈에 포함시킬 수 있다.

모듈은 모듈 이름을 사용하여 불러올 수 있다.

또한 경로를 적어주어서 불러올 수도 있다.

const path = require('path');
const myFile = require('./myFile');


Reference