반응형
필요한 모듈 불러오기
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 서버 구동.' 메시지를 콘솔에 출력한다.
반응형
'Node.js' 카테고리의 다른 글
[Node.js] TCP 클라이언트(client)와 서버(server) 만드는 방법 (0) | 2023.08.14 |
---|---|
[Node.js] 파일 입출력, 표준 입출력 | Stream, pipe() (0) | 2023.08.13 |
[Node.js] 웹 서버 만드는 방법 | 웹 서버 생성, 포트 설정, 요청에 따른 파일 서비스, 에러 처리 (0) | 2023.08.12 |
[Node.js] ➍ 모듈(module) 사용법 | 클래스(class) (0) | 2023.08.11 |
[Node.js] ➌ 모듈(module) 사용법 | m4, m5 (0) | 2023.08.10 |