[TIL] 내일배움캠프 12.26

Asher Park·2022년 12월 27일
0

내일배움캠프_TIL

목록 보기
22/39
post-thumbnail

오늘 Node.js 심화주차 강의를 시작하였다.

Socket.io 라이브러리에 대한 강의를 듣고 테스트 해보고있었다.

Socket.io 란?

밤에 오늘 하루의 정리를 하고 있던 중, 어느 대원이 질문을 하나 툭! 던졌다.

그땐, 그 질문이 얼마나 큰 스트레스를 가져올지 아무도 생각하지 못하였다...

강의에서는 서버를 생성하는 방법을 두가지를 쓰고있던데요.. ServercreateServer() 의 차이가 뭔가요?

"예?"

강의자료를 따라서 열심히 테스트 해보던 나는 '저게 무슨 소리야..?' 했다.

다시 눈을 비비며 찾아보니,
첫 번째 코드에서는 http 모듈에서 createServer 함수를 불러와 server를 생성하였다.

const express = require("express");
const { createServer } = require("http")

const app = express();
const http = createServer(app);

두 번째 코드에서는 Server 라는 Class를 불러와 server를 생성하였다.

const express = require("express");
const { Server } = require("http");

const app = express();
const http = Server(app);

👀❓


알게된 점

일단, Server는 클래스다.
NetServer 라는 클래스를 상속 받고있고, requestListenerserver option을 생성 인자로 받을 수 있다.

class Server<
        Request extends typeof IncomingMessage = typeof IncomingMessage,
        Response extends typeof ServerResponse = typeof ServerResponse,
    > extends NetServer {
        constructor(requestListener?: RequestListener<Request, Response>);
        constructor(options: ServerOptions<Request, Response>, requestListener?: RequestListener<Request, Response>);

createServer는 함수다.
똑같이 requestListenerserver option을 생성 인자로 받을 수 있다.
그리고 새로운 Server 인스턴스를 생성하여 반환한다.

/*
	Returns a new instance of {@link Server}.
    The `requestListener` is a function which is automatically
    added to the `'request'` event.
*/

function createServer(requestListener?: RequestListener): Server;
function createServer(options: ServerOptions, requestListener?: RequestListener): Server;

음? 그러면 createServer는 그냥 Server 인스턴스를 만들어서 반환해주는 것 밖에 없네?

https://stackoverflow.com/questions/13857747/node-js-http-server-and-http-createserver-whats-the-difference

이 스택오버플로우의 글을 읽어보면,
createServer 는 단지, Server를 instantiate 하는 것을 도와주는 method 라고 한다.

'requestListener 는 request event를 자동으로 등록해주는 함수이고 버전이 업데이트 되면서 addListener 가 더이상 존재하지 않는것 처럼 보인다'
라고 댓글이 달려있다.

결론

튜터님의 의견도 들어보았다.

Server 클래스와 createServer 함수는 같은 동작을한다.

Server 클래스를 가지고 생성하는 것은 Legacy Code 같은 느낌이지 않을까?

Abstraction(추상화), Encapsulation(캡슐화) 개념의 느낌으로 createServer라는 함수 안에 인스턴스를 생성해서 반환해주는 동작을 구성하였지 않을까? 하는 생각도 들었다.

사실.. 그냥 createServer()를 쓰자! 하고 넘어갈 수도있지만, 찝찝했다..

profile
배움에는 끝이없다

0개의 댓글