inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

게시글 목록 API - 무한 스크롤 설계

무한 스크롤 질문있습니다

해결된 질문

224

service

작성한 질문수 26

0

java mysql spring-boot kafka redis

답변 1

1

쿠케

철현님, 안녕하세요!

궁금하신 부분들 답변 드립니다!

 

페이징 쿼리 설명하는 과정에서 offset의 증가로 인해 결국 뒷페이지로 갈수록 느려지는 문제는 불가피하다는 점을 언급하는데요,

그에 대한 해결책으로 무한 스크롤 방식의 쿼리를 사용할 수 있습니다.

애초에 페이지 번호 방식과 무한 스크롤 방식은 사용성부터가 완전히 다릅니다.

무한 스크롤 사용성에 페이지 번호 방식의 쿼리를 사용하면, 사용자에게 데이터를 온전하게 보여줄 수 없습니다.

그래서 무한 스크롤의 사용성에서 페이지 번호 방식의 쿼리를 사용했을 때의 중복 또는 누락되는 상황에 대해서 설명을 하는 것이고요.

각 사용성에 적절한 쿼리를 제시해드린 것이고,

무한 스크롤 쿼리는 페이지 번호 쿼리의 문제점을 해결하면서도, 무한 스크롤 사용성에 적합하기 때문에 별도의 쿼리로 구현됩니다.

페이지 번호 방식 쿼리의 한계를 알아본 뒤에 무한 스크롤을 진행하는거라, 강의 자료로 전반적인 흐름을 다시 살펴보시는 것도 추천드립니다!

 

게시글 챕터는, 인덱스 알고리즘에 대한 이해와 최적화된 인덱스 활용법을 알려드리기 위한 과정입니다.

분산 환경과는 완전히 무관합니다! (분산에 대해서는 언급하지 않는 것 같은데, 오해될 만한 부분이 있었을까요?!)

 

JPA는 논외로 생각하시는게 좋을 것 같습니다.

JPA의 자동 완성되는 페이징 쿼리를 살펴보시면 아시겠지만, 커버링 인덱스를 활용하여 데이터베이스에 최적화된 쿼리를 만들어주지 않습니다.

Slice는 무한 스크롤 쿼리와 유사하게 만들어주긴 하지만, 

데이터베이스에서 어떻게 실행되는지 직관적으로 보여주기 위해 native query로 만들었습니다.

주변에서 데이터베이스를 학습하지 않고 JPA만 학습하여 페이징 쿼리 만드는 분들을 봤을 때에는, 

내부적으로 어떤 SQL 구문과 어떤 원리로 돌아가는지 제대로 인지하지 못하는 경우가 많더라고요.

이러한 부분도 일부러 native query를 사용하게 된 이유이기도 합니다.

원리만 알고 있으면 어떤 방법으로 구현하든 아무 상관 없습니다!

그리고 사실 JPA도 복잡한 시스템을 만들다보면 최선의 선택이 아닐 때가 많습니다. (JPA의 장점만 전파가 너무 잘된 느낌이..!?)

데이터베이스를 잘 알아야 JPA도 제대로 쓸 수 있는거라,

JPA에 종속된 사고보단, 데이터베이스 관점에서 생각하시는게 이해가 편할 것 같습니다.

https://www.inflearn.com/community/questions/1504157

JPA 실무 활용 관련하여 다른 분이 질문 주신 것도 있어서, 위처럼 답변 드린 적이 있습니다.

참고 차 같이 남겨둡니다!

 

혹시 더 궁금한 점은 편히 문의주세요!

1

service

친절한 답변 너무 감사합니다. 질문한게 모두 해소되었어요!!

링크로 달아주신 답변 또한 모두 잘읽었습니다.
많은 생각을 하게 되는 답변이네요!!

0

쿠케

직접 고민하시면서 능동적으로 공부하는 모습 훌륭합니다!!

공부 화이팅입니다!

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

31

1

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

47

2

게시글 테스트 데이터 삽입

0

51

2

정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?

0

104

2

좋아요 기능 정합성 보장 방법

0

97

2

좋아요 동시성처리 최적의 선택?

1

136

2

프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해

0

92

2

안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.

0

59

1

조회수 조회 로직 질문

1

67

2

비로그인 유저도 어뷰징 방지 정책

1

72

2

CommentServiceTest의 테스트 로직 질문

0

54

2

무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문

1

74

2

path 쿼리 관련 질문드립니다!

0

60

2

antigravity 에디터를 쓰신다면 종료해주세요

1

123

0

프로젝트 구조

0

88

2

article_like_count api test

0

78

2

이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.

0

104

2

[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제

0

91

2

findByPath에서 articleId로도 검색을 해야 할 것 같아요.

0

92

3

jpa ddl-auto none을 하는 이유와 join 방법

0

97

2

팩터리 메소드와 response 객체 사용 이유가 궁금합니다!

0

90

2

커서 기반 페이지네이션 과 무한 스크롤링

0

110

2

게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기

0

97

2

멀티 모듈이 아닌 MSA 환경에서 common

0

156

2