Node는 서버가 아닌 JS 런타임 실행기 입니다. Node로 HTTP 모듈을 만들어주고 Port 8080로 서버가 실행 될 수 있게 해줍니다.
Node를 손쉽게 사용할 수 있게 Express 프레임워크를 사용합니다.
Node 라이브러리는 DT(Definitely Typed
)로 정의 되어 있습니다.
DT 라이브러리는 @types
를 추가로 설치를 해야 합니다.
npm install --save @types/node
node 런타임 환경을 구축하기 위해서 아래에 코드를 작성했습니다.
import fs from 'node:fs';
import http from 'node:http';
import path from 'node:path'
const hostname = '127.0.0.1';
const port = 3000;
http.createServer((req, res) => {
fs.readFile(path.join(__dirname, 'index.html'), (error, data) => {
res.writeHead(200);
res.end(data)
})
}).listen(port, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
각 호출 모듈은 Declare Module
로 구성이 되어 있습니다.
declare module "node:fs" {
export * from "fs";
}
declare module "node:http" {
export * from "http";
}
declare module "node:path" {
import path = require("path");
export = path;
}
기존 Node 모듈을 호출 시 node:{모듈명}
이 아닌 {모듈명}
으로 호출 했었습니다. Npm에서 Node가 가진 패키지와 서드파티 패키지와 구분 짓기 위해서 node 전용에서 node:
을 붙여
사용 하길 권장합니다.
http 모듈 createServer 내부 구조에는 다음과 같이 구성 되어 있습니다.
function createServer<
Request extends typeof IncomingMessage = typeof IncomingMessage,
Response extends typeof ServerResponse = typeof ServerResponse,
>(requestListener?: RequestListener<Request, Response>): Server<Request, Response>;
function createServer<
Request extends typeof IncomingMessage = typeof IncomingMessage,
Response extends typeof ServerResponse = typeof ServerResponse,
>(
options: ServerOptions<Request, Response>,
requestListener?: RequestListener<Request, Response>,
): Server<Request, Response>;
createServer 메서드에는 타입이 두 가지로 정의되어 있습니다.
이는 TypeScript에서 지원하는 함수 오버로딩(overloading
)으로 알려져 있습니다.
두 가지 타입의 차이는 Options을 추가 여부에 있습니다. 서버에 대한 요청(Request
)은 IncomingMessage로, 응답(Response
)은 Server로 구성되어 있습니다.
두 구성 요소는 스트림(stream
)으로 구현되어 있습니다. 서버의 요청과 응답 함수는 HTTP 요청 및 응답의 타입을 정의하고 있습니다.
이를 통해 Node.js 모듈을 사용하여 HTTP 요청 및 응답을 간편하게 처리할 수 있습니다.