순수 노드 백엔드에서는 create서버 안에 if문을 이용해서 메서드와 url을 확인했다면 express 프레임웤을 이용하면 app의 get, put, delete 콜백을 정의하고 listen만 하면 되어 매우 편해진다.
express 메서드의 기본골격은 app에서 get 메서드를 작성하고 뒤에 URL/Path, 실행될 콜백함수 그리고 req, res, next)로 이루어진다. 이에 대해 좀더 알아보자.
Express는 기본적으로 라우팅, 미들웨어, 요청 및 응답 처리라는 세 가지 핵심 요소로 구성된다.
1. 라우팅(Routing)
Express의 가장 기본적인 기능은 클라이언트 요청을 특정 경로(path)와 연결하여 요청을 처리하는 것이다.
app.get('/path', (req, res) => {...})
위와 같은 형태로 경로와 요청을 매핑하여, 프론트 요청에 대한 응답을 어떻게 할지 정의한다. 라우팅은 API나 웹 페이지를 구축할 때 URL을 설정하고, 클라이언트 요청을 특정 핸들러로 전달해주는 역할을 수행한다.
2. 미들웨어 (Middleware)
// 미들웨어 함수 정의
const loggerMiddleware = (req, res, next) => {
console.log(`${req.method} ${req.url}`);
next(); // 다음 미들웨어로 이동
};
// 미들웨어 사용
app.use(loggerMiddleware);
미들웨어는 요청이 들어와서 응답을 보내기까지의 과정에서 실행되는 함수들의 집합이다. app.use()를 사용하여 전역으로 미들웨어를 등록하거나 특정 경로에서만 작동하게 할 수 있다. 로깅, 인증, 에러 처리, 정적 파일 제공 등 다양한 작업을 수행하며, Express 애플리케이션에서 사실상 대부분의 로직을 담당하게 된다.
Express를 한 문장으로 정의하면 미들웨어의 체인이라고 하기도한다. 그만큼 미들웨어가 express백엔드 로직의 대부분을 맡게 된다.
미들웨어도 다같은 역할이 아닌 단계별 역할을 주로 맡게된다. 위 사진 순서대로 역할을 이야기 하자면
(1) JSON 요청을 수신하고 데이터를 파싱하여 req.body에 저장한 후 다음 미들웨어로 넘긴다.
(2) 요청 헤더에 대한 처리(예: 인증, 보안 설정 등)할 미들웨어를 만들고 다음 미들웨어에 넘긴다.
(3) app.get을 통해 루트 경로 요청을 처리하는 미들웨어를 만들고 다음 미들웨어에 넘긴다.
(4) post요청이 들어올경우 처리를 위한 미들웨어를 만들고 다음 미들웨어로 넘긴다.
(5) 요청 처리 중 오류가 발생할 경우 실행시킬 미들웨어를 만든다.
만약 미들웨어가 체이닝되어 실행중 중간에서 응답이 나가버리면 그 뒤에 미들웨어는 실행되지 않는 구조이다.
만약 어떤 미들웨어에서도 응답이 나가지 않으면 마지막에 정의해둔 error 미들웨어까지 가게된다. (error미들웨어에서는 프론트에게 에러났다고 말해주기)
3. 요청 및 응답 처리 (Request & Response Handling)
const express = require('express');
const app = express();
// GET 요청을 받아 응답으로 "Hello, World!"를 보냄
app.get('/', (req, res) => {
res.send('Hello, World!');
});
// 3000번 포트에서 클라이언트 요청 대기
app.listen(3000);
req 객체에는 클라이언트의 요청 정보(경로, 파라미터, 본문 등)가 담기고 res 객체에는 서버에서 클라이언트에게 응답을 보낼 수 있는 메서드들이 포함된다. res.send(), res.json(), res.status() 같은 메서드로 응답을 구성한다.
'NodeJS' 카테고리의 다른 글
주요 캐싱전략 정리 (0) | 2024.11.28 |
---|