본문 바로가기
Javascript/Node.js

NodeJS의 특징

by 모스키토끼 2020. 6. 9.

특징 4가지

  • 자바스크립트 코드는 브라우저에서 실행되는 코드(NodeJS가 나오기 전까지)
  • 크롬에서 사용하는 V8 엔진을 사용하여 NodeJS가 브라우저 밖에서 사용할 수 있게 됨
    • V8 엔진: 자바스크립트 코드를 해석해주는 해석기
  • 이벤트 기반의 비동기 I/0 프레임워크
  • CommonJS를 구현한 모듈 시스템

 

이벤트 기반의 비동기 I/O 프레임워크

https://medium.com/preezma/node-js-event-loop-architecture-go-deeper-node-core-c96b4cec7aa4

  • 클라이언트가 보내는 요청을 Event Loop가 처리
    • Event LoopSingle Thread -> nodeJS는 싱글 스레드라고 하는 이유
    • 요청들은 Event Queue에 들어가 있음
  • Event Loop는 Event Queue안에 들어있는 요청들을 하나씩 꺼내어 실행 후 결과를 클라이언트에게 반환해줌
  • 무거운 Job(디스크 읽기, 네트워크 통신 등...)들은 Non-blocking Worker에게 넘겨줌
  • Non-blocking Worker가 넘겨받은 작업을 끝내고 다시 Event Queue에 넣음
  • Event LoopNon-blocking Worker가 넣어준 결과를 다른 요청들과 마찬가지로 실행 후 클라이언트에 반환
  • 이러한 과정으로 비동기 처리가 이루어짐

모듈 시스템

  • 모듈을 만들기 위해서 기존에는 브라우저에서 윈도 콘텍스트를 사용하거나, RequireJS 같은 의존성 로더를 사용
  • 노드는 모듈을 파일 형태로 모듈 관리를 할 수 있는 CommonJS로 구현
    • 기본 모듈
      예시) const http = require('http'); http.createServer();
    • 써드파티 모듈(제작사가 아닌 제삼자가 만든 라이브러리)
    • 사용자 정의 모듈
      예시) function sum(a, b){ return a+b; } module.exports = {sum: sum};
      const math = require("./모듈 위치"); const result = math.sum(1, 2)

비동기

- 노드는 기본적으로 비동기로 동작
예시) readFile() vs readFileSync()

const fs = require('fs');

//readFileSync()
const data = fs.readFileSync('./data.txt','utf8');
console.log(data)

//readFile()
const data = fs.readFile('./data.txt','utf8',function(err, data){
	console.log(data);
});
  • readFileSync()는 파일이 읽어 올 때까지 다음 코드로 넘어가지 않음
  • readFile()은 파일을 읽어올 때까지 기다리지 않고 다음 코드로 넘어감
    , readFile은 파일을 읽어온 뒤 콜백함수(3번째 인자)를 호출

 

Reference

https://www.inflearn.com/course/%ED%85%8C%EC%8A%A4%ED%8A%B8%EC%A3%BC%EB%8F%84%EA%B0%9C%EB%B0%9C-tdd-nodejs-api/

 

테스트주도개발(TDD)로 만드는 NodeJS API 서버 - 인프런

javascript 언어로 백엔드 개발을 할 수 있는 NodeJS 를 학습해 봅니다. 테스트 주도 개발 (TDD) 방법으로 NodeJS를 이용해 API 서버 개발을 배워보고 학습할 수 있는 강좌입니다. NodeJS의 대표적인 웹프레�

www.inflearn.com

 

'Javascript > Node.js' 카테고리의 다른 글

테스트 주도 개발(TDD)  (0) 2020.06.10
익스프레스JS  (0) 2020.06.10
Https와 Http2  (0) 2019.11.06
Rest API와 라우팅  (0) 2019.11.06
쿠키와 세션 이해하기  (0) 2019.10.22

댓글