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

ChipmunkDev님의 프로필 이미지
ChipmunkDev

작성한 질문수

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

내림차순 정렬 Where 쿼리 작성하기

두가지 질문이있습니다.

작성

·

254

·

수정됨

0

  1. 게시글이 20개 배수로존재할때(ex 총 게시글수가 60개일때) 3페이지에서 다음페이지 정보가 url에 같이 올것같은데 이 부분은 어떻게 보완이 가능할까요?

    if (dto.where__id_more_than) {
      where.id = MoreThan(dto.where__id_more_than);
    } else if (dto.where__id_less_than) {
      where.id = LessThan(dto.where__id_less_than);
    }

    const posts = await this.postsRepository.find({
      where,
      order: {
        createdAt: dto.order__createdAt,
      },
      take: dto.take,
    });

위 코드에서 where의 조건을 dtd의 order__createdAt 이 'ASC'인지 'DESC'인지를 체크하는것도 괜찮으까요?

답변 1

1

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

안녕하세요!

질문을 잘 이해 못하겠습니다.

혹시 60개 마다 다음 페이지 URL이 생성 가능한데 20개씩 데이터를 반환하는 경우를 말씀하시는걸까요?

이건 조금 말이 안되는 경우입니다.

20개씩 데이터를 응답하는데 그 다음 페이지를 20개마다 생성 불가능하다는 것도 말이 안되고 혹여나 그렇다 해도 60개마다 URL 생성이 가능한데 20개씩 데이터를 반환 해준다는 것도 말이 안됩니다.

60개씩 반환하거나 20개마다 그냥 URL을 생성하시면 될 것 같습니다.

혹시 다른 질문이었다면 다시 질문 부탁드립니다!

감사합니다!

ChipmunkDev님의 프로필 이미지
ChipmunkDev
질문자

죄송합니다. ㅋㅋㅋ 전날부터 밤새고 난 상태에서 공부하다 보니 두서도 없고 정리도 안된 질문을 드렸습니다.

첫 번째 질문의 경우

현재 데이터베이스에 총 140개의 게시글이 들어가 있다고 가정을 한 상태에서

image

20개씩(take:20) 잘라서 페이지 네이션을 할 경우

7페이지가 마지막 페이지입니다. (20 * 7 = 140)

근데 cursor와 next의 값을 넣어줄 때 현재 가져온 게시글의 길이가 20(take의 값)일 때는 다음 페이지 정보 값을 위해 cursor의 after 값을 마지막 게시글 아이디로, next 값을 다음 URL로 만들어 준다고 강의를 보고 공부했습니다.

image

이럴경우 마지막 7페이지에 20개의 게시글이 넘어옴으로써 실제로는 다음 페이지의 게시글이 존재하지 않지만, 다음 페이지에 대한 정보를 만들어주어 응답하기 때문에 한번더 API 콜을 하게 되는 경우가 있는데, 이럴 경우에 선생님은 어떤 고민을 하셨는지 궁금하여 질문을 드렸습니다.

image(마지막 7페이지의 데이터를 요청했을때의 응답값)

 

image(위 URL을 토대로 요청했을때 응답값)

 

두번째 질문의 경우 'ASC', 'DESC'... 이건 제가 무슨질문을 한건지도 기억이 혼미하네요... ㅋ큐ㅠㅠ(잠은 중요한것같습니다!) 죄송합니다. 이 부분은 페이지네이션 반복학습을 통하여 제대로 공부하겠습니다.

 

아직 초보라 많이 부족하지만 선생님 강의를 통해서 많은것을 공부하고있습니다.

항상 감사드립니다 🙂

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

질문 이해 했습니다!

일단 두가지 방법이 있습니다.

첫번째 방법은 그냥 지금 구현 돼있는대로 마지막에 한번 더 요청을 하는겁니다.

만약에 이게 싫다면 서버에서 데이터베이스 요청을 할때 실제 응답해야하는 데이터 갯수 + 1을 가져오는겁니다.

예를들어 20개만 반환할 예정이라면 21개를 가져오는거죠.

만약에 데이터베이스에 21개의 데이터가 존재하지 않는다면 다음 페이지는 없다는걸 미리 알 수 있습니다.

저는 개인적으로 첫번째 방법을 선호합니다.

감사합니다!

ChipmunkDev님의 프로필 이미지
ChipmunkDev
질문자

아하 감사합니다 선생님! API 콜을 한번더 하는게 깔끔할것같다고 생각이드네요!

ChipmunkDev님의 프로필 이미지
ChipmunkDev

작성한 질문수

질문하기