🤔 Node.js
Node.js는 크롬 V8 자바스크립트 엔진으로 빌드된 자바스크립트 런타임 환경이다.
노드를 통해 다양한 자바스크립트 애플리케이션을 실행 할 수 있고 서버를 실행하는데 많이 사용된다.
- Node.js는 자바스크립트로 서버를 구축할 수 있다.
- V8이라는 자바스크립트 엔진 위에 동작하는 런타임(환경)
Node.js는 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 Request처리 성능을 가지고 있다.
💡Non-blocking은 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행하는 것을 의미한다.
💡단일 스레드는 프로세스의 실행 흐름을 1개로, 한번에 하나의 작업만 실행하는 것을 말한다.
데이터베이스로부터 대량의 데이터를 취득하여 웹페이지에 표시할 때, 일반적으로 데이터베이스 처리에 대기시간(blocking)이 발생하기 때문에 웹페이지 표시가 지연되는 현상이 발생한다. Node.js의 모든 API는 비동기 방식으로 동작하여 Non-blocking I/O가 가능하고 간일 스레드 이벤트 루프 모델을 사용하여 보다 가벼운 환경에서도 높은 Request처리 성능을 가지고 있다.
🤔 이벤트 루프
- 이벤트 루프(event loop)는 여러 이벤트가 동시에 발생했을 때 어떤 순서로 콜백함수를 호출 할지를 이벤트루프가 판단한다.
- 노드는 이벤트가 종료될 때까지 이벤트 처리를 위한 작업을 반복하므로 루프(loop)라고 부른다.
- 이벤트 루프 참고
🤔 REPL
자바스크립트는 스크립트 언어이므로 미리 컴파일하지 않아도 즉석에서 코드를 실행할 수 있다. 브라우저 콘솔에서 확인할 수 있다. 노드도 비슷한 콘솔을 제공하는데, 입력한 코드를 읽고(Read), 해석하고(Eval), 결과물을 반환하고(Print), 종료할 때까지 반복한다(Loop)고 해서 REPL이라고 한다.
🤔 Node.js 모듈
모듈이란 특정 기능을 하는 함수나 변수들의 집합을 말한다. 모듈로 만들어두면 여러 프로그램에 해당 모듈을 재사용할 수 있다.
보통 파일 하나가 모듈 하나가 되며, 파일별로 코드를 모듈화할 수 있어 관리하기 편하다.
노드에는 두가지 형식의 모듈을 사용하는데 하나는 CommonJS모듈이고 다른 하나는 ECMAScript모듈이다.
🤔 CommonJS 모듈
// var.js
const odd = '홀수입니다.';
const even = '짝수입니다.';
module.exports = {a, b}
var.js파일에 a,b라는 변수를 선언하고 module.exports에 변수를 담은 객체를 대입했다. 다른 파일에서 이 파일을 불러오면 moduel.exports에 대입된 값을 사용할 수 있다.
//func.js
const {odd, even} = require("./var");
function check(num){
if(num % 2) {
return odd;
}
return even;
}
module.exports = check;
func.js에서 var.js에 있는 변수를 require를 통해 가져올 수 있다.
🤔 ECMAScript 모듈
ECMAScript 모듈은 공식적인 자바스크립트 모듈 형식이다. 노드에서는 아직까지 CommonJS 모듈을 많이 쓰긴 하지만, ES모듈이 표준으로 정해지면서 점점 ES모듈을 사용하는 비율이 늘어나고 있다. 브라우저에도 ES모듈을 사용할 수 있어 브라우저와 노드 모두 같은 모듈형식을 사용할 수 있다는 것이 장점이다.
// var.mjs
export const odd = '홀수입니다.';
export const even = '짝수입니다.';
// func.mjs
import {a, b} from './var.mjs'
function check(num) {
if(num % 2) {
return odd;
}
return even;
}
export default check;
require와 exports, module.exports가 각각 import, export, export default로 바뀌었다.
'Node.js' 카테고리의 다른 글
[express] express 기본 구조 (0) | 2023.05.07 |
---|
댓글