endpoint |
Method |
기능 |
/upper |
POST |
문자열을 대문자로 |
/lower |
POST |
문자열을 소문자로 |
- POST에 문자열을 담아 요청을 보낼 때는 HTTP 메시지의 body(payload)를 이용합니다.
- 서버는 요청에 따른 적절한 응답을 클라이언트로 보내야 합니다.
- 서버는 POST 요청 이외의 다른 모든 요청에 대하여, 클라이언트에 잘못된 요청이라고 알려줄 수 있어야 합니다.
- CORS 관련 헤더를 OPTIONS 응답에 적용해야 합니다.
- 클라이언트의 preflight request에 대한 응답을 돌려 줘야 합니다.
- preflight request에 대한 응답 헤더는 이미 작성되어 있습니다.
서버 실행
//일반적인 실행
node server/basic-server.js
- package.json파일에서 script 부분에 추가
"scripts": {
"start": "node server/basic-server.js",
"test": "echo no test",
"submit": "echo you don\\'t need to submit"
}
- nodemon을 사용하면 내용을 수정하거나 추가한 경우 구지 서버를 다시 끄고 키지 않아도 서버에 바로 반영이 되게 함.
- nodemon 설치
$ npm install nodemon --save
- package.json파일의 script 부분 추가
"scripts": {
"start": "node server/basic-server.js",
"backend" : "nodemon server/basic-server.js",
"test": "echo no test",
"submit": "echo you don\\'t need to submit"
},
const server = http.createServer((request, response) => {
const { method, url } = request;
if (method === "OPTIONS") {
response.writeHead(200, defaultCorsHeader);
response.end();
}
else if (method == "POST") {
let data = "";
request
.on("data", (chunk) => {
data = data + chunk;
})
.on("end", () => {
if (url === "/upper") {
data = data.toUpperCase();
response.writeHead(201, defaultCorsHeader);
response.end(data);
} else if (url === "/lower") {
data = data.toLowerCase();
response.writeHead(201, defaultCorsHeader);
response.end(data);
} else {
response.writeHead(404, defaultCorsHeader);
response.end("not found");
}
}).on("error", err => console.log(err));
} else {
response.writeHead(400, defaultCorsHeader);
response.end("bad reqeust");
}
});
const defaultCorsHeader = {
"Access-Control-Allow-Origin": "http://localhost:5000",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, Accept",
"Access-Control-Max-Age": 10,
};
Content-Type 을 text/plain 으로 수정할 경우, preflight request 발생하지 않는 이유
- Content-Type이 text/plane 경우에는 단순 요청의 경우이기엔 사전 요청을 생략
- 단순 요청 관련된 부분은 MDN CORS에서 확인 가능
WS와 WAS의 차이
Web Server
- 웹서버(WS)는 클라이언트(브라우저)로부터 요청을 받아들이고 웹페이지를 정적으로 처리함. 이때 웹페이지는 그림,css,js를 포함함
- 웹페이지를 클라이언트로 전달하고 클라이언트로부터 컨텐츠를 전달 받는 역할을 담당
- 이 외에도 정적 컨텐츠 관리, 인증, HTTPS 지원등의 기능 제공
- 시스템의 모니터링 또는 장치관리를 위한 목적으로 사용
- 추가적인 소프트웨어 설치없이 대부분의 os에 포함된 웹브라우저만으로 서비스 제공
- 종류: 아파치, 인터넷 정보서버, 엔터프라이즈 서버
Web Application Server
- 웹앱서버는 HTTP를 통해 컴퓨터나 장치에 앱을 수행해주는 미들웨어
- 동적 서버 콘텐츠를 수행하다는 것으로 일반 웹서버와 구별됨
- 주로 DB 서버와 같이 서비스를 수행함
- 분산 트랜잭션, 보안, 메시징, 쓰레드 처리등의 기능을 처리하는 분산 환경에서 사용되는 미들웨어
- 웹서버+웹컨테이너로 웹상에서 사용하는 컴포넌트를 올려놓고 사용하게 되는 서버
- 종류: Web Logic, Jeus, Tomcat, JBoss
이 둘의 차이점은
- 웹서버는 정적데이터, 웹앱서버는 동적데이터를 처리
- 웹서버에 웹문서를 처리하는 기능을 분배하여 서버의 부담을 줄일수 있고, 이로인해 웹어플리케이션에서 정적 데이터를 처리하기 위해 지연되는 시간이 줄어들어 동적 컨텐츠의 처리 속도가 빨라진다.