1. HTTP 프로토콜이란?
HTTP(HyperText Transfer Protocol)는 클라이언트(브라우저)와 서버가 요청(Request)과 응답(Response)을 주고받는 공통된 언어입니다.
예를 들어, 사용자가 서버에 메인 페이지를 요청하면, 서버는 이 요청을 이해하고 적절한 데이터를 응답으로 전달합니다.
서버 프로그래밍을 할 때는 반드시 HTTP 프로토콜 규약을 따라야 합니다.
2. Node.js에서 HTTP 서버 만들기
Node.js에서는 http 모듈을 사용하여 간단하게 HTTP 서버를 만들 수 있습니다.
const http = require('http');
const server = http.createServer((req, res) => {
// 응답 데이터 전송
res.write('<h1>Hello Node!</h1>');
res.write('<p>Hello Server</p>');
res.end('<p>Bye</p>');
});
server.listen(8080); // 서버 8080 포트로 실행
server.on('listening', () => {
console.log('8080번 포트에서 서버 대기 중입니다.');
});
server.on('error', (error) => {
console.error(error);
});
- http.createServer: 클라이언트의 요청이 들어올 때 실행됩니다.
- res.write: 응답 데이터를 스트림 형태로 클라이언트에 전달합니다.
- res.end: 응답을 종료합니다.
3. Content-Type과 헤더 설정
어떤 브라우저에서는 응답 데이터를 HTML로 처리하지 못하는 경우가 있습니다.
이를 방지하려면 응답 헤더에 Content-Type을 설정해야 합니다.
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
- Content-Type: 데이터 형식을 지정합니다. (text/html은 HTML 문서를 의미)
- charset: 데이터의 문자 인코딩을 설정합니다. (utf-8은 한글 지원)
4. HTML 코드 분리하기
HTML 코드를 res.write로 작성하면 유지보수가 어렵고 비효율적입니다.
이를 개선하기 위해 HTML 파일을 별도로 작성하고, Node.js의 fs 모듈을 사용하여 파일을 읽는 방식으로 변경합니다.
HTML 파일 예시 (server1.html)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Node.js 웹 서버</title>
</head>
<body>
<h1>Node.js 웹 서버</h1>
<p>공부 중</p>
</body>
</html>
Node.js 코드 수정
const http = require('http');
const fs = require('fs').promises;
const path = require('path');
const server = http.createServer(async (req, res) => {
try {
// HTML 파일 읽기
const filePath = path.join(__dirname, 'server1.html');
const data = await fs.readFile(filePath);
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.end(data);
} catch (error) {
console.error(error);
// 에러 응답
res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
res.end('파일을 읽는 중 오류가 발생했습니다.');
}
});
server.listen(8080);
server.on('listening', () => {
console.log('8080번 포트에서 서버 대기 중입니다.');
});
server.on('error', (error) => {
console.error(error);
});
'Node.js > 정리' 카테고리의 다른 글
쿠키와 세션을 활용한 로그인 구현 및 보안 개선 (0) | 2025.01.20 |
---|---|
Node.js로 RESTful Server 만들어보기 (0) | 2025.01.13 |
Node.js 란? (1) | 2025.01.05 |