Request와 Response

윤태규·2023년 11월 29일

1) Request, Response란 뭘까?

  • Request클라이언트가 서버에게 전달하려는 정보나 메시지를 담는 객체를 의미합니다. Request의 세부 사항에는 URL, Http method, 헤더(header), 쿼리 파라미터(query parameter), 바디 데이터(body data) 등이 포함됩니다.

  • Response서버에서 클라이언트로 응답 메시지를 전송시켜주는 객체입니다. Response의 세부 사항에는 상태 코드(status code), 응답 데이터(response data), 응답 헤더(response header) 등이 포함됩니다.

  • 2) 서버 모듈

    • Node.js의 서버 모듈에는 대표적으로 http 모듈Express.js가 존재합니다. → 여기서, http 모듈은 Node.js에서 기본 제공하는 Http 서버 모듈입니다.
    • Express.js 는 http 모듈을 확장하여 제공합니다.
    • Express.js 는 기존 http 모듈의 메서드도 사용할 수 있지만, Express.js가 추가 제공하는 메서드나 속성들을 사용할 수 있습니다.
    • 최근에는 Express.js의 메서드가 더욱 편리하기에 기존 http 모듈의 메서드는 잘 사용되고 있지 않습니다.
  • 3) Express.js의 흐름 파악하기

    💪 **Express.js 통신 흐름**
    
    1. **클라이언트**는 **특정 URL**과 **데이터**를 담은 **요청(Request)**을 **서버**에 전송합니다.
    2. **서버**는 받은 데이터에 따라 필요한 **비즈니스 로직을 수행**합니다.
    3. **서버**는 처리된 결과를 **클라이언트**에게 **응답(Response)**으로 보내줍니다.

    Express.js의 req, res 객체
    1) Express.js의 req, res 객체 살펴보기
    req 객체

  • req.app : req 객체를 통해 Express.js의 app 객체에 접근할 수 있습니다.

  • req.ip: 요청한 Client의 ip 주소가 담겨 있습니다.

  • req.body: Request를 호출할 때 body로 전달된 정보가 담긴 객체입니다.

    • express.json() Middleware를 이용하여야 해당 객체를 사용할 수 있습니다.
  • req.params: 라우터 매개 변수(Path Params)에 대한 정보가 담긴 객체입니다.

  • req.query: Request를 호출할 때 쿼리 스트링으로 전달된 정보가 담긴 객체입니다.

  • req.cookies: Request를 호출할 때 Cookie 정보가 담긴 객체입니다.

    • cookie-parser Middleware를 이용하여야 해당 객체를 사용할 수 있습니다.
  • req.get(Header): 헤더에 저장된 값을 가져오고 싶을 때 사용합니다.

res 객체

  • res.app : res 객체를 통해 Express.js의 app 객체에 접근할 수 있습니다.
  • res.status(코드) : Response에 HTTP 상태 코드를 지정합니다. → Http 상태 코드에 대해 자세히 알고싶다면 여기를 클릭해주세요!
  • res.send(데이터) : 데이터를 포함하여 Response를 전달합니다.
    • ex) res.send('Hello, World');
  • res.json(JSON) : JSON 형식으로 Response를 전달합니다.
    • ex) res.json({ message: 'Hello, World' });
  • res.end() : 데이터 없이 Response를 전달합니다.
  • res.redirect(주소) : 리다이렉트할 주소와 함께 Response를 전달합니다.
    • ex) res.redirect('https://naver.com');
  • res.cookie(Key, Value, Option) : 쿠키를 설정할 때 사용합니다.
  • res.clearCookie(Key, Value, Option) : 쿠키를 제거할 때 사용합니다.
  • 2) Express.js의 Response 파헤쳐보기
    👉 서버에서 클라이언트에게 보내는 메시지를 응답(Response)이라고 부릅니다.
    status는 서버가 클라이언트에게 응답(Response)를 보낼 때 Http 상태 코드를 전송하는것을 나타내며, send, json은 서버가 클라이언트에게 응답(Response) 데이터를 전송하는 방법을 나열한 것입니다.
    res.status(상태 코드)
