4주 프로젝트 DAY 14

  • koa post 라우터에서 params읽기
  • http Header에서 Content-Type Accept 뭘 의미하는걸까?
  • serverless-offline으로 테스트가 동작한다! -> 이제 배포를 해봅시다.

koa post 라우터에서 body읽기

현재 상황

요청을 받는 라우터

testRouter.post("/postTest", (ctx) => {
  const { body } = ctx.request.body;
  const { params } = ctx.params;
  console.log("포스트!!");
  console.log("바디" , body);
  console.log("바디" , params);

  ctx.body = "world!!";
  ctx.status = 200;
});

요청 보내는 test 코드의 일부

async function postTest(): Promise<string> {
  const url = "http://localhost:4002/postTest";
  const settings = {
    method: "post",
    header: {
      "Accept": "text/plain",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ "user": {
      "email" : "asdf@naver.com",
      "password" : "asdf",
    }}),
  };
  const response = await fetch(url, settings);

  if (!response.ok) {
    throw new Error(response.statusText);
  }

  const temp = await response.text();
  return temp;
}

image.png

30분동안 바보짓 했음...

koa-body로 koa-bodyparser, koa-bodyparser-ts 등등 설치해서 해봣지만
문제는 그게 아니였음...

koa와 연관된 미들웨어들 정보를 얻을 수 있다.
https://github.com/koajs/koa/wiki

이미 koa-body를 미들웨어에 적용이 되어있는 상황인데..
왜 bodyparser가 없어서 body를 파싱하는거라고 생각했을까..
koa-body로 이미 bodyparser로 동작하는데 무슨... 바보같은 짓을...

문제는 const { body } = ctx.request.body; 이거였다.
ctx.request.body에 json 들어가있는데.. { body }로 하면 무슨수로 읽는가..당연히 undefined지...

testRouter.post("/postTest", (ctx: Koa.Context) => {
  const body = JSON.parse(ctx.request.body);
  console.log("포스트!!");
  console.log("바디", body, body.user, body.user.email);

  ctx.body = "world!!";
  ctx.status = 200;
});

image.png

http Header에서 Content-Type Accept 뭘 의미하는걸까?

네트워크로 바이너리 파일을 보내는 경우?
https://juyoung-1008.tistory.com/4

http 헤더구조
https://12bme.tistory.com/325

Accept
클라이언트가 서버에게 난 이런 타입의 데이터를 받고 싶다라고 명시하는 것

클라이언트가 허용할 수 있는 파일 형식(MIME TYPE)으로 /은 특정 유형이 아닌 모든 파일형식을 지원한다는 의미가 됩니다.

출처: https://12bme.tistory.com/325 [길은 가면, 뒤에 있다.]

Content-type
클라이언트가 서버에게 난 이런 타입의 데이터타입으로 요청보낸다는 것을 명시하는 것

serverless-offline으로 테스트가 동작한다! -> 이제 배포를 해봅시다.

현재 상황
기존 koa 앱을 serverless-http 라이브러리를 이용하여 API를 감싸서 serverless 로 쓸 수 있게 되었습니다.

image.png

출처

server도 port도 socket도 필요가 없습니다.
우리는 http 프로토콜 썼는데, socket을 언제 썼어?

image.png

출처: ibm

Application?
지금 제가 만드는 기술 스택은 koa를 쓰는데, koa는 server 프로그램을 쉽게 개발하게 도와주는 framework입니다.

server도 결국 프로그램이고, 프로그램이 동작하려면 컴퓨팅 자원이 있어야죠.
컴퓨팅 자원을 추상화해서 프로그램들을 동작시키기 위한 환경을 구축한 것이 OS 입니다.
server프로그램을 application이라고 합시다. application은 네트워크를 통해 http 프로토콜을 사용해서
client의 요청을 받아서 응답해주는 역할을 합니다.

image.png
출처

소켓은 결국 네트워크를 쓸때 사용해왔습니다.