Mini Node Server

Siwoo Pak·2021년 8월 4일
0
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": {
  //npm start 커맨드로 서버실행 가능
    "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",
      // npm run backend 커맨드를 사용하여 nodemon으로 서버 구동
    "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: 메소드가 options 인 경우
  if (method === "OPTIONS") {
    response.writeHead(200, defaultCorsHeader);
    response.end();
  }
  // if: 메소드가 POST url이 /upper 인 경우
  else if (method == "POST") {
    let data = "";
    request
      .on("data", (chunk) => {
        // console.log(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");
  } 
});
  • 특정 도메인에 대한 cors 허용
const defaultCorsHeader = {
  // 이 부분에 특정 origin을 작성해준다.
  "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

이 둘의 차이점은

  • 웹서버는 정적데이터, 웹앱서버는 동적데이터를 처리
  • 웹서버에 웹문서를 처리하는 기능을 분배하여 서버의 부담을 줄일수 있고, 이로인해 웹어플리케이션에서 정적 데이터를 처리하기 위해 지연되는 시간이 줄어들어 동적 컨텐츠의 처리 속도가 빨라진다.
profile
'하루를 참고 인내하면 열흘을 벌 수 있고 사흘을 참고 견디면 30일을, 30일을 견디면 3년을 벌 수 있다.'

0개의 댓글