클라이언트가 서버에게 전달하려는 메세지를 담는 객체.
서버에서 클라이언트로 응답 메세지를 전송시켜주는 객체.
Request 객체에서 가장 많이 쓰이는 변수: query, params, body
app.get("/", (req, res) => {
// req.query
console.log(req.query);
res.send("정상적으로 반환되었습니다.");
});
API client나 브라우저에서 localhost:3000/?key=value에 get 요청을 보낼 때 req.query에 {key: "value"} 객체가 저장된다.
app.get("/:id", (req, res) => {
// req.params
console.log(req.params);
res.send(":id URI에 정상적으로 반환되었습니다.");
});
req.query와 굉장히 유사한데, 차이점은 key값을 uri 부분에서 지정해준다. 예를 들어서 localhost:3000/value에 요청을 보내면 req.params에는 {id: "value"} 객체가 저장된다. req.query에서는 키-값 둘 다 지정해준다면 req.params는 ?key=value 대신 값 하나만 받아서 지정된 키와 묶어주는 느낌..?
// 1
app.use(express.json());
// 2
app.post("/", (req, res) => {
console.log(req.body);
res.send("기본 uri에 POST 메소드가 정상적으로 실행되었습니다.");
});
get 메소드가 아니기 때문에 브라우저에서는 확인할 방법이 없지만 이럴 때 API client를 활용하면 편리하다.

서버 실행 후 위 그림처럼 원하는 uri에 POST 메소드를 보낼 때 Body 칸에 JSON형식(js의 객체와 동일)으로 추가를 해주고 요청을 보내면 req.body에 그 값이 객체로 저장된다.
Response 객체에서 가장 많이 쓰이는 메소드: send, json, status
app.get("/", (req, res) => {
res.send("정상적으로 반환되었습니다.");
});
데이터(응답입니다)를 포함하여 응답을 전달한다.

app.get("/", (req, res) => {
res.json({
keyKey: "value입니다",
이름입니다: "이름일까요?",
});
});
응답을 JSON 형식으로 전달한다.

app.get("/", (req, res) => {
res.status(400).json({
keyKey: "value입니다",
이름입니다: "이름일까요?",
});
});
응답에 HTTP 상태 코드를 지정한다.
