공부하는 블로그

Node.js | HTTP 웹서버 구축 & File System 본문

Node.js

Node.js | HTTP 웹서버 구축 & File System

치킨닮은닭 2019. 12. 17. 01:32

HTTP

 HTTP는 Hyper Text Transfer Protocol의 약자로 웹 상에서 정보를 주고 받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는데에 쓰인다. TCP와 UDP를 사용하며, 80번 포트가 기본값이다. HTTP를 통해 전달되는 자료는 http:로 시작하는 URL로 조회할 수 있다.

 

HTTP Module

 Node.js에서는 http 모듈을 통해 웹서버를 구축하여 클라이언트의 요청에 응답할 수 있다. http 모듈은 내장모듈이므로 별도의 설치가 필요없다.

 

 http 모듈에는 각종 요청과 연결을 처리하기 위한 Server 객체가 존재한다. 이를 생성하기 위해서는 'createServer()' 함수가 필요하고 종료하기 위해서는 'close()' 함수가 필요하다. 또한 서버를 생성한 이후에는 접속하는 포트를 할당하기 위한 'listen()' 함수가 필요하다. 이를 이용하여 간단한 http 서버를 만들어보자.

 

// 모듈 import
var http = require('http');

// 서버 생성
var app = http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type':'text/html'});
    res.write('<h1>Hello Node.js!</h1>');
    res.end();
})

// 서버의 포트넘버 지정
app.listen(3000, function () {
    console.log('Server listens on port number 3000.....');
});

 

 포트번호가 3000인 서버가 만들어졌다. 이 서버로 오는 http 요청마다 createServer에 전달된 함수가 한 번씩 호출이 된다. 'writeHead()' 함수는 http 프로토콜의 헤더를 설정하는 부분이다. Status Code 200은 정상적으로 요청을 받은 것이며 content-type은 헤더 중 일부분으로 위에서는 html로 응답하도록 설정하였다. 'write()'를 통해 클라이언트에게 응답할 본문을 작성할 수 있다. 웹 브라우저 주소창에 'http://localhost:3000'를 입력하여 접속해보자!

 

 

서버 접속 성공!

 

File System Module

 현재까지는 본문의 html 코드를 직접 'write()' 함수를 통하여 작성해야 하는 불편함이 있다. 이는 내장모듈 중 하나인 fs(file system) 모듈을 통해서 html 파일을 읽어와서 넣는 방법도 있다. 

 

<!-- index.html -->
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>index.html</title>
    </head>
    <body>

        <h1>Hello Node.js</h1>
        <p>this is 'index.html' file</p>
    </body>
</html>

 

// 모듈 import
var http = require('http');
var fs = require('fs');

// 서버 생성
var app = http.createServer(function (req, res) {
    fs.readFile(__dirname + 'index.html', function (err, result) {
        if(err) {   // 파일읽기가 실패했을 경우
            console.log('file read fail : ' + err.message);	// error 메세지 콘솔 출력
        }else { // 파일읽기에 성공했을 경우
            res.writeHead(200, {'Content-Type':'text/html'});
            res.end(result);
        }
    });
});

// 서버의 포트넘버 지정
app.listen(3000, function () {
    console.log('Server listening in port number 3000.....');
});

 

 'readFile()' 함수를 통해 작성한 html 파일을 불러온다. 파일을 읽고 난 후 콜백 함수를 통해 응답할 수 있다. '__dirname'은 현재 파일의 디렉토리를 알려준다. 다시 해당 서버에 요청을 보내보자!

 

서버 접속 결과. html 문서가 제대로 읽어와졌다.

Comments