Express 구조

  • nodejs
  • express

posted on 10 Sep 2024 under category express

Express란?

  • Expressxpress는 경량의 웹 프레임워크로, Node.js의 기본 기능을 확장하여 HTTP 요청 처리, 라우팅, 미들웨어 관리 등을 쉽게 구현

  • Express는 Node.js에서 웹 애플리케이션을 쉽게 구축할 수 있도록 도와주는 외부 라이브러리 -> Express는 Node.js에 포함X!

Node.js와 Express의 차이점

💫 Node.js

  • 서버 측에서 JavaScript를 실행할 수 있게 해주는 런타임 환경. 파일 시스템, 네트워킹, HTTP 서버와 같은 기능을 제공하는 표준 라이브러리가 포함.

💫 Express

  • Node.js에서 웹 서버를 쉽게 구축할 수 있도록 하는 웹 프레임워크. 기본적인 라우팅과 미들웨어 기능을 제공하여 더 빠르게 웹 애플리케이션을 개발.

Express의 구조

Express의 구조는 핵심 요소인 미들웨어, 라우팅, 응답 처리를 중심

1. 미들웨어(Middleware)

미들웨어는 Express에서 요청(Request)과 응답(Response) 사이에 위치하여, 요청을 처리하거나 응답하기 전에 중간에 끼어드는 함수.
미들웨어는 HTTP 요청/응답을 가로채어, 요청을 수정하거나, 로깅, 인증, 에러 핸들링 등을 수행.

미들웨어의 기본 구조 :

app.use((req, res, next) => {
    // 미들웨어 로직
    next(); // 다음 미들웨어로 넘김
});
  • req : 클라이언트 요청 객체
  • res : 서버 응답 객체
  • 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) 객체 :

  • req.params : URL 경로에서 전달되는 파라미터
  • req.query : URL에서 쿼리스트링으로 전달되는 데이터
  • req.body : POST나 PUT 요청에서 전송된 데이터

응답(Response) 객체 :

  • res.send() : 응답 데이터를 보내는 메소드 (텍스트, HTML, JSON 등)
  • res.json() : JSON 데이터를 응답하는 메소드
  • res.status() : 응답 상태 코드를 설정하는 메소드

예시 :

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'));
  • 위 코드는 public 폴더에 있는 파일들을 정적 파일로 제공할 수 있게 해줌.

Express의 구조 요약

  1. 미들웨어 : 요청과 응답 사이에서 데이터를 처리하는 함수들.

  2. 라우팅 : 클라이언트 요청 URL과 그에 대한 처리 메소드(GET, POST 등)를 연결하는 기능.

  3. 요청/응답 처리 : req와 res 객체를 통해 클라이언트와 서버 간 데이터를 주고받는 기능.

  4. 라우터 : 라우팅을 모듈화하여 코드 구조를 관리하기 쉽게 만들어주는 기능.

  5. 에러 핸들링 : 요청 처리 중 발생하는 에러를 처리하는 방법.

  6. 정적 파일 서빙 : 정적 파일을 클라이언트에게 서빙하는 기능.

Express는 이러한 구조로 이루어져 있어 웹 애플리케이션을 간편하고 효율적으로 구축할 수 있게 함!