Node

[Node.js] HTTP 모듈에 대하여 알아보

YaluStar 2023. 2. 11. 17:41

안녕하세요.

이번에는 Node.js의 HTTP 모듈에 대하여 알아보겠습니다.

 

1. 서버

  • http 통신
    • 클라이언트 => 요청 => 서버 => 응답 => 클라이언트 => TCP connection

 

2. http 모듈

  • 웹 서버를 구동하기 위한 node.js 내장 웹 모듈
  • server 객체, request 객체, response 객체를 사용한다.
  • server 객체 : 웹 서버를 생성할 때 사용하는 객체
  • response 객체 : 응답 메시지를 작성할 때 두 번째 매개변수로 전달되는 객체
  • request 객체 : 응답 메시지를 작성할 때 첫 번째 매개변수로 전달되는 객체
  • 서버를 만드는 모듈이지만, 오래된 모듈로 최근에는 거의 사용하지 않는다.

 

require 함수로 http 모듈을 불러와서 사용한다.

http.createServer() 함수를 이용해서 server 객체를 생성한다.

const http = require('http');
// http 모듈 불러오기
const server = http.createServer();
//  server 객체 생성

 

클라이언트가 접속했을 때 실행되는 함수이며, 인자 값으로 req, res를 받습니다.

req (request) = 클라이언트가 요청한 값

res (response) = 클라이언트에게 보내주는 응답 값

const server = http.createServer(function(req, res) {
    // 클라이언트가 접속했을 때 실행되는 함수
    res.write('<h1>Hello</h1>');
    // res.end가 없으면 홈페이지가 무한 로딩되서 end를 작성해야 로딩이 끝남
    res.end('<hr>');
});

 

res.write() 함수를 사용하면 내용을 출력할 수 있습니다.

res.end() 함수를 작성하지 않으면 서버에서 응답이 아직 남아있다고 판단하여 홈페이지가 무한 로딩이 되는 현상이 생깁니다.

그래서 res.end() 함수를 마지막에 작성해야 합니다.

 

server 객체에서 server.on() 함수를 사용하면 이벤트를 등록할 수 있으며,

server.listen() 함수를 사용하면 서버를 실행시킬 수 있습니다.

server.listen() 함수는 코드 제일 마지막에 작성합니다.

const server = http.createServer(function(req, res) {
    // 클라이언트가 접속했을 때 실행되는 함수
    res.write('<h1>Hello</h1>');
    // res.end가 없으면 홈페이지가 무한 로딩되서 end를 작성해야 로딩이 끝남
    res.end('<hr>');
});

// server.on()  이벤트를 등록
// server.listen()  서버를 실행합니다.

 

코드를 작성하고 실행합니다.

const http = require('http');

const server = http.createServer(function(req, res) {
    res.write('<h1>Hello</h1>');
    res.end('<hr>');
});

server.listen(8080, function() {
    console.log('8080번 포트로 실행');
});
// 8080포트로 서버가 정상실행되면 콘솔 로그가 찍힘
// localhost:8080 으로 접속가능

 

콘솔 창에 메시지가 출력됩니다.

여기서 포트를 8080으로 설정했다는 것을 기억하고 홈페이지를 접속합니다.

http://localhost:8080으로 접속을 합니다.

 

그러면 res.wrtie로 작성한 내용과 res.end로 작성한 hr 태그가 출력되는 것을 볼 수 있습니다.

 

서버 종료는 터미널 창에서 Ctrl + C 버튼을 눌러서 종료합니다.

 

  • Response 객체
    • writeHead : 응답 헤더 작성
    • write : 응답 본문 작성
    • end : 응답 본문 작성 후 응답 종료

 

fs 모듈이랑 같이 사용해 보겠습니다.

test.html 파일을 읽어서 data를 전달합니다.

res.wrtieHead(200) 코드는 헤더 값을 전달해 줄 때 사용합니다.

const http = require('http');
const fs = require('fs').promises;

const server = http.createServer(function(req, res) {
    fs.readFile('./test.html')
    .then(function(data) {
        res.writeHead(200);
        res.end(data.toString());
    });
});


server.listen(8080, function() {
    console.log('8080 port open');
});

 

test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>test</title>
</head>
<body>
    test.html 입니다.
</body>
</html>

 

먼저 test.html 파일을 읽어서 res.end()를 실행할 때 데이터를 보여주어서 test.html을 실행했을 때와 똑같은 모습을 볼 수 있습니다.

 

그리고 응답 헤더 값을 확인해 보려면 F12를 눌러서 크롬 개발자 모드로 들어갑니다.

네트워크 - localhost를 눌러봅니다.

응답 헤더 값에 200으로 작성되어 있는 것을 볼 수 있습니다.

 

3. Http 응답 코드

  • 1XX : 처리 중
    • 100: Continue, 102: Processing
  • 2XX : 성공
    • 200: OK, 201: Created, 202: Accepted
  • 3XX : 리다이렉트(다른 페이지로 이동)
  • 4XX : 요청 오류
    • 400: 잘못된 요청, 401: 권한 없음, 403: 금지됨
    • 404: 찾을 수 없음(Page not found)
  • 5XX : 서버 오류

 

 

이상으로 Node.js의 HTTP 모듈에 대하여 알아보았습니다.

감사합니다.

반응형