TypeScript Node.js

Express 요청-응답 타입 경계와 미들웨어 체인

Node.js 런타임 위에서 Express는 Request, Response, NextFunction이 미들웨어 체인을 통과하며 HTTP 처리를 분리한다.

01

라우트 매칭

HTTP 메서드와 경로가 일치하면 해당 미들웨어 체인이 순서대로 실행된다.

method/path
02

입력 파싱

body parser, cookie, auth middleware가 요청 객체에 필요한 컨텍스트를 붙인다.

request context
03

검증·처리

handler는 검증된 DTO와 서비스 호출 결과를 상태 코드와 응답 body로 바꾼다.

controller
04

오류 위임

동기·비동기 오류는 next(error) 또는 wrapper를 통해 error handler로 모은다.

오류 흐름
Request 타입
params, body, query generic을 사용해 handler 입력을 좁힌다. 외부 입력은 런타임 검증 전까지 신뢰하지 않는다.
typed after validation
Middleware
인증, 로깅, rate limit처럼 횡단 관심사를 handler 밖에 둔다. 순서가 바뀌면 보안 의미가 바뀔 수 있다.
order matters
Error
도메인 오류와 시스템 오류를 다른 status로 매핑한다. stack trace는 운영 응답에 노출하지 않는다.
safe response

Express 타입 점검

입력 검증 body 타입 선언에만 의존하지 않고 실제 schema 검증도 함께 수행한다.
async 오류 비동기 handler의 rejection이 전역 미처리로 새지 않는다.
응답 일관성 성공과 실패 body 형식이 API 문서와 맞다.

핸들러 골격

app.post("/users", validate(createUserSchema), async (req, res, next) => {
  try { res.status(201).json(await service.create(req.body)); }
  catch (error) { next(error); }
});