Express
는 Node.js
위에서 동작하는 웹 프레임워크로, 내부적으로 Node.js
의 내장 HTTP
모듈을 사용합니다. 이 내장 HTTP
모듈은 기본적으로 HTTP
서버를 생성하고, 클라이언트의 요청을 처리하며, 응답을 반환하는 기능을 제공합니다.
다음은 Node.js
의 내장 HTTP
모듈을 사용하여 간단한 웹 서버를 구현한 코드 예제와, 이를 바탕으로 HTTP
라이브러리가 어떻게 동작하는지 설명한 내용입니다.
const http = require('http');
// http.createServer() 함수는 HTTP 서버를 생성합니다.
// 콜백 함수는 클라이언트의 요청이 들어올 때마다 실행됩니다.
const server = http.createServer((req, res) => {
// req: http.IncomingMessage 객체
// res: http.ServerResponse 객체
// 클라이언트가 보낸 요청 URL, 메서드 등의 정보를 출력할 수 있습니다.
console.log(`${req.method} ${req.url}`);
// 응답 상태 코드와 헤더를 설정합니다.
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
// 응답 본문을 전송합니다.
res.end('Hello, Node.js HTTP Server!\\n');
});
// 서버가 3000번 포트에서 요청을 기다립니다.
server.listen(3000, () => {
console.log('서버가 포트 3000에서 실행 중입니다.');
});
모듈 불러오기:
const http = require('http');
HTTP 서버 생성:
const server = http.createServer((req, res) => { ... });
http.createServer()
는 새 HTTP 서버 인스턴스를 생성합니다.req
객체는 클라이언트의 요청 정보를 담고 있으며, res
객체는 서버가 클라이언트에게 응답을 보내기 위한 메서드와 속성을 제공합니다.요청 처리:
console.log(`${req.method} ${req.url}`);
응답 구성:
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, Node.js HTTP Server!\\n');
Content-Type
헤더를 text/plain
으로 지정합니다.res.end()
를 호출하면 응답 본문이 전송되고, 응답이 종료됩니다.서버 시작:
server.listen(3000, () => { ... });
이벤트 기반 아키텍처:
Node.js의 HTTP 모듈은 이벤트 루프를 기반으로 동작합니다.
createServer()
로 생성된 서버는 클라이언트의 연결 및 요청 이벤트를 계속 감지합니다.요청과 응답 객체:
내장 HTTP 모듈의 역할:
Express와 같은 프레임워크는 이 기본 HTTP 모듈 위에 추가 기능(미들웨어, 라우팅, 에러 핸들링 등)을 덧붙여 개발자가 보다 쉽게 웹 애플리케이션을 구축할 수 있도록 추상화된 API를 제공합니다.