본문 바로가기
개발/Node.js

[Node.js] Request 와 Response

by WaDDak 2024. 9. 2.

 

Request 와 Response

  • Request(요청)는 클라이언트가 서버에게 전달하려는 정보나 메시지를 담는 객체를 의미합니다.                                  Request의 세부 사항에는 URL, HTTP메서드, Header, 쿼리 파라미터, 바디데이터 등이 포함됩니다.
  • Response(응답)는 서버에서 클라이언트로 응답 메시지를 전송시켜주는 객체를 의미합니다.                                        Response의 세부 사항에는 상태코드, 응답 데이터, 응답 헤더 등이 포함됩니다.

 

서버 모듈 :

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

 

Express.js 통신 흐름 단계 :

 

  1. 클라이언트 요청 (Client Request)
    • 사용자가 웹 브라우저 또는 API 클라이언트(예: Postman)에서 URL을 입력하거나, 버튼을 클릭하여 서버로 요청을 보냅니다. 이 요청은 HTTP 메서드(GET, POST, PUT, DELETE 등)와 함께 서버로 전송됩니다.
  2. 서버 수신 (Server Reception)
    • Express.js 서버가 클라이언트의 요청을 수신합니다. 이 요청은 HTTP 메서드, URL, 헤더, 본문 등의 정보를 포함하고 있습니다.
  3. 미들웨어 처리 (Middleware Processing)
    • 요청이 수신되면, Express.js는 미리 정의된 미들웨어 함수를 순차적으로 실행합니다.
    • 각 미들웨어는 요청을 처리하거나, 요청 객체(req) 또는 응답 객체(res)를 수정할 수 있습니다.
    • 예를 들어, 요청을 로그로 남기거나, 요청 본문을 파싱하여 JSON 객체로 변환하거나, 사용자가 인증되었는지 확인하는 작업이 수행됩니다.
  4. 라우팅 (Routing)
    • 요청이 미들웨어를 거친 후, Express.js는 요청 URL과 HTTP 메서드에 따라 적절한 라우트 핸들러를 찾습니다.
    • 라우트 핸들러는 요청된 URL 패턴과 일치하는 핸들러 함수입니다. 예를 들어, GET /users 요청에 대해 사용자 목록을 반환하는 핸들러가 실행될 수 있습니다.
  5. 핸들러 실행 (Handler Execution)
    • 일치하는 라우트가 발견되면, 해당 라우트 핸들러가 실행됩니다. 이 핸들러는 요청을 처리하고, 응답을 생성하는 데 필요한 모든 작업을 수행합니다.
    • 이 단계에서 데이터베이스와 상호작용하거나, 필요한 비즈니스 로직을 실행하여 결과를 생성합니다.
  6. 응답 생성 (Response Generation)
    • 라우트 핸들러 또는 미들웨어가 res.send(), res.json(), res.render() 등을 호출하여 클라이언트에게 응답을 생성합니다.
    • 응답에는 HTTP 상태 코드(200, 404, 500 등)와 함께, 클라이언트가 요청한 데이터 또는 HTML 페이지가 포함될 수 있습니다.
  7. 응답 전송 (Response Sent to Client)
    • 생성된 응답이 클라이언트에게 전송됩니다. 클라이언트는 이 응답을 받아 화면에 표시하거나, 후속 작업을 처리합니다.
    • 이후, 서버는 해당 요청-응답 사이클을 종료하고, 다음 요청을 기다립니다.

 

const express = require('express');
const app = express();

// 미들웨어: 모든 요청에 대해 로그를 기록
app.use((req, res, next) => {
    console.log(`Received a ${req.method} request for ${req.url}`);
    next(); // 다음 미들웨어 또는 라우트 핸들러로 넘어감
});

// 미들웨어: JSON 요청 본문을 파싱
app.use(express.json());

// 라우트 핸들러: GET /users 요청 처리
app.get('/users', (req, res) => {
    const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];
    res.json(users); // 사용자 목록을 JSON 형식으로 응답
});

// 라우트 핸들러: POST /users 요청 처리
app.post('/users', (req, res) => {
    const newUser = req.body; // 요청 본문에서 새로운 사용자 데이터 받기
    // 예: 데이터베이스에 새로운 사용자 저장 로직 추가
    res.status(201).json(newUser); // 201 상태 코드와 함께 새 사용자 반환
});

// 서버 시작
app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

 

 

이 예시에서의 흐름 설명

  1. 클라이언트가 /users에 GET 요청을 보냄:
    • 클라이언트가 /users URL에 GET 요청을 보내면, 서버는 이 요청을 수신합니다.
  2. 미들웨어 처리:
    • 요청이 수신되면, 먼저 모든 요청에 대해 로그를 기록하는 미들웨어가 실행됩니다.
    • 이어서, 요청 본문을 JSON으로 파싱하는 미들웨어가 실행됩니다(이 예시에서는 GET 요청이므로 본문이 없습니다).
  3. 라우트 핸들러 실행:
    • /users에 대한 GET 요청을 처리하는 라우트 핸들러가 실행되어, 사용자 목록을 JSON 형식으로 응답합니다.
  4. 클라이언트에게 응답 전송:
    • 생성된 응답이 클라이언트에게 전송됩니다. 클라이언트는 이 응답을 받아 사용자 목록을 화면에 표시하거나, 다른 작업을 수행할 수 있습니다.

'개발 > Node.js' 카테고리의 다른 글

[Node.js] Raw Query  (1) 2024.09.11
[Node.js] 데이터베이스와 MongoDB  (0) 2024.09.05
[Node.js] Routing 및 Router  (0) 2024.09.02
[Node.js] API 와 REST API  (2) 2024.09.02
[Node.js] Express.js 프레임 워크  (0) 2024.08.30