728x90
반응형
🔗 미들웨어(Middleware) 완벽 가이드
개발할 때 꼭 알아야 할 미들웨어의 모든 것을 정리했습니다.
🤔 미들웨어란?
요청(Request)과 응답(Response) 사이에서
공통으로 처리할 일을 하는 코드
쉽게 말해서 "중간에서 가로채는 것" 이에요.

💡 비유로 이해하기
┌─────────────────────────────────────────────────────────────┐
│ │
│ 🏢 회사 방문 과정 │
│ │
│ 방문자 → 로비 → 신분증 확인 → 방문증 발급 → 사무실 │
│ └─────────────────────────────┘ │
│ 이 부분이 "미들웨어" │
│ │
│ 실제 목적(사무실 방문) 전에 │
│ 공통으로 거쳐야 하는 단계들 │
│ │
└─────────────────────────────────────────────────────────────┘
📊 미들웨어 동작 흐름
Client 요청
│
▼
┌─────────────┐
│ 미들웨어 1 │ → 로깅
└─────────────┘
│
▼
┌─────────────┐
│ 미들웨어 2 │ → 인증 체크
└─────────────┘
│
▼
┌─────────────┐
│ 미들웨어 3 │ → 권한 체크
└─────────────┘
│
▼
┌─────────────┐
│ 실제 로직 │ → 주문 생성, 결제 등
└─────────────┘
│
▼
응답 (Response)
미들웨어는 순서대로 실행되고, 하나라도 실패하면 다음으로 안 넘어가요.
🎯 미들웨어를 쓰는 이유
| 로깅 | 모든 API에 로깅 코드 작성 | 미들웨어 하나로 전체 적용 |
| 인증 | 모든 API에 인증 체크 코드 | 미들웨어 하나로 전체 적용 |
| 에러 처리 | 모든 API에 try-catch | 미들웨어 하나로 전체 적용 |
핵심: 중복 코드 제거 + 공통 로직 한 곳에서 관리
📋 주요 미들웨어 종류
1. 요청/응답 로깅
모든 API 호출을 기록
[요청] POST /api/order - body: {productId: 123}
[응답] POST /api/order - 200 - 150ms
기록 내용예시
| HTTP 메서드 | GET, POST, PUT, DELETE |
| 요청 경로 | /api/order |
| 상태 코드 | 200, 400, 500 |
| 소요 시간 | 150ms |
| Request ID | req_abc123 |
2. Request ID 생성
모든 요청에 고유 ID 부여 → 추적 가능
[req_abc123] 요청 수신 - POST /order
[req_abc123] 재고 확인 중...
[req_abc123] 결제 처리 중...
[req_abc123] 응답 완료 - 200
문제 생기면 req_abc123 검색해서 전체 흐름 확인!
3. 인증 (Authentication)
"너 누구야?" 확인
토큰 있음? → 유효함? → 통과
토큰 없음? → 401 Unauthorized
체크 항목실패 시
| 토큰 존재 여부 | 401 |
| 토큰 유효성 | 401 |
| 토큰 만료 여부 | 401 |
4. 인가 (Authorization)
"넌 이거 할 수 있어?" 확인
관리자 페이지 접근
→ 로그인 됨? (인증)
→ 관리자임? (인가)
→ 통과
체크 항목실패 시
| 권한 레벨 | 403 |
| 리소스 접근 권한 | 403 |
| 기능 사용 권한 | 403 |
5. 에러 핸들링
어디서든 에러 발생하면 여기서 처리
try {
실제 로직 실행
} catch (error) {
→ 로깅
→ 적절한 응답 반환 (400, 500 등)
→ 필요시 알림
}
6. CORS (Cross-Origin Resource Sharing)
다른 도메인에서 API 호출 허용 여부
프론트: https://myapp.com
백엔드: https://api.myapp.com
→ 도메인이 다름
→ CORS 미들웨어가 허용해줘야 호출 가능
7. Rate Limiting
요청 횟수 제한
"1분에 100번까지만 허용"
→ 101번째 요청 → 429 Too Many Requests
설정 예시
| 제한 단위 | IP, 유저, API 키 |
| 시간 단위 | 분당, 시간당, 일당 |
| 제한 횟수 | 100회/분 |
8. 요청 검증 (Validation)
요청 데이터가 올바른지 체크
POST /api/order
body: { productId: "abc" } ← 숫자여야 하는데?
→ 400 Bad Request
9. 압축 (Compression)
응답 데이터를 압축해서 전송
원본: 100KB
압축: 20KB
→ 네트워크 비용 절감, 속도 향상
10. 보안 헤더
보안 관련 HTTP 헤더 자동 추가
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
📊 미들웨어 실행 순서 (권장)
1. 보안 헤더
2. CORS
3. Request ID 생성
4. 요청 로깅
5. 압축
6. 요청 파싱 (JSON, form-data)
7. Rate Limiting
8. 인증 (Authentication)
9. 인가 (Authorization)
10. 요청 검증
11. ─────────────────
12. 실제 비즈니스 로직
13. ─────────────────
14. 에러 핸들링
15. 응답 로깅
⚠️ 미들웨어 vs 일반 로직
구분 미들웨어 일반 로직
| 모든 API에 공통 | ✅ | ❌ |
| 특정 API에만 | ❌ | ✅ |
| 인증/인가 | ✅ | ❌ |
| 로깅 | ✅ | ❌ |
| 비즈니스 로직 | ❌ | ✅ |
| 주문 생성 | ❌ | ✅ |
| 결제 처리 | ❌ | ✅ |
🎯 미들웨어 체크리스트
- Request ID 생성
- 요청/응답 로깅
- 에러 핸들링
- 인증 (필요시)
- 인가 (필요시)
- CORS (프론트-백엔드 분리 시)
- Rate Limiting (API 서비스 시)
- 보안 헤더
📌 한 줄 요약
미들웨어 = 모든 요청에 공통으로 적용할 로직을 한 곳에서 관리
→ 중복 제거
→ 유지보수 쉬움
→ 일관성 보장
728x90
'Tech Notes' 카테고리의 다른 글
| [Claude] CLAUDE.md 에 대하여 (0) | 2026.01.28 |
|---|---|
| [PROMPT] 서비스용 (0) | 2026.01.25 |
| 로깅(Logging) (0) | 2026.01.25 |
| [배포플랫폼] Vercel 에서 트래픽 알아보는 법 (0) | 2026.01.24 |
| [PROMPT] 시니어가 되기 위한 준비 (0) | 2026.01.20 |