You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
1. 도입 계기
세빈님 특별출현 ㅋㅋㅋㅋ
프론트 측의 요청과, #121 의 이슈에 나와있는 내용처럼
모임 의 일정 시간(DateOfSchedule) 을 조회할 때 전체 데이터를 한 번에 불러오게 API를 구성하였습니다.
이러한 경우에, UX (사용자 경험)도 그렇고, 서버에 대한 응답도 오래 걸린다는 문제점이 존재하여 해당 방식을 해결하고자 하였습니다.
무한 스크롤 (Infinite scroll)
사용자가 페이지의 맨 아래에 도달할 때 데이터나, 컨텐츠가 계속 로드되게 하는 방식을 의미합니다. (인스타그램, 페이스북, 유튜브 등)
장점
단점
이러한 장단점이 존재하며 특히,
이러한 장점을 기반으로 도입하면 좋을 것 같다고 판단하였습니다.
2. 접근 방법
고려사항
실시간으로 변경되는 데이터를 무한 스크롤로 구현을 하려다 보니 문제점이 있다는 것을 알게 되었습니다.
시나리오
이러한 문제를 대응하기 위해 '커서 기반 페이지네이션' 을 생각해보았지만,
커서 기반 페이지네이션 같은 경우, 마지막에 조회된 데이터의 ID 값을 통해 진행되는 것으로 파악됩니다.
하지만, 우리의 데이터에는 별도의 ID 값이 없으며, 정렬 기준 또한 '우선순위 (많은 사람이 입력한 순, 빠른 시간 순)' 으로 복잡한 정렬 기준을 가지고 있어 해결하기 어려웠습니다.
해결 방안
API 요청 시간(최초 호출) 과 일정(Schedule)의 할당 시간을 비교하여, API 요청 시간보다 이후에 할당된 일정(Schedule)은 불러오지 않는다.
문제점
위와 같은 문제점이 있지만, 중간에 삽입된 데이터는 조회하지 않아 중복 조회는 발생하지 않는 점을 생각하고 진행하게 되었습니다.
구현 방법
assignedAt
요청 시점(requestTime)
을 클라이언트에게 넘겨, 쿼리 파라미터로 넘겨받도록 요청PageableDefault
를 활용하여 페이징 처리하기MeetingController - 모임 시간 조회
Querydsl 쿼리문 수정
위와 같은 방식으로 무한 스크롤을 구현하였습니다.
결과
개선된 점
기존 요청 시간
변경 후 요청 시간
고민해볼 점
Beta Was this translation helpful? Give feedback.
All reactions