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 구간은 일반 사용자들이 자유롭게 사용 가능