본문 바로가기
개발일지

node.js - 연습해보기

by Peter.JH 2023. 12. 29.
728x90
// const { log } = require("console");
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, () => console.log("Hello Node.js"));

 

const http = require("http");

 

require() 함수는 모듈을 읽어오는 함수이다. http모듈을 불러와 http 변수에 할당한다. 모듈명과 변수명은 다르게 해도 상관없지만 보통 위와 같이 이름 짓는 것이 관행이다.

 

const server = http.createServer(callback);

 

createServer() 는 서버 인스턴스를 만드는 함수이다. 인수로 callback 함수를 받는다. 콜백 함수에서는 http 서버로 요청이 들어오면 해당 요청을 처리할 함수를 설정한다. callback함수는 요청 처리에 사용할 요청(req), 응답(res) 객체를 인수로 받는다.

 

log(count);


전역 변수 count를 사용해 요청에 대한 log를 간단하게 남긴다. 

 

res.statusCode = 200;

 

요청에 대한 상태코드를 200으로 설정한다. 

 

주요상태코드표 참조:

https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C

 

HTTP 상태 코드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 아래는 HTTP(하이퍼텍스트 전송 프로토콜) 응답 상태 코드의 목록이다. IANA가 현재 공식 HTTP 상태 코드 레지스트리를 관리하고 있다. 모든 HTTP 응답 코드는 5개의

ko.wikipedia.org

 

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

 

http는 req/res에 대한 보가 정보를 설정할 수 있다. 부가 정보는 header에 설정하게 되는데, 여기서는 콘텐츠 타입을 'text/plain'으로 설정했다. 콘텐츠 타입은 해당 콘텐츠가 어떤 형태의 데이터인지 나타낸다. 

 

text/plain: 텍스트를 평문으로 해석하겠다.

text/html: 텍스트를 html으로 해석하겠다.

.

.

이외에도 Accept, Accept-Charset, User-Agent, Referer....

 

res.write("Hello\n");

 

응답으로 "Hello\n"

 

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

 

setTimeout()은 콜백 함수와 숫자를 인수로 받는다. 해당 시간이 지나면 콜백 함수를 실행한다. 위 코드에서는 2초후 Node.js를 응답으로 주고 http 커넥션을 끝내는 동작을 한다. setTimeout(), setInterval()같은 함수는 타이머를 사용한다. 타이머는 libuv에서 제공하는 기능을 사용하며 이벤트 루프에서 콜 스택을 모니터링하면서 실행할 시점을 정한다. 

 

 

server.listen(8000, () => console.log("Hello Node.js"));

 

사용할 포트 번호를 8000번으로 지정한다. IP를 생략했기때문에 localhost혹은 127.0.0.1로 서버에 접근할 수 있다. 

728x90

'개발일지' 카테고리의 다른 글

node 21 WSL 문제  (1) 2024.01.16
pintos를 마무리하며...[크래프톤 정글]  (0) 2023.12.30
pintos.........  (0) 2023.12.28
pintos - virtual memory(7)  (0) 2023.12.25
pintos - virtual memory(6)  (0) 2023.12.22