app.post('/', (req, res) => {
  return res.status(201).json({key: 'Value'});
});
  • 서버가 클라이언트에게 응답(Response)을 보냈을 때, 상태 코드를 전달할 때 사용됩니다.
  • Http 상태 코드는 HTTP 요청이 어떠한 상태로 처리 되었고, 완료되었는지를 나타냅니다.
    • ex) 200은 요청이 성공적, 404는 요청한 리소스가 서버에 존재하지 않음
  • Express에서 상태 코드를 명시하지 않으면, 상태 코드는 200으로 자동 전달됩니다.
    res.json(JSON), res.send(데이터)
app.post('/', (req, res) => {
  return res.status(201).json({key: 'Value'});
});
  • 서버가 클라이언트에게 응답(Response)을 보냈을 때, 데이터를 전달할 때 사용됩니다.
  • res.json() 메서드는 JSON 형식의 데이터만 보낼 수 있습니다. Response Header의 Content-Type이 ‘application/json’으로 설정됩니다.
  • res.send() 메서드는 다양한 유형의 데이터를 보낼 수 있습니다.Response Header의 Content-Type을 데이터 유형에 따라 다르게 설정할 수 있습니다. → Content-Type은 서버가 클라이언트에게 전달하는 데이터의 타입을 지정할 때 사용됩니다.
  • 3) Express.js의 Request 파헤쳐보기 👉 클라이언트에서 서버로 보내는 메시지를 **요청(Reuqest)**이라고 부릅니다. `body`, `params`, `query`는 클라이언트가 서버에 **요청(Request)**을 보낼 때 데이터를 어떤 방식으로 전송하는지에 대한 여러가지 방법들을 나열한 것 입니다. **req.body: (Body)** ```jsx app.post('/', (req, res) => { // Request에서 body 데이터를 ReqBody 변수에 할당한다. const ReqBody = req.body; return res.status(201).json({}); }); ``` - 클라이언트가 **요청(Request)**을 보냈을 때, Body에 데이터를 삽입하였을 때 사용됩니다. - `**req.body`를 사용하기 위해서는 `express.json()` 미들웨어를 사용해야 합니다.** - `Key-Value`의 데이터 형식을 가지고 있으며, 대표적으로 **JSON** 형태를 띄고 있습니다. - **Body**는 `Query String`, `Path Variable(params)`과 다르게, URL만을 가지고 어떤 데이터를 전달하였는지 확인할 수 없는 특징을 가지고 있습니다. - 데이터를 생성하거나 수정이 필요한 데이터의 전달을 위해 사용됩니다. ex) 사용자의 ID, 사용자의 Password, 게시글 제목 등 - `POST`, `PUT`과 같은 Http method에서 사용됩니다. **req.query: (Query String)** ```jsx app.get('/', (req, res) => { // Request에서 Query String 데이터를 ReqQuery 변수에 할당한다. const ReqQuery = req.query; return res.status(200).json({}); }); ``` - 클라이언트가 **요청(Request)**을 보냈을 때, URL에 원하는 `Key-Value`를 삽입하여 데이터를 전달합니다. - URL의 마지막에 `?`기호를 이용해 Query String을 사용할 수 있습니다. ex) `https://sparta.com**?name=이용우&age=29**` - 특정 콘텐츠의 위치를 표시하거나 웹 페이지에 특정한 옵션을 설정할 때 사용합니다. ex) 게시글의 정렬, 특정 날짜의 게시글만 출력하는 옵션 설정 등 - 주로 서버의 리소스를 필터링하거나 정렬하는 데 사용됩니다. ex) `https://sparta.com/posts?sort=desc&page=3&limit=20` - `limit=20`: 1 페이지당 **20개의 게시글**을 조회한다. - `page=3`: **3 페이지**를 조회한다. - `sort=desc`: 게시글을 **내림차순**으로 정렬한다. - `GET`과 같은 Http method에서 사용됩니다. **req.params: (Path Variable)** ```jsx app.get('/:name', (req, res) => { // Request에서 Path Params 데이터의 name Key를 가진 Value를 name 변수에 할당한다. const { name } = req.params; return res.status(200).json({}); }); ``` - 클라이언트가 **요청(Request)**을 보냈을 때, URL에 원하는 데이터를 삽입하여 전달합니다. - URL 특정 경로를 **매개 변수**로써 사용합니다. - 특정 게시글을 선택하거나 명확한 리소스를 지정해야할 때 사용합니다. ex) 게시글의 상세 정보 조회, 사용자의 상세 정보 조회
profile
끝까지 가자

0개의 댓글