이번 스프린트는 node.js를 활용하여 간단한 HTTP server 서버를 구축해 보는 것이다.
간단하다고는 하는데 server를 처음 접해본 나에겐 너무 어려운 스프린트였다..
두가지 의문점을 가지고 시작도 못하고 있었다..
그래서 helpdesk와 구글링을 통해 여러가지를 찾아보았고,
아래의 경로대로 따라 들어가보니 nodeJS 사용에 도움이되는 문서들이 많이 있었다..!!
1. nodejs 사이트접속
2. 상단 문서 메뉴 클릭
3. 좌측상단 가이드 메뉴 클릭
Node.js HTTP 처리 과정에 대한 이해를 도와주는 문서를 찾을 수 있었다. => 문서링크
이 문서의 목적은 Node.js HTTP 처리 과정을 잘 이해하게 하는 것입니다. 언어나 프로그래밍 환경과 관계없이 상식선에서 HTTP 요청이 어떻게 동작하는지는 알고 있어야 합니다. Node.js의 EventEmitters와 Streams에도 어느 정도 익숙해야 합니다. 익숙하지 않다면 관련 API 문서를 미리 훑어보는 편이 좋습니다.
server.listen(PORT, ip, () => {
console.log(`http server listen on ${ip}:${PORT}`);
});
```
const http = require('http');
const server = http.createServer((request, response) => {
// 여기서 작업이 진행됩니다!
});
스트림의 'data'와 'end' 이벤트에 이벤트 리스너를 등록해서 데이터를 받을 수 있다.
각 'data' 이벤트에서 발생시킨 청크(?)
는 Buffer(?)
이다. 이 청크가 문자열 데이터라는 것을 알고 있다면 이 데이터를 배열에 수집한 다음 'end' 이벤트에서 이어 붙인 다음 문자열로 만드는 것이 가장 좋다.
알아볼것
// 예시1
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
// 여기서 `body`에 전체 요청 바디가 문자열로 담겨있습니다.
});
// 예시2
req.on('data', chunk => {
let data = '';
data += chunk;
// 이어 붙인 다음 문자열로 만드는 것이 가장 좋습니다.(바로 문자열에 합해주었습니다.)
});
따로 설정하지 않으면 응답의 HTTP 상태 코드는 항상 200이다. 상태 코드를 변경하려면 statusCode 프로퍼티를 설정해야 한다.
response.statusCode = 404; // 클라이언트에게 리소스를 찾을 수 없다고 알려줍니다.
response.setHeader('Content-Type', 'application/json');
response.setHeader('X-Powered-By', 'bacon');
지금까지 설명한 헤더와 상태 코드를 설정하는 메서드는 "암묵적인 헤더"를 사용하고 있다고 가정합니다. 이는 바디 데이터를 보내기 전 적절한 순간에 헤더를 보내는 일을 노드에 의존하고 있다는 의미입니다.
명시적으로 응답 스트림에 헤더를 작성하는 writeHead 메서드가 있다. 이 메서드는 스트림에 상태 코드와 헤더를 작성한다.
response.writeHead(200, {
'Content-Type': 'application/json',
'X-Powered-By': 'bacon'
});
(암묵적이든 명시적이든) 일단 헤더를 설정하고 나면 응답 데이터를 전송할 준비가 된 것이다.
// 방법 1
response.write('<html>');
response.write('<body>');
response.write('<h1>Hello, World!</h1>');
response.write('</body>');
response.write('</html>');
response.end();
// 방법 2
response.end('<html><body><h1>Hello, World!</h1></body></html>');
에코 서버는 요청받은 데이터를 그대로 응답으로 돌려보내는 서버이다.
요청 스트림에서 데이터를 가져와 응답 스트림에 쓰기만 하면 된다.
const http = require('http');
http.createServer((request, response) => {
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
response.end(body);
});
}).listen(8080);
위의 코드에서 아래의 조건이 추가되면
const http = require('http');
http.createServer((request, response) => {
if (request.method === 'POST' && request.url === '/echo') {
let body = [];
request.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
response.end(body);
});
} else {
response.statusCode = 404;
response.end();
}
}).listen(8080);
mdn을 참고하여 작성한 글입니다.