서버와 클라이언트의 관계
클라이언트가 서버로 요청(request)을 보냄
서버는 요청을 처리
처리 후 클라이언트로 응답(response)을 보냄
노드로 http 서버 만들기
http 요청에 응답하는 노드 서버
createServer로 요청 이벤트에 대기
req 객체는 요청에 관한 정보가, res 객체는 응답에 관한 정보가 담겨 있음
-> res 메서드로 응답 보냄
write로 응답 내용을 적고
end로 응답 마무리(내용을 넣어도 됨)
-> listen(포트) 메서드로 특정 포트에 연결
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>Hello Kuwhawha<p>');
})
.listen(8080, () =>{
console.log('8080번 포트에서 서버 대기중입니다.')
});
server.on('error', (error) => {
console.error(errors);
}
포트는 서버 내에서 프로세스를 구분하는 번호
기본적으로 http 서버는 80번 포트 사용(생략가능, https는 443)
예) www.gilbut.com:80 -> www.github.com
다른 포트로 데이터베이스나 다른 서버 동시에 연결 가능
사파리같은 브라우저는 HTML과 문자열을 구별하지 못함
const http = require('http');
const server = http.createServer((req, res) => {
// 사파리의 경우에는 html과 문자열을 구분하지 못함 그래서 추가해줘야함..
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.write('<h1>Hello Node!</h1>');
res.end('<p>Hello Server!</p>');
});
server.listen(8080);
server.on('listening', () => {
console.log('8080번 포트에서 서버 대기 중입니다!');
});
server.on('error', (error) => {
console.error(error);
});
서버를 2개 이상 돌릴수도 있음
const http = require('http');
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.write('<h1>Hello Node!</h1>');
res.end('<p>Hello Server!</p>');
})
.listen(8080, () => { // 서버 연결
console.log('8080번 포트에서 서버 대기 중입니다!');
});
http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.write('<h1>Hello Node!</h1>');
res.end('<p>Hello Server!</p>');
})
.listen(8081, () => { // 서버 연결
console.log('8081번 포트에서 서버 대기 중입니다!');
});
하지만 가장 좋은 방법은 html 읽어서 전송하는 것이 가장 좋다.
write와 end에 문자열을 넣는 것은 비효율적
fs 모듈로 html을 읽어서 전송하자
write가 버퍼도 전송 가능
const http = require('http');
const fs = require('fs').promises;
http.createServer(async (req, res) => {
try {
const data = await fs.readFile('./server2.html');
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
res.end(data);
} catch (err) {
console.error(err);
res.writeHead(500, { 'Content-Type': 'text/plain; charset=utf-8' });
res.end(err.message);
}
})
.listen(8080, () => {
console.log('8080번 포트에서 서버 대기 중입니다!');
});
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Node.js 웹 서버</title>
</head>
<body>
<h1>Node.js 웹 서버</h1>
<p>만들 준비되셨나요?</p>
</body>
</html>
'Node.js' 카테고리의 다른 글
쿠키, 세션 이해하기 (0) | 2020.12.14 |
---|---|
REST API와 라우팅 (0) | 2020.12.14 |
thread_pool, 이벤트, error 처리하기 (0) | 2020.12.13 |
파일 폴더 읽기, 쓰기 (0) | 2020.12.12 |
버퍼와 스트림 (0) | 2020.12.12 |