Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- mongoDB
- 파이썬
- Python
- 방송대컴퓨터과학과
- 오픈소스기반데이터분석
- 방송대
- 코드잇
- nestjs
- 항해99
- JavaScript
- 클라우드컴퓨팅
- Git
- HTML
- aws
- 엘리스sw트랙
- 99클럽
- redis
- 코딩테스트준비
- 개발자취업
- 데이터베이스시스템
- TiL
- Azure
- 프로그래머스
- 꿀단집
- 코딩테스트
- 파이썬프로그래밍기초
- node.js
- 유노코딩
- CSS
- 중간이들
Archives
- Today
- Total
배꼽파지 않도록 잘 개발해요
NestJS에서 @Query 기본값 처리: DefaultValuePipe 본문
NestJS로 API를 개발하다보면 흔히 이런 상황을 마주하게 된다.
@Get('our-trip')
async getTrips(
@Query('pageNumber', ParseIntPipe) pageNumber: number,
) {
return this.tripService.findAll(pageNumber);
}
여기서 /out-trip 경로로 쿼리 파라미터 없이 요청을 보내면 어떤 일이 생길까?

바로 ParseIntPipe(undefined)가 실행되면서 에러가 난다.
왜 기본값(= 1)을 줘도 안 될까?
보통 TypeScript에서는 기본값을 이런식으로 지정한다.
@Query('pageNumber', ParseIntPipe) pageNumber: number = 1;
"쿼리가 없으면 그냥 1이 들어가겠지?"라고 생각했던 건 나의 큰 착각이었다.
NestJS는 그렇게 동작하지 않는다.
실행 순서는 다음과 같다.
- 쿼리 파라미터 파싱 → pageNumber = undefined
- ParseIntPipe 실행 → ParseIntPipe(undefined) → 에러
즉, NestJS의 파이프는 핸들러 실행 전에 동작하기 때문에, 파이프에서 이미 죽어서 오류가 난 경우,
함수 기본값 적용이 불가능하다.
그래서 TypeScript로 기본값을 적용했음에도 에러가 난 것이다.
DefaultValuePipe로 해결하기
그래서 가장 깔끔한 방법은 DefaultValuePipe를 함께 쓰는 것이다.

@Get('our-trip')
async getTrips(
@Query('pageNumber', new DefaultValuePipe(1), ParseIntPipe) pageNumber: number,
) {
return this.tripService.findAll(pageNumber);
}
실행 순서는 다음과 같다.
- 쿼리 파라미터 파싱 → pageNumber = undefined
- DefaultValuePipe(1) 실행 → "1"
- ParseIntPipe(1) 실행 → 1
- 함수 실행 시 pageNumber = 1
원하는 대로 기본값이 잘 들어간다.


이렇게 ParseIntPipe 이전에 DefaultValuePipe로 쿼리파라미터의 기본값 지정하는 건 해결했다.
하지만 이 API들에게는 더 무지막지한 문제가 있었다.
다음 글에 이어서 설명하겠다.
728x90
'BackEnd > Express / NestJS' 카테고리의 다른 글
| [NestJS] NestJS @Res() 데코레이터를 사용할 때 응답 처리를 직접 제어해야함 (0) | 2024.09.13 |
|---|---|
| [NestJS] ejs 템플릿엔진 nodemailer로 발송시 CSS 미적용 오류 해결 (0) | 2024.08.30 |
| [NestJS] @Inject 데코레이터를 사용할 때는 provide할 때 사용한 이름으로 주입받아야 함 (0) | 2024.08.26 |
| [NestJS] service 클래스 내에서의 함수 분리의 중요성 (0) | 2024.08.26 |
| [NestJS] Express의 Request 타입을 전역적으로 사용하는 방법 (0) | 2024.08.26 |