====== Express.js ======
**Express.js**는 Node.js를 위한 빠르고 유연한 웹 애플리케이션 프레임워크입니다.
===== 📖 정의 =====
Express.js는 Node.js의 핵심 모듈인 HTTP 모듈을 기반으로 한 웹 애플리케이션 프레임워크로, 미니멀하고 유연한 구조를 제공합니다. 2010년에 TJ Holowaychuk에 의해 개발되어 현재 가장 인기 있는 Node.js 웹 프레임워크 중 하나입니다.
===== 🌟 주요 특징 =====
==== 미니멀한 구조 ====
* 핵심 기능만 포함
* 플러그인 방식의 미들웨어
* 유연한 라우팅 시스템
==== 미들웨어 기반 ====
* 요청/응답 처리 파이프라인
* 재사용 가능한 컴포넌트
* 체이닝 방식의 처리
==== 라우팅 시스템 ====
* RESTful API 지원
* 동적 라우트 매개변수
* 정규식 기반 라우팅
===== 🔧 핵심 개념 =====
==== 미들웨어 (Middleware) ====
요청과 응답 사이에서 실행되는 함수들
// 미들웨어 예시
app.use((req, res, next) => {
console.log(`${req.method} ${req.url}`);
next();
});
==== 라우터 (Router) ====
URL 경로와 HTTP 메서드를 연결하는 시스템
// 라우터 예시
app.get('/users', (req, res) => {
res.json({ users: [] });
});
app.post('/users', (req, res) => {
res.status(201).json({ message: 'User created' });
});
==== 템플릿 엔진 ====
서버 사이드 렌더링을 위한 뷰 엔진
// EJS 템플릿 엔진 설정
app.set('view engine', 'ejs');
app.set('views', './views');
===== 🚀 기본 사용법 =====
const express = require('express');
const app = express();
// 미들웨어 설정
app.use(express.json());
app.use(express.static('public'));
// 라우트 정의
app.get('/', (req, res) => {
res.send('Hello Express!');
});
// 서버 시작
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`서버가 포트 ${PORT}에서 실행 중입니다.`);
});
===== 📦 주요 패키지 =====
==== 핵심 미들웨어 ====
* **express.json()**: JSON 요청 본문 파싱
* **express.urlencoded()**: URL 인코딩된 데이터 파싱
* **express.static()**: 정적 파일 서빙
* **cors**: Cross-Origin Resource Sharing
* **helmet**: 보안 헤더 설정
==== 인증 & 보안 ====
* **passport**: 인증 미들웨어
* **bcrypt**: 비밀번호 해싱
* **jsonwebtoken**: JWT 토큰 처리
==== 데이터베이스 ====
* **mongoose**: MongoDB ODM
* **sequelize**: SQL ORM
* **prisma**: 현대적인 ORM
===== 🔍 디버깅 =====
**개발 환경 설정:**
// 개발 모드에서 상세 로그
if (process.env.NODE_ENV === 'development') {
app.use((req, res, next) => {
console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
next();
});
}
**에러 핸들링:**
// 404 에러 처리
app.use((req, res) => {
res.status(404).send('페이지를 찾을 수 없습니다.');
});
// 전역 에러 핸들러
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send('서버 오류가 발생했습니다.');
});
===== 🚀 성능 최적화 =====
**압축 미들웨어:**
const compression = require('compression');
app.use(compression());
**캐싱 설정:**
// 정적 파일 캐싱
app.use(express.static('public', {
maxAge: '1d',
etag: true
}));
**클러스터 모드:**
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
require('./app.js');
}
===== 🔗 관련 용어 =====
* [[wiki:glossary:server_operations:nodejs|Node.js]] - JavaScript 런타임
* [[wiki:glossary:web_technologies:javascript|JavaScript]] - 프로그래밍 언어
* [[wiki:glossary:server_operations:pm2|PM2]] - 프로세스 관리
* [[wiki:glossary:web_technologies:nginx|Nginx]] - 리버스 프록시
* [[wiki:glossary:development_tools:git:github|GitHub]] - 코드 저장소
===== 📚 관련 문서 =====
* [[wiki:it:dream_of_enc:metaverse:express|Express.js 웹 프레임워크]]
* [[wiki:it:dream_of_enc:metaverse:nodejs|Node.js 백엔드 설정]]
* [[wiki:it:dream_of_enc:metaverse:socketio|Socket.IO 실시간 통신]]
===== 🌐 외부 링크 =====
* [[https://expressjs.com/|Express.js 공식 웹사이트]]
* [[https://expressjs.com/en/guide/routing.html|라우팅 가이드]]
* [[https://expressjs.com/en/guide/using-middleware.html|미들웨어 가이드]]
----
**카테고리:** [[wiki:glossary:web_technologies:start|웹 기술]] | **관련 기술:** Node.js, JavaScript, 웹 프레임워크