Node.js는 Chrome V8 엔진을 기반으로 구축된 JavaScript 실행 환경으로 웹 애플리케이션 개발에 널리 사용됩니다. Node.js에서는 쉽게 HTTP 서버를 구축하고 브라우저를 통해 서버의 웹 페이지에 액세스할 수 있습니다. 이 기사에서는 Node.js를 사용하여 HTTP 서버를 구축하는 방법을 소개합니다.
먼저 Node.js 환경을 로컬에 설치해야 합니다. Node.js 공식 웹사이트(https://nodejs.org/)에 접속하여 최신 버전을 다운로드하고 설치할 수 있습니다. 설치가 완료된 후 명령줄에 다음 명령을 입력하여 설치 성공 여부를 확인할 수 있습니다.
node -v
Node.js 버전 번호가 올바르게 표시되면 설치가 성공한 것입니다.
Node.js로 HTTP 서버를 만드는 것은 매우 쉽습니다. JavaScript 파일에 Node.js의 내장 "http" 모듈을 도입하고 서버를 생성하고 지정된 포트를 수신하기만 하면 됩니다. 다음은 간단한 예입니다.
const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World! '); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
위 코드는 HTTP 서버를 생성하고 포트 3000을 수신합니다. 클라이언트가 서버에 액세스하면 "Hello World!" 문자열이 반환됩니다.
HTTP 서버를 시작한 후 브라우저를 사용하여 서버에 액세스할 수 있습니다. 브라우저의 주소 표시줄에 "http://localhost:3000"을 입력하면(서버가 로컬로 실행되지 않는 경우 "localhost"를 서버 IP 주소로 대체) 브라우저에 "Hello World!" 문자열이 표시되는 것을 볼 수 있습니다.
위의 예는 가장 간단한 예일 뿐입니다. 실제로 HTTP 요청을 처리할 때 요청 헤더와 요청 본문의 내용을 기반으로 해당 응답을 생성해야 합니다. Node.js의 http 모듈은 요청 처리를 위해 특별히 API를 제공합니다. 예를 들어 req.url을 통해 요청한 URL 주소를 얻을 수 있고, req.method를 통해 요청한 메소드를 얻을 수 있습니다. 다음은 다양한 URL 주소에 따라 다양한 메시지를 반환하는 예입니다.
const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); if (req.url === '/about') { res.end('This is about page'); } else if (req.url === '/contact') { res.end('This is contact page'); } else { res.end('Hello World! '); } }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
브라우저에서 "http://localhost:3000/about"을 방문하면 브라우저에 "This is about page" 문자열이 표시되는 것을 볼 수 있습니다. " http://localhost:3000/contact"를 입력하면 브라우저에 "연락처 페이지입니다"라는 문자열이 표시됩니다. "http://localhost:3000"을 방문하면 브라우저에 "Hello World!" 문자열이 표시됩니다.
GET 요청을 처리하는 것 외에도 POST 요청을 처리하고 클라이언트가 서버에 전달한 데이터를 저장할 수도 있습니다. Node.js의 http 모듈은 POST 요청을 처리하기 위한 API도 제공합니다. 다음은 간단한 POST 요청 처리 예시입니다.
const http = require('http'); const hostname = '127.0.0.1'; const port = 3000; const server = http.createServer((req, res) => { if (req.method === 'POST') { let body = ''; req.on('data', chunk => { body += chunk.toString(); }); req.on('end', () => { console.log(`Received data: ${body}`); res.end('Data received'); }); } else { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World! '); } }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); });
위 코드는 HTTP 요청을 처리할 때 먼저 요청 방법이 POST인지 확인하고, POST인 경우 데이터 전송 이벤트를 모니터링하여 전송된 데이터를 바디에 저장합니다. 변수로 설정하고 데이터 전송이 완료된 후 인쇄합니다. 클라이언트 HTML 파일에서