Express 구조
posted on 10 Sep 2024 under category express
Expressxpress는 경량의 웹 프레임워크로, Node.js의 기본 기능을 확장하여 HTTP 요청 처리, 라우팅, 미들웨어 관리 등을 쉽게 구현
Express는 Node.js에서 웹 애플리케이션을 쉽게 구축할 수 있도록 도와주는 외부 라이브러리 -> Express는 Node.js에 포함X!
💫 Node.js
💫 Express
Express의 구조는 핵심 요소인 미들웨어, 라우팅, 응답 처리를 중심
1. 미들웨어(Middleware)
미들웨어는 Express에서 요청(Request)과 응답(Response) 사이에 위치하여, 요청을 처리하거나 응답하기 전에 중간에 끼어드는 함수.
미들웨어는 HTTP 요청/응답을 가로채어, 요청을 수정하거나, 로깅, 인증, 에러 핸들링 등을 수행.
미들웨어의 기본 구조 :
app.use((req, res, next) => {
// 미들웨어 로직
next(); // 다음 미들웨어로 넘김
});
미들웨어는 순차 실행, 특정 조건에서 응답을 보내지 않으면 next()로 다음 미들웨어로 넘어감.
2. 라우팅(Routing)
라우팅은 클라이언트의 요청 URL과 그에 대한 처리 방법을 연결하는 기능.
Express에서는 특정 경로에 대해 GET, POST, PUT, DELETE 등의 HTTP 메소드별로 라우트를 설정.
라우팅 기본 예시 :
app.get('/home', (req, res) => {
res.send('Welcome to Home Page');
});
app.post('/submit', (req, res) => {
res.send('Form Submitted');
});
3. 요청과 응답 처리(Request/Response Handling)
Express에서는 클라이언트 요청을 받는 Request 객체와, 서버가 클라이언트에게 보내는 Response 객체를 제공.
요청(Request) 객체 :
응답(Response) 객체 :
예시 :
app.get('/user/:id', (req, res) => {
const userId = req.params.id; // URL 파라미터
res.status(200).json({ userId });
});
4. 라우터(Router)
Express는 라우팅을 모듈화하기 위해 Router 객체를 제공.
여러 개의 라우트를 하나의 모듈로 묶어서 관리할 수 있으며, 이를 통해 코드의 유지보수성을 높임.
Router 예시 :
const express = require('express');
const router = express.Router();
router.get('/profile', (req, res) => {
res.send('User Profile');
});
router.post('/login', (req, res) => {
res.send('User Login');
});
module.exports = router;
});
이렇게 정의된 라우터는 다른 모듈에서 require()로 불러와 사용가능
const userRouter = require('./userRouter');
app.use('/users', userRouter);
5. 에러 핸들링(Error Handling)
Express에서는 에러 핸들링을 위한 미들웨어도 지원.
에러 핸들링 미들웨어는 next()를 호출할 때 인자로 에러 객체를 넘겨서 사용.
에러 핸들링 예시 :
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('Something broke!');
});
6. 정적 파일 서빙(Static Files)
Express는 정적 파일(HTML, CSS, JavaScript, 이미지 등)을 클라이언트에게 제공할 수 있는 기능을 내장
정적 파일 제공 예시 :
app.use(express.static('public'));
미들웨어 : 요청과 응답 사이에서 데이터를 처리하는 함수들.
라우팅 : 클라이언트 요청 URL과 그에 대한 처리 메소드(GET, POST 등)를 연결하는 기능.
요청/응답 처리 : req와 res 객체를 통해 클라이언트와 서버 간 데이터를 주고받는 기능.
라우터 : 라우팅을 모듈화하여 코드 구조를 관리하기 쉽게 만들어주는 기능.
에러 핸들링 : 요청 처리 중 발생하는 에러를 처리하는 방법.
정적 파일 서빙 : 정적 파일을 클라이언트에게 서빙하는 기능.
Express는 이러한 구조로 이루어져 있어 웹 애플리케이션을 간편하고 효율적으로 구축할 수 있게 함!