brunch

You can make anything
by writing

C.S.Lewis

by 훈오빵 Nov 21. 2023

Node.js 기본서버 만들기(1)

const http = require("http");
let count = 0;
const server = http.createServer((req, res) => {
    log(count);
    res.statusCode = 200;
    res.setHeader("Content-Type", "text/plain");
    res.write("hello\n");
    setTimeout(() => {
        res.end("Node.js");
    }, 2000);
});

function log(count) {
    console.log((count += 1));
}

server.listen(8000);


1) const http = require("http");

- require()는 모듈을 읽어오는 함수. http 모듈을 불러와서 http 변수에 할당했음. 모듈명과 변수명은 달라도 무관하나 가능하면 같도록 하는 것이 관행.


2) const server = http.createServer(callback);

- createServer()는 서버 인스턴스를 만드는 함수. 인수로는 콜백 함수를 받음. 콜백함수에서는 http 서버로 요청이 들어오면 해당 요청을 처리할 함수를 설정하는데, 인수로 요청처리에 사용할 req(request)와 res(response) 객첵을 받음.


3) log(count);

- 전역 변수 count를 사용해 요청에 대한 로그를 간단하게 남김.


4) res.statusCode = 200;

- 요청에 대한 상태코드를 200으로 설정. http 프로토콜에서 200은 "Sucess"의 의미.

- 주요 status code

200, 301, 304, 400, 403, 404, 405, 408, 500, 501, 502, 503


5) res.setHeader("Content-Type", "text/plain");

- HTTP는 요청/응답에 대한 부가 정보를 header에 설정할 수 있음.

- HTTP Protocol header field definition

https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html  


6) res.write("hello\n")

- 응답으로 "hello\n"을 보내줌.


7) setTimeout(() => {res.end("Node.js")}, 2000)

- setTimeout()은 콜백함수와 숫자(밀리초)를 인수로 받으며, 해당 시간이 경과한 후 콜백 함수를 실행함.

- setTimeout(), setInterval()과 같은 타이머 함수는 libuv에서 제공하는 기능을 사용하며, 이벤트루프에서 콜 스택을 모니터링하면서 실행할 시점을 정함.


8) server.listen(8000);

- 사용할 port를 8000으로 지정.

- IP가 생략되었으므로 기본값인 localhost 혹은 127.0.0.1로 서버에 접근 가능

- port 번호는 16비트로 이뤄져 있음. 0~1023번 포트를 사용하려면 root 권한 필요. 반면 1024~49151 구간은 기관이나 사업자들을 위해서 IANA(인터넷 할당번호 관리기관)에 등록되어 있으나, 수퍼유저 권한 없이도 임의로 사용 가능. 49152~65535 구간은 일반 사용자들이 자유롭게 사용 가능


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari