개발지식/Node.js

[Express] Express의 정의와 기본 구조

thinktank911 2025. 9. 16. 15:19

 

Express란?

Express는 Node.js를 위한 웹 애플리케이션 프레임워크다. 쉽게 말해서 웹서버를 만들 때 필요한 기능들을 미리 만들어놓은 도구 모음이라고 생각하면 된다. Node.js만으로도 웹서버를 만들 수 있지만, 매번 복잡한 코드를 처음부터 작성해야 한다. Express는 이런 번거로움을 해결해주는 라이브러리로, 웹서버 개발을 훨씬 쉽고 빠르게 만들어준다.

 

Express 기본 구조

Express 앱은 크게 서버 실행부 → 라우팅 → 미들웨어 → 응답 처리 흐름으로 이루어져 있다.

 

1. 서버 실행부

const express = require("express");
const app = express();
const PORT = 3000;

app.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}`);
});
  • express() : 앱 객체 생성
  • app.listen() : 지정한 포트로 서버 실행

2. 미들웨어 (Middleware)

app.use(express.json());  // JSON 요청 처리
app.use(express.urlencoded({ extended: true }));  // form 데이터 처리

// 정적 파일 제공 미들웨어
app.use(express.static('public'));

// 커스텀 미들웨어
app.use((req, res, next) => {
  console.log(`${req.method} 요청이 ${req.path}로 들어왔습니다`);
  next(); // 다음 미들웨어로 넘어가기
});
  • 요청(req) → 미들웨어 → 응답(res)
  • 요청과 응답을 가로채서 가공하거나 검증, 로깅, 권한 체크 등을 수행

3. 라우팅 (Routing)

app.get("/", (req, res) => {
  res.send("Hello Express!");
});

app.post("/users", (req, res) => {
  res.json({ message: "User created", data: req.body });
});
  • 클라이언트 요청(GET, POST, PUT, DELETE)을 처리하는 경로와 메서드 정의
  • 라우터는 요청 URL과 HTTP 메서드에 따라 실행

4. 라우터 모듈화

// routes/user.js
const express = require("express");
const router = express.Router();

router.get("/", (req, res) => {
  res.send("User List");
});

router.post("/", (req, res) => {
  res.send("Create User");
});

module.exports = router;
  • express.Router()를 이용해 라우트 파일을 분리 가능 → 프로젝트 구조 정리

5. 에러 처리

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send("Something broke!");
});
  • 마지막에 에러 핸들러를 둬서 예외 상황 처리

 

Express 핵심 개념

**라우팅(Routing)**이 Express의 핵심. 라우팅은 "어떤 URL로 요청이 오면 어떤 응답을 할지" 정하는 것이다.

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

// 기본 라우트 - 홈페이지
app.get('/', (req, res) => {
  res.send('안녕하세요! Express 서버입니다.');
});

// 다른 경로
app.get('/about', (req, res) => {
  res.send('소개 페이지입니다.');
});

// 서버 시작
app.listen(3000, () => {
  console.log('서버가 3000번 포트에서 실행중입니다.');
});

 

HTTP 메소드별 처리도 쉽게 할 수 있다. GET은 데이터를 가져올 때, POST는 데이터를 보낼 때 사용한다.

// GET 요청 처리
app.get('/users', (req, res) => {
  res.json({ message: '사용자 목록을 조회합니다' });
});

// POST 요청 처리
app.post('/users', (req, res) => {
  res.json({ message: '새 사용자를 생성합니다' });
});

 

Express의 장점은 간단한 구조로 시작해서 필요에 따라 기능을 확장할 수 있다는 것이다. 처음에는 기본적인 라우팅만 이해하고, 프로젝트가 커질수록 미들웨어와 고급 기능들을 점진적으로 배워나가도록 한다.