inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이미지 관리 풀스택(feat. Node.js, React, MongoDB, AWS)

GET /images API에 cursor pagination 적용하기

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

315

rrallvv .J

작성한 질문수 36

0

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

 

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

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

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

mongodb nodejs express aws react lambda

답변 1

0

김시훈 (도도소프트)

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

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

 

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

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

 

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

Router.use 두번째 파라미터 ImageRouter : undefined 전달 오류

0

124

2

소스코드 요청

0

164

1

프록시 관련 질문

0

167

1

Presigned URL 사용시 데이터베이스 저장 시점

0

334

1

이미지 등록시 자동 등록 오류

0

218

1

강의에 사용된 코드 다운 받는 사이트 주소 있나요?

0

389

2

axios 이용해서 백엔드로 이미지 전송 중 새로고침

0

476

1

ImageList 컴포넌트에서 업로드 한 사진을 리스트에서 바로 보기 위해 이 방법도 괜찮나요??

0

386

1

이미지 처음 올릴 때만 나타나는 오류

0

255

1

es6 스타일로 Import 할때 동작하지 않습니다.

0

393

1

이미지 업로드시

0

367

1

node js를 이용하고 mysql에 이미지 경로 저장

2

1263

1

선생님 cloudFront를 사용하게되면 S3는 private으로 사용하는게 좋을까요

0

545

1

선생님 aws-sdk 모듈을 찾을 수 없다고 합니다.

0

666

1

new aws.S3 version 확인

2

509

1

react-router-dom v6 useHistory 이슈

7

641

0

람다에서 시간 초과 에러가 뜹니다!

0

318

1

첫 로드시 동일한 이미지 두번호출

2

492

1

이미지 업로드 시 배열로

2

531

1

Promise.all에 대한 질문

0

431

1

세션에 관한 질문이 있습니다.

0

434

1

Promise.all관련 질문 ("여러 이미지 미리보기" 중...)

0

312

1

cdn 주소

0

510

1

특정 user 페이지 가져오기 질문있습니다.

0

296

1