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