엘리스트랙

최종 프로젝트 개발4

Zmann 2024. 5. 5. 22:24
728x90

 

 

 

모임을 조회할 때 페이지네이션 처리를 해주어야 되는데 데이터가 많으면 뒤쪽의 페이지를 받아올 때 앞의 데이터들을 다 확인하고 넘겨야 돼서 속도가 느려진다는 것을 보았다.

그래서 그걸 방지하는 방법으로 no-offset 방식을 알게 되었는데 no-offset 방식은 마지막으로 조회한 데이터의 마지막 ID나 시간과 같은 특정 값을 기준으로 다음 페이지의 데이터를 조회한다. 예를 들어, 어떤 데이터의 마지막 ID가 100이라면, ID가 101부터 시작하는 데이터를 다음 페이지로 조회한다.

 

 

    @GetMapping
    public ResponseEntity<?> getAllMeetings(@RequestParam(name = "lastId", required = false) Long lastId,
                                            @RequestParam(name = "size", defaultValue = "5") int size) {
        return ResponseEntity.ok(meetingService.getAllMeetingsNoOffset(lastId, size));
    }
    
    
    
    @Override
    public Page<MeetingResponseDto> getAllMeetingsNoOffset(Long lastId, int size) {
        Page<Meeting> meetings;
        if (lastId == null) {
            // 커서가 제공되지 않은 경우 처음부터 조회
            meetings = meetingRepository.findAll(PageRequest.of(0, size, Sort.by("id").descending()));
        } else {
            // 커서를 기반으로 다음 데이터 조회
            meetings = meetingRepository.findByIdLessThanOrderByIdDesc(lastId, PageRequest.of(0, size));
        }
        return meetings.map(this::convertToDto);
    }

 

 

하지만 코치님이 우리의 프로젝트엔 큰 데이터가 들어가지 않으므로 굳이? 라고 하셔서 그냥 페이지네이션으로 했다.

그래도 no-offset이라는 방법을 알게 되어서 지식이 쌓였다.

 

 

 

728x90