[TIL] Node.js - Basics
Today I Learned
Node.js란
- Node.js는 브라우저 밖에서도 JS를 사용할 수 있도록 해 주는 (Chrome V8 엔진 기반) JS 런타임 환경이다. Node.js를 사용하면 JS로 서버를 포함한 일반 애플리케이션 개발이 가능하다.
- Node.js의 특징 : 싱들 스레드 & 이벤트 루프 기반 비동기 방식 => 논블로킹I/O
- Node.js는 싱글 스레드지만 이벤트 루프를 사용해 논블로킹I/O(요청을 처리하는 동안 다음 요청을 받을 수 있음)가 가능하다. - Node.js를 사용한 서버 개발의 장점
- 클라이언트와 서버를 모두 JS로 개발하기 때문에 러닝 커브가 낮다
- 이벤트 기반 비동기 방식이라 서버 무리가 적다
- npm을 통해 다양한 모듈(패키지)을 제공한다
- 내장 HTTP 서버 라이브러리를 포함하여 웹 서버에서 별도의 소프트웨어 없이 동작할 수 있다
- Node.js를 사용한 서버 개발의 단점
- 싱글 스레드이기 때문에 연산이 오래 걸리는 작업을 하면 전체 서버의 성능이 저하된다
전역 객체 (Global Objects)
-
모든 모듈에서 별도의 모듈 로딩 없이 사용할 수 있는 내장 객체
-
global 변수를 사용해 파일 간 데이터 공유가 가능하긴 하지만 유지보수가 어려우니 모듈 형태로 쓸 것을 권장한다
-
setImmediate()
: 즉시 콜백 함수 실행 -
clearImmediate()
:setImmediate()
취소 -
setInterval()
: 주어진 시간마다 콜백 함수 반복 실행 -
clearInterval()
:setInterval()
취소 -
setTimeout()
: 주어진 시간 후 콜백 함수 실행 -
clearTimeout()
:setTimeout()
취소 -
console
: 디버깅하기 위해 주로 사용됨
글로벌 스코프처럼 보이지만 모듈 스코프인 변수들 :
__dirname
: 현재 모듈의 디렉토리 이름 절대 경로__filename
: 현재 모듈의 파일 이름 절대 경로exports
:module.exports
의 레퍼런스module
: 현재 모듈에 대한 레퍼런스require()
: 모듈을 import할 때 사용
Modules
- Node.js에서는 기능별로 별도의 파일(모듈)로 분할할 수 있으며 각 모듈은 독립적인 스코프를 가지게 된다.
- 모듈은
module.exports
또는exports
객체로 외부에 공개되며 공개된 모듈은require()
로 import할 수 있다. require()
로 특정 파일 모듈을 불러올 때는 경로를 명시해 주어야 한다.- 코어모듈(Node.js에 기본적으로 포함된 모듈)을 사용할 때는 경로를 명시하지 않아도 된다. npm으로 설치한 외부 모듈(패키지) 또한 경로를 명시하지 않아도 된다.
// foo.js
module.exports.foo = function () {...}
// OR
exports.fas = function () {...}
// app.js
const { foo, fas } = require('./foo.js');
Stream & Buffer
- Stream : 스트림은 데이터를 다루는 방법으로, 데이터는 한 번에 chunck(buffer) 단위로 세분화 되어 전송된다. 주로 네트워크 통신에서 파일을 읽거나 쓸 때 메모리/시간 효율을 높이기 위해 쓰인다.
- Buffer Class : 원시이진데이터(raw binary data) 스트림을 다루기 위해 고안된 Node.js API.
// Buffer.from(data) : data로 새로운 Buffer 생성
const buf = Buffer.from('Hello');
console.log(buf); // <Buffer 48 65 6c 6c 6f>
// buffer.toString() : Buffer를 문자열로 변환
console.log(buf.toString()); // Hello
const fs = require('fs');
// READ STREAM
const readStream = fs.createReadStream('./docs/post1.txt');
// WRITE STREAM
const writeStream = fs.createWriteStream('./docs/post2.txt');
// * .on('data', callback) : data 이벤트 리스너, 스트림에서 buffer가 전달될 때마다 트리거된다
readStream.on('data', (chunk) => {
// * post1.txt 파일을 읽어서 post2.txt 파일 생성
writeStream.write(chunk.toString());
});
// 위의 코드처럼 readable stream을 받아 writable stream으로 데이터를 전송하는 경우 pipe를 사용해 간단하게 표현할 수 있다.
// readStream.pipe(writeStream);
Author And Source
이 문제에 관하여([TIL] Node.js - Basics), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@alexjlee/TIL-Node.js-Basics저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)