• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

페이지네이션 관련 질문입니다.

21.10.21 02:29 작성 조회수 195

0

강의들 들다가 리덕스에서는 서버에서 가져온 데이터들을 계속 가지고 있는데 서버에 부하를 줄일수있다고 생각했는데요.

 

실제로는 한번 불러온 데이터들을 캐싱을 하나요 아니면,

다른페이지에 들렷다가 페이지네이션 기능이 있는 페이지에 다시 오면, 서버에서 똑같은 데이터를 다시 처음부터 가져오나요?

이 부분이 리덕스랑 연결이 되면서 어떤 방법이 맞는건지가 궁금합니다. 캐싱을 하게되면 데이터를 추가, 삭제했을때 서버랑 일관성이 없어질거 같기도하고 헷갈려네요,.

답변 1

답변을 작성해보세요.

0

가능한선에서 최대한 캐싱을 하는게 좋아요.

말씀하신대로 서버 부하를 줄여주는 효과도 있고 UX차원에서도 좋죠. 캐싱이 되어 있다면 같은 페이지를 재방문 했을 때 로딩이 훨씬 빠를테니깐요.

 

하지만 중요한건 "가능한선에서 최대한"입니다. 즉 상황에 따라 대처하는 방법이 조금씩 다를 수 있어요.

예를 들어 제가 수정하지 않는한 변동이 없는 리스트(내가 쓴 블로그, 내 친구들 등등)라면 페이지네이션만 적용해주고 그냥 캐싱을 해주면 되겠죠. 근데 만약 리스트가 제3자에 의해서 생성, 삭제 될 수 있는거라면 일관성을 보장할 수 있는 방법을 찾아야하는데요. 여기서 또 중요한게 "평균적으로 얼마나 자주 바뀌느냐" 그리고 일관성이 얼마나 중요하냐가 있어요. 페이지 재방문 했을 때 새로 불러오게 할 수도 있고요. 배치를 돌려서 주기적으로 업데이트를 해줄 수도 있어요. 둘다 구현하기는 쉬운 방법인데 그래도 완벽하지는 않죠.

 

제일 이상적이지만 쉽지 않은 방법으로는 웹소켓을 이용한 실시간 데이터 동기화입니다. http request는 클라이언트가 서버에 요청할 때만 데이터를 받게 되는데요. 웹소켓을 이용하면 백엔드에서 데이터 변경이 발생할 때마다 이벤트를 생성(예. "블로그 7번 삭제 됬어!", "블로그 6번에 댓글 추가됬어!")할 수 있죠. 그러면 프론트에서는 필요한 이벤트들을 구독하고 있다가 실시간으로 화면에 업데이트 해주고요. 다만 이건 백엔드가 훨씬 복잡해집니다. 백엔드가 statefull해짐에 따라 부하관리(수평확장)가 좀 더 어려워지기도 하고 제대로 하기 위해서는 Event Driven Architecture라는것도 적용을 하는게 좋고요.