정말 오랜만에 다시 node.js.. 전에 맛만 보고 말았었는데 한동안 안해서 이미 많이 까먹었지만 더 까먹기 전에 예전에 해봤던 것들 다시 해보자!였었는데 express 없이 서버 실행하는 방법이 궁금해져서 http를 사용해보았다.
예전에 처음 입문했을 때는 express 라이브러리 사용했었는데
이번에는 http 모듈을 사용해볼까? 싶어서 사용해보았다.
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.write('<div>Hello world!</div>');
res.end('<p>안녕 노드 💙</p>');
});
server.listen(8000, () => {
console.log(`listening on 8000 port...`);
});
포트번호는 임의로 8000번 포트를 사용했다. 보통은 8080으로 많이 쓰는 것 같던데, HTTP의 포트 번호가 80이라서 8080으로 두번 써서 쓰는 것인가(?)
res.end를 하지 않으면 응답이 종료되지 않아서 브라우저가 계속 뱅글뱅글 돌고 있다는 것도 알게 되었다. 응답만 한다고 되는게 아니였군.
응답에 대한 정보를 기록
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' })
요청 성공을 의미하는 200과 응답에 대한 정보(html)과 같은 헤더를 wrtieHead에 작성해주면 된다.
클라이언트에 데이터 보내기
res.write('<div>Hello world!</div>');
res.end('<p>안녕 노드</p>');
write와 end로 보낸 HTML이 브라우저에 렌더링되어 나타난다.
listen 메서드는 다음과 같이 사용할 수도 있다.
// server.listen(8000, () => {
// console.log(`listening on 8000 port...`);
// });
server.listen(8000);
server.on('listening', () => {
console.log(`listening on 8000 port!!!`);
});
한번에 여러개의 서버를 실행할 수도 있다는 것을 처음 알았다.
너무 당연하게 무조건 서버는 1개만 켤 수 있겠지~? 라고 생각했었는데..
서버 2개 실행해보기
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.write('<div>Hello world!</div>');
res.end('<p>안녕 노드 💙</p>');
});
server.listen(8000);
server.on('listening', () => {
console.log(`listening on 8000 port!!!`);
});
http
.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.end('<h2>우왕 두번째 서버</h2>');
})
.listen('8080', () => {
console.log('두번째 서버 실행 해보기');
});
createServer
만 여러번 사용하는 것 만으로도 서버를 한번에 여러개 실행시킬 수 있다.
근데 서버를 두개나 실행시킬 일이 없긴 할 것 같아서 가능하구나... 정도만 알고 넘어가면 될 것 같다. ㅎㅎ
const http = require('http');
const fs = require('fs').promises;
const server = http
.createServer(async (req, res) => {
try {
const data = await fs.readFile('./index.html');
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(error.message);
}
})
.listen(8000, () => {
console.log(`listening on 8000 port!!!`);
});
html 파일을 노드에서 fs 모듈을 사용해서 렌더링시켰다.
express 안쓰고 http 써봤는데 코드가 길어져서 express 라이브러리의 절실함을 느꼈다..ㅎㅎ
참고 자료
Node.js 교과서 개정 2판