[Node.js] 요청과 응답
서버는 클라이언트의 요청(request)을 읽고 처리한 뒤, 응답(response)을 보냅니다.
클라이언트로부터 요청이 왔을 때, 어떤 작업을 수행할 지 이벤트 리스너를 미리 등록해두어야 합니다.
1. 이벤트 리스너를 가진 노드 서버 만들기
1-1. http createServer()
- http 서버가 있어야 웹 브라우저의 요청을 처리할 수 있습니다.
- createServers(콜백 함수): 요청이 들어올 때마다 매번 콜백 함수가 실행됨.
- res.writeHead
: 응답에 대한 정보를 기록하는 메서드
: 이 정보가 기록되는 부분을 헤더(Header)라고 부름 - res.write
: 클라이언트로 보낼 데이터
: body라고 부름 - res.end
: 응답을 종료하는 메서드
: 인수가 있다면 그 데이터도 클라이언트로 보낼 응답을 종료
- res.writeHead
const http = require('http');
http.createServer((req, res) => {
//여기에 어떻게 응답할 지를 적습니다.
// 200: 성공적인 요청임
// {'Content-Type': 'text/html; charset=utf-8'}: 응답에 대한 정보를 보내는데 콘텐츠의 형식이 HTML임, 한글 표시: utf-8
res.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
// HTML 모양의 문자열을 보냄 or 버퍼 가능
res.write('<h1>Hello Node!</h1>');
res.end('<p>Hello Server!</p>');
})
.listen(8080, () => {
console.log('8080번 포트에서 서버 대기 중 입니다!');
});
<서버에 listening 이벤트 리스너 붙이기>
const http = require('http');
const server = 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>');
});
server.listen(8080);
server.on('listening', () => {
console.log('8080번 포트에 서 대기 중 입니다.');
});
server.on('error', () => {
console.error(error);
});
<한 번에 여러 서버도 실행 가능>
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번 포트에서 서버 대기 중 입니다!');
});
localhost와 포트
- localhost : 현재 컴퓨터의 내부 주소
자신의 컴퓨터에서만 접근 가능하며 외부 접근 불가능 (서버 테스트 시 사용) - 127.0.0.1 = 숫자 주소 = IP(Interner Protocol) = localhost
- 포트: 서버 내에서 프로세스를 구분하는 번호
- 서버는 HTTP 요청을 대기하는 것 외에도 다양한 작업을 함
- 이때 서버는 프로세스에 포트를 다르게 할당하여 들어오는 요청을 구분
- 포트 번호는 IP 주소 뒤에 콜론(:)과 함께 붙혀서 사용
- 포트 하나에 서비스 하나만 사용이 가능
- 실제 배포시에는 80 or 443번 포트를 사용
- 리눅스, 맥의 경우 1024번 이하의 포트에 연결할 때 관리자 권한이 필요하므로, 명령어 앞에 sudo를 붙혀야 함.
1-2 HTML 파일을 fs 모듈로 읽어서 전송하기
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Node.js 웹 서버</title>
</head>
<body>
<h1>Node.js 웹 서버</h1>
<p>만들 준비되셨나요?</p>
</body>
</html>
const http = require('http');
const fs = require('fs').promises;
http.createServer(async (req, res) => {
try{
// data 변수에 버퍼를 저장하고 클라이언트에게 보내줍니다.
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/html; charset=utf-8'});
res.end(err.message);
}
})
.listen(8081, () => {
console.log('8081번 포트에서 서버 대기 중 입니다!');
});
HTTP 상태 코드
res.writeHead에 첫 번째 인수로 상태 코드를 넣었는데, 브라우저는 서버에서 보내주는 상태 코드를 보고 요청이 성공했는지 실패했는지를 보여줌
- 2XX
: 성공을 알리는 상태코드.
: 200(성공), 201(작성됨) - 3XX
: 리다이렉션(다른 페이지로 이동)을 알리는 상태코드. 어떤 주소를 입력했는데 다른 주소의 페이지로 넘어갈 때 이 코드가 사용됨.
: 301(영구 이동), 302(임시 이동)
: 304(수정되지 않음: 요청의 응답으로 캐시를 사용했다는 의미) - 4XX
: 요청 오류 (요청 자체에 오류가 있음)
: 400(잘못된 요청), 401(권한 없음), 403(금지됨), 404(찾을 수 없음) - 5XX
: 서버 오류 (요청은 왔지만 서버에 오류가 생겼을 때 발생)
: 예기치 못한 에러 발생 시 서버가 알아서 5XX대 코드를 보냄
: 500(내부 서버 오류), 502(불량 게이트웨이), 503(서비스를 사용할 수 없음)
Author And Source
이 문제에 관하여([Node.js] 요청과 응답), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@developerelen/Node.js-요청과-응답저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)