본문 바로가기

Node.js

[Node.js] HTTP서버 생성, 정적서버, 로그파일

반응형

 

 

 

필요한 모듈 불러오기

const http = require('node:http');
const fs = require('node:fs');
const path = require('node:path');
const os = require('node:os');
const mime = require('mime');

 

필요한 Node.js 내장 모듈과 'mime' 패키지를 불러온다.

(HTTP 서버 생성, 파일 시스템 조작, 파일 경로 조작, 운영 체제 관련 기능, MIME 타입 가져오기)

 

 

 

 

로그 파일 생성

const logfile = fs.createWriteStream('mylog.log', { flags: 'a' });

 

'fs' 모듈을 사용하여 'mylog.log' 파일을 생성하고 로그를 작성할 수 있는 스트림(logfile)을 만든다.

flags는 fs.createWriteStream() 함수에서 사용되는 옵션 중 하나로, 파일을 열 때의 동작을 나타내는 문자열이다 

'a': 추가 모드로 파일을 연다. 파일이 이미 존재하면 뒤에 내용을 추가하며, 파일이 없는 경우 새로 생성한다.

 

 

 

 

HTTP 요청 처리하는 함수(staticServer) 정의

// HTTP 요청 처리하는 함수(staticServer) 정의
function staticServer(req, res) {
  // 클라이언트 요청 정보를 콘솔에 출력
  console.log(req.method, req.url, req.httpVersion);
  console.log(req.headers['user-agent']);

  // 요청 URL이 루트('/')인 경우 기본 파일을 'index.html'로 설정
  if (req.url == '/') {
    req.url = '/index.html';
  }

  // 요청한 파일의 경로를 생성
  let filename = path.join(__dirname, req.url);

  // 요청한 파일의 MIME 타입을 가져옴
  let mimeType = mime.getType(req.url);

  // 파일의 상태를 확인
  fs.stat(filename, function(err, status) {
    if (err) {
      // 파일이 없을 경우 404 오류 응답을 생성
      res.writeHead(404, {'Content-Type': 'text/html;charset=utf-8'});
      res.end(`<h1>${req.url} 파일을 찾을 수 없습니다.</h1>`);
    } else if (status.isDirectory()) {
      // 디렉토리인 경우 403 오류 응답을 생성
      res.writeHead(403, {'Content-Type': 'text/html;charset=utf-8'});
      res.end(`<h1>디렉토리 접근 금지됨.</h1>`);
    } else {
      // 파일이 존재하고 디렉토리가 아닌 경우, 파일 스트리밍 응답을 생성
      res.writeHead(200, {'Content-Type': mimeType + ';charset=utf-8'});
      fs.createReadStream(filename).pipe(res);
    }

    // 로그 파일에 응답 상태와 요청 URL을 로그로 작성
    logfile.write(`[${Date()}] ${res.statusCode} ${req.url}${os.EOL}`);
  });
}

 

 

- staticServer 함수는 클라이언트의 요청을 처리하고 응답을 생성한다.

- 요청 정보와 사용자 에이전트 정보를 콘솔에 출력한다.

- 요청 URL이 루트('/')인 경우 기본 파일을 'index.html'로 설정한다.

- 요청한 파일의 경로를 생성하고, 요청한 파일의 MIME 타입을 가져온다.

- 'fs.stat'를 사용하여 파일의 상태를 확인하고, 상태에 따라 적절한 응답을 생성한다.

- 응답을 보내면 로그 파일에 응답 상태와 요청 URL을 로그로 작성한다.

 

 

 

 

HTTP 서버 생성 및 리스닝

const httpServer = http.createServer(staticServer);

httpServer.listen(80, function() {
  console.log('HTTP 서버 구동.');
});

 

 

- http.createServer를 사용하여 HTTP 서버를 생성한다. 요청이 들어올 때마다 staticServer 함수가 호출된다.

- 서버를 80번 포트에서 리스닝하고, 서버가 시작되면 'HTTP 서버 구동.' 메시지를 콘솔에 출력한다.

 

 

 

 

 

반응형