주요 기능
Express.js의 강력한 기능들을 활용한 현대적인 백엔드 서버
RESTful API
표준 HTTP 메서드를 활용한 RESTful API 엔드포인트 제공
- GET, POST, PUT, DELETE 메서드
- JSON 응답 형식
- 상태 코드 관리
- API 버전 관리
미들웨어 구조
요청 처리 파이프라인을 구성하는 유연한 미들웨어 시스템
- 인증 및 권한 확인
- 요청 로깅
- 에러 핸들링
- CORS 설정
확장 가능한 아키텍처
모듈화된 구조로 유지보수와 확장이 용이한 서버 설계
- 라우터 분리
- 컨트롤러 패턴
- 서비스 레이어
- 데이터베이스 추상화
기술 사양
Express Server의 상세한 기술 정보
서버 환경
런타임
Node.js 16.0+
프레임워크
Express.js 4.18+
패키지 매니저
npm/yarn
개발 서버
nodemon
데이터베이스
ORM
Sequelize
지원 DB
MySQL, PostgreSQL, SQLite
연결 풀
지원
마이그레이션
자동화
보안
인증
JWT
암호화
bcrypt
CORS
설정 가능
Rate Limiting
express-rate-limit
성능
동시 연결
1000+
응답 시간
<100ms
메모리 사용량
~50MB
로깅
Winston
코드 예제
Express Server의 핵심 기능들을 코드로 확인해보세요
JavaScript
// app.js
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
const rateLimit = require('express-rate-limit');
const app = express();
const PORT = process.env.PORT || 3000;
// 미들웨어 설정
app.use(helmet());
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Rate limiting
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15분
max: 100 // IP당 최대 요청 수
});
app.use(limiter);
// 라우터 설정
app.use('/api/v1/users', require('./routes/users'));
app.use('/api/v1/products', require('./routes/products'));
// 에러 핸들링
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ error: 'Something went wrong!' });
});
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
JavaScript
// routes/users.js
const express = require('express');
const router = express.Router();
const { authenticateToken } = require('../middleware/auth');
const UserController = require('../controllers/UserController');
// GET /api/v1/users
router.get('/', authenticateToken, UserController.getAllUsers);
// GET /api/v1/users/:id
router.get('/:id', authenticateToken, UserController.getUserById);
// POST /api/v1/users
router.post('/', UserController.createUser);
// PUT /api/v1/users/:id
router.put('/:id', authenticateToken, UserController.updateUser);
// DELETE /api/v1/users/:id
router.delete('/:id', authenticateToken, UserController.deleteUser);
module.exports = router;
// controllers/UserController.js
const UserService = require('../services/UserService');
class UserController {
static async getAllUsers(req, res) {
try {
const users = await UserService.getAllUsers();
res.json({ success: true, data: users });
} catch (error) {
res.status(500).json({ success: false, error: error.message });
}
}
static async createUser(req, res) {
try {
const user = await UserService.createUser(req.body);
res.status(201).json({ success: true, data: user });
} catch (error) {
res.status(400).json({ success: false, error: error.message });
}
}
}
JavaScript
// middleware/auth.js
const jwt = require('jsonwebtoken');
const authenticateToken = (req, res, next) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) {
return res.status(401).json({ error: 'Access token required' });
}
jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
if (err) {
return res.status(403).json({ error: 'Invalid token' });
}
req.user = user;
next();
});
};
// middleware/logger.js
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
const requestLogger = (req, res, next) => {
logger.info({
method: req.method,
url: req.url,
ip: req.ip,
userAgent: req.get('User-Agent')
});
next();
};
module.exports = { authenticateToken, requestLogger };
문의하기
Express Server에 대한 문의사항이 있으시면 언제든 연락주세요
연락처 정보
이메일
happysoftinfodesk@gmail.com
happysoftinfodesk@gmail.com
웹사이트
happysoft2018.com
happysoft2018.com