request extraction
커스텀 데코레이터로 요청 문맥 추출하기
데코레이터를 설계할 때는 어떤 요청 문맥을 숨길지, 어떤 이름으로 컨트롤러에 드러낼지, 검증은 어디에서 할지 함께 정한다.
설계 순서: 문맥 선택 → 이름 부여 → 검증 연결값을 꺼내는 코드가 아니라 API 문법을 만드는 작업이다.
데코레이터 제작 체크 순서
1Name
@CurrentUser, @TenantId처럼 업무 의미가 있는 이름을 고른다.
2Source
req.user, headers, params, session 중 출처를 한정한다.
3Shape
전체 객체 또는 특정 필드 중 무엇을 넘길지 정한다.
4Pipe
필요하면 ParseIntPipe나 ValidationPipe와 같이 쓴다.
5Fallback
값이 없을 때 undefined, 기본값, 예외 중 하나를 정한다.
요청 문맥 추출 예시
| 데코레이터 | 출처 | 컨트롤러에서 보이는 의미 |
|---|---|---|
| @CurrentUser() | req.user | 인증된 사용자 전체 |
| @CurrentUser("id") | req.user.id | 사용자 식별자만 사용 |
| @TenantId() | header 또는 token claim | 멀티테넌트 경계 |
| @Locale() | Accept-Language | 응답 언어 선택 |