타입스크립트 올인원 : Part2 - 세션5 - 1

안지환·2023년 12월 11일
0

강의

목록 보기
4/10
post-custom-banner

⭐️ Overview

@types/node 라이브러리

Node는 서버가 아닌 JS 런타임 실행기 입니다. Node로 HTTP 모듈을 만들어주고 Port 8080로 서버가 실행 될 수 있게 해줍니다.
Node를 손쉽게 사용할 수 있게 Express 프레임워크를 사용합니다.

Node 라이브러리는 DT(Definitely Typed)로 정의 되어 있습니다.

DT 라이브러리는 @types를 추가로 설치를 해야 합니다.

npm install --save @types/node

http, fs, path 모듈타입 분석

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 요청 및 응답을 간편하게 처리할 수 있습니다.

profile
BackEnd Developer
post-custom-banner

0개의 댓글