강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

흔들거북이님의 프로필 이미지
흔들거북이

작성한 질문수

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

Cursor Pagination 적용하기

dto 필드 기본값 이슈에 대해 질문드립니다.

작성

·

45

·

수정됨

0

안녕하세요!

다음과 같이

GET: http://localhost:3000/posts
아무런 파라미터 값 없이 요청을 실행했을 때

image.png

dto 객체의 기본 상태는 다음과 같고, 응답 결과로 아래와 같은 nextURL을 받을 수 있었습니다.

 "next": "http://localhost:3000/posts?page=undefined&order__createdAt=ASC&take=20&where__id__more_than=23"

cursorPagination 이기 때문에 page를 사용하지 않지만 url에는 조립되는 이유가 로직에 값을 검증하는 부분이 없어서 그런 것 같은데요, 아래와 같이 값(dto[key])를 검증하는 것을 추가하니 문제 없이 동작하였습니다.

if (
 dto[key] // 값 검증 추가
 && key !== 'where__id__more_than'
 && key !== 'where__id__less_than'
) {
  nextUrl.searchParams.append(key, dto[key]);
}
"next": "http://localhost:3000/posts?order__createdAt=ASC&take=20&where__id__more_than=23"

그런데 강사님께서는 따로 검증하지 않고 진행하셨음에도 nextUrl 쪽에 page가 따로 붙어나오진 않는 것 같은데요, 어떤 차이에서 발생한걸까요?.. ㅠㅠ

 

 

 

답변 2

0

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요!

질문을 제가 잘 이해 못한 것 같습니다.

key value를 URL에 append하고 계시는건 잘 하고계시는 것 같은데 어떤 부분이 문제인지 다시 한번 확인 부탁드립니다.

감사합니다!

강사님과 동일한 코드 상태로 진행하였는데 결과가 다르게 나와서 질문드린거였습니다. cursor 페이지네이션이기 때문에 dto.page 값이 undefined 인데 url querystring에 ?page=undefined 그대로 포함되는 문제가 있었습니다. 그래서 질문드린 것 처럼 if문에 dto[key]로 값 검증을 한 번 더 해야 강사님과 같은 결과가 나왔거든요.

 

어떤 부분때문에 이런 차이가 발생했는지 궁금하여서 질문 남겼습니다.

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요.

이유는 보여주신 위치에서 알 수 있는건 아닌 것같습니다. 하지만 어찌됐던 별로 중요하지 않은 부분으로 생각됩니다. undefined의 경우 정의하지 않은 것과 같은 의미이기 때문에 모든 undefined 값은 따로 필터링해서 append 안해주시면 될 것 같습니다.

감샤합니다!

넵. 저도 검증하고 그냥 넘어가면 되는 부분이였는데 수강하던 당시엔 좀 신경쓰였던 부분이였어서요 혹시나 해서 질문드렸었습니다. 재차 확인 감사드립니다~!

0

안녕하세요, 인프런 AI 인턴입니다.

GET 요청을 보낼 때, DTO 객체의 기본값으로 인해 nextURL에 불필요한 page 파라미터가 포함되는 문제에 대해 질문을 주셨습니다. 이 문제는 DTO 객체의 필드가 초기화되지 않은 상태로 undefined 값이 nextURL에 포함되었을 때 발생합니다. 이를 방지하기 위해 undefined 값을 가지는 경우 해당 키를 검증하여 nextURL에 포함되지 않도록 할 수 있습니다.

질문 주신 내용에서, dto[key]로 작성한 검증 조건은 가장 일반적인 방법으로, undefined, null, 0, false 등의 경우를 걸러줄 수 있습니다. 하지만, 강사님의 코드에서는 해당 부분을 별도로 처리하지 않았음에도 불구하고 깔끔한 URL이 생성된 이유는 몇 가지 가능성을 생각할 수 있습니다:

  1. DTO 초기화: 강사님이 소개하는 과정 중 DTO를 초기화하거나, 특정 상태를 보장하는 미들웨어나 인터셉터를 사용할 수 있습니다.

  2. 다른 검증 논리: 강의 중간에 DTO 내 값들이 유효한 상태로 유지되도록 보장하는 로직이 있을 수 있습니다. 예를 들어 기본 값을 설정하거나, 특정 값일 때 제외하는 코드를 미리 삽입했을 수도 있습니다.

  3. 환경 차이: 개발 환경이나 설정의 미세한 차이에서 비롯된 것일 수 있습니다. Node.js의 버전 차이, TypeScript 설정 등도 간혹 영향을 줄 수 있으므로 확인이 필요합니다.

이와 관련하여 참고할 만한 유사한 사례로는 NestJS 에서의 조건부 URL 생성에 대한 질문이 있습니다. 관련 코드의 초기화나 상태 관리 방법을 수정하여 이 문제를 해결할 수 있는 다양한 접근 방법을 보여줍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

흔들거북이님의 프로필 이미지
흔들거북이

작성한 질문수

질문하기