메소드
위에 사진은 HTTP 메소드 중에서도 가장 많이 쓰이는 메소드이다. POST메소드는 header와 body 둘 다 갖는다.
속성
그동안 fetch
를 이용해 HTTP 요청을 보냈다면 오늘은 HTTP 요청에 따른 응답을 처리할 수 있도록 코드를 작성하였다. node.js 에서는 HTTP 요청을 보내거나, 응답을 받을 수 있는 도구를 제공한다.
그래서 node.js의 HTTP 모듈을 이용하여 간단한 웹 서버를 만드는 것을 해보았다.
구동방식은 매우매우매우 간단한 것이였다. 영어를 입력하고 변환 버튼을 누르면 대문자/소문자로 변환시켜주는 것이였다.
이번 스프린트는 node 공식문서의 HTTP 트랜잭션 해부 부분을 많이 활용하였다.
서버 생성
모든 node 웹 서버 애플리케이션은 웹 서버 객체를 만들어야 한다. (createServer
활용)
const http = require('http');
const server = http.createServer((request, response) => {
})
HTTP 요청이 서버에 오면 node가 트랜잭션을 다루려고 request
와 response
객체를 전달하며 요청 핸들러 함수를 호출한다.
오늘 배운 "on"
이라는 메소드는 지정된 이벤트 처리를 통합하는 것으로, 첫번째 인자에 이벤트 이름을 넣고, 두번째 인자에 통합처리(함수)를 지정한다.
요청 바디
// 생략...
if (request.method === "POST" && request.url === "/upper") {
let body = [];
// 스트림에서 chunk 데이터를 읽을 수 있을 때 'data' 생성
request.on("data", (chunk) => {
body.push(chunk);
// 스트림에서 데이터가 더 이상 제공되지 않을 때 'end' 생성
}).on("end", () => {
// 각 'data' 이벤트에서 발생시킨 청크는 'Buffer'이다.
body = buffer.concat(body).toString();
})
}
HTTP 상태 코드
따로 설정하지 않으면 응답의 HTTP 상태 코드는 항상 200이다.
response.statusCode = 404; //(bad request)
response.end();
명시적인 헤더 데이터 전송
const defaultCorsHeader = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Accept',
'Access-Control-Max-Age': 10
};
메소드가 옵션일 때, CORS 설정
if (request.method === "OPTIONS") {
// 응답 헤더 작성(statusCode, object)
response.writeHead(200, defaultCorsHeader);
// 응답 본문 작성
response.end()
}
이번 스프린트는 node API 공식 문서를 활용했기 때문에 어렵진 않았다. 다만 요청받은 서버를 직접 응답해보는 과정이 재미있었다. 다음주는 직접 server의 구조를 알아보는 과정에 대해서 배운다.
node.js를 활용해 로컬을 만들고 그것과 연결시킬 것이다. 이 부분도 정말 어렵겠지만, 개발자가 되려면 정말 중요한 내용이기 때문에 빨리 배우고 싶다. 서버를 배우고 나면 조금이나마 개발에 대해서 배우고 있다는 것을 더 실감할 것 같다!
👊 내일의 TIW(today I Will)
이번 주 스프린트 복습