Express.js는 Node.js를 위한 최소주의 웹 프레임워크다. 가볍고 유연하며 미들웨어 기반 아키텍처로 HTTP 서버, REST API, 풀스택 앱을 빠르게 구축할 수 있다. Node.js 백엔드의 사실상 표준이었으나 최근 NestJS, Fastify 등으로 분화됐다.
기본 서버
javascript
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 미들웨어
app.use((req, res, next) => {
console.log(`${req.method} ${req.path}`);
next();
});
app.get('/api/users', async (req, res) => {
const users = await User.findAll();
res.json(users);
});
app.post('/api/users', async (req, res) => {
const user = await User.create(req.body);
res.status(201).json(user);
});
// 에러 핸들러 (4개 파라미터 필수)
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: err.message });
});
app.listen(3000, () => console.log('Server running on :3000'));
라우터 분리
javascript
// routes/users.js
const router = express.Router();
router.get('/', async (req, res) => { /* ... */ });
router.get('/:id', async (req, res) => { /* ... */ });
router.post('/', validate(createUserSchema), async (req, res) => { /* ... */ });
module.exports = router;
// app.js
const usersRouter = require('./routes/users');
app.use('/api/users', usersRouter);
미들웨어 생태계
javascript
const helmet = require('helmet'); // 보안 헤더
const cors = require('cors'); // CORS
const rateLimit = require('express-rate-limit'); // 요청 제한
const compression = require('compression'); // gzip 압축
app.use(helmet());
app.use(cors({ origin: 'https://myapp.com' }));
app.use(rateLimit({ windowMs: 60000, max: 100 }));
app.use(compression());
관련 개념