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