개발자

Next.js SSR + react-query 조합에서의 일반적인 페이지네이션 렌더링 방식

2023년 02월 16일조회 921

안녕하세요, Next.js SSR + react-query hydration 조합으로 페이지네이션을 구현하려고 합니다. 핵심 궁금증은 일반적으로 SSR을 구성할 때, 첫 페이지만 SSR을 적용하고 2페이지부터는 CSR로만 돌아가게 하나요? 아니면 모든 페이지를 SSR로도 돌아갈 수 있게 구성을 하나요? 예컨대 커리어리 개발자 Q&A 메뉴는 첫 페이지만 SSR을 적용하고 2페이지(스크롤링)부터는 CSR로만 돌아가게 구성을 한 것 같습니다만, 사실 어떤 선택이든 Trade Off가 있겠으나 일반적으론 어떻게 구성하는지가 궁금하네요!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

인기 답변

손정현님의 프로필 사진

안녕하세요! 질문해주신 부분은 요구사항과 상황에 따라서 달라지지 않을까 생각됩니다. 우선 커리어리의 많은 서비스들을 보시면 아시겠지만, 목록 형태의 컨텐츠는 대부분 무한 스크롤을 사용하고 있습니다. 이는 디자인 또는 비즈니스 관점에서 무한 스크롤 형태가 사용자에게 보다 자연스러운 탐색 경험을 제공해주기 때문에 채택된 것으로 알고있어요. 무한 스크롤 방식에서 모든 페이지의 데이터를 SSR로 페칭할수도 있겠지만, SSR에서 불러와야하는 데이터가 크면 클 수록 사용자가 처음에 기다리게 되는 시간도 크지 않을까 생각됩니다. 그래서 적절한 크기인 1페이지 분량만 SSR로 가져오게끔 설계된 것 같네요. 무한 스크롤이 아닌 일반적인 페이지네이션이라면 page를 query param으로 사용해서 필요한 페이지만 SSR에서 가져오는 형태로 구현을 할 수 있을 것 같네요. (일반적으로 이 방식을 많이 사용하는 것 같습니다) 무한 스크롤일 경우에는 보여줄 페이지만 SSR에서 가져오게되면, 막상 CSR에서 해당 페이지 이전의 데이터를 가져와야할 경우 어떻게 처리해야할지도 고민이 필요할 것 같네요. 그리고 react-query를 사용하실 경우, SSR에서 받은 데이터가 CSR에 저장된 캐시를 덮어 씌우지는 않는지도 주의가 필요하더라구요. 저희 같은 경우 SSR 프리페치 쿼리 키와 CSR에서 페칭할 때 쓰는 쿼리 키가 동일해서 SSR 로직이 돌 때, CSR에 이미 있던 캐시를 덮어 씌워서 의도치 않은 버그가 발생한 적이 있었습니다. 여담이지만 개인적으로 커리어리 개발자 Q&A 페이지에 SSR은 필요없다고 생각되고 해당 페이지에 "페이지 재방문 시 스크롤 유지" 같은 버그를 유발하기 쉬운 기능들이 탑재되어 있어서, 손봐야할 부분이 많은 상태입니다. 백로그에 있는데... 후 언제 처리해야할지 모르겠네요 :)

profile picture

익명

작성자

2023년 02월 17일

안녕하세요, 정현님 항상 자세한 답변 감사드립니다. 한 가지 궁금한 점이 생겼는데요, 모든 페이지의 데이터를 SSR로 페칭하는 방식에 대한 부담이 데이터가 많은 것이랑 어떤 상관관계가 있는지 잘 이해가 되질 않습니다. 1페이지가 아닌 다른 페이지에서 새로고침을 했다고 가정하면, 그 시점에 getServerSideProps 함수에서 해당 페이지의 데이터를 각각 페칭해올 수 있지 않을까 해서요! 물론 페이지가 변경될 때 url상에 해당 페이지 정보를 넣고, getServerSideProps 함수에서 해당 페이지 정보를 가져와서 요청을 던져야하겠지만요!

손정현님의 프로필 사진

손정현

coya2023년 02월 17일

넵. 맞아요. 제가 너무 무한 스크롤에 초점을 맞춰서 답변을 드린 것 같네요. 일반적인 페이지네이션 (구글 검색 결과처럼 페이지 번호로 네비게이션이 가능한 UI)의 경우 말씀하신것처럼 가져올 페이지의 번호를 SSR에서 알고 있다면 해당 페이지의 정보만 가져올 수 있을 것 같아요. 제가 "모든 페이지의 데이터"로 표현하고자 했던 건 이런 경우인 것 같아요. - 현재 가져와야할 페이지가 3이라면, 페이지 1,2,3의 데이터를 한번에 SSR에서 가져오는 경우 무한 스크롤의 경우 각 페이지가 순차적으로 이어져있고 사용자가 스크롤로 위아래로 탐색할 수 있는 형태다보니까, 3번 페이지를 보여주려면 페이지 1,2,3의 모든 데이터가 필요하다고 생각했었습니다. 물론, 이것도 무한 스크롤에 윈도우 (현재 뷰포트에 들어온 페이지만 렌더하는 방식)를 적용하면 일반 페이지네이션처럼 한 페이지씩 SSR로 가져올 수 있을 것 같아요.

손정현님의 프로필 사진

손정현

coya2023년 02월 17일

그래서 만약 저희도 무한 스크롤이 아닌 일반적인 네비게이션을 사용했다면 페이지 정보를 url에 query param으로 넣어서 SSR에서 해당 페이지만 가져오도록 설계하지 않았을까 예상해봅니다.

profile picture

익명

작성자

2023년 02월 17일

아하, 이해가 됐습니다. 저도 제가 페이지네이션쪽으로만 생각했다보니, 미처 정현님 말씀하신 것처럼 무한스크롤에서는 기존 데이터까지 같이 불러와야할 수도 있는 상황을 생각못했네요! 감사합니다. 덕분에 궁금증이 풀렸네요. 그럼 좋은 주말 보내세요!☺️

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!