특징 4가지
- 자바스크립트 코드는 브라우저에서 실행되는 코드(NodeJS가 나오기 전까지)
- 크롬에서 사용하는 V8 엔진을 사용하여 NodeJS가 브라우저 밖에서 사용할 수 있게 됨
- V8 엔진: 자바스크립트 코드를 해석해주는 해석기
- 이벤트 기반의 비동기 I/0 프레임워크
- CommonJS를 구현한 모듈 시스템
이벤트 기반의 비동기 I/O 프레임워크
- 클라이언트가 보내는 요청을 Event Loop가 처리
- Event Loop는 Single Thread -> nodeJS는 싱글 스레드라고 하는 이유
- 요청들은 Event Queue에 들어가 있음
- Event Loop는 Event Queue안에 들어있는 요청들을 하나씩 꺼내어 실행 후 결과를 클라이언트에게 반환해줌
- 무거운 Job(디스크 읽기, 네트워크 통신 등...)들은 Non-blocking Worker에게 넘겨줌
- Non-blocking Worker가 넘겨받은 작업을 끝내고 다시 Event Queue에 넣음
- Event Loop는 Non-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
'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 |
댓글