Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
issue
현재 문제
Post 목록 조회시 페이지네이션으로 10개를 조회해온다.
Post 목록 조회에서 병목 현상이 발생했다.
원인분석
조회 한번당 쿼리가 생각보다 많이나간다.
도합 52번의 쿼리문이 나간다.
부하테스트 상황(서버)
1번 요청 -> 0.395초
500번 요청 -> 평균 5.260초
1000번 요청 -> 평균 12.797초
에러는 발생하지 않았다.
해결
방법1. 좋아요, 조회수, 투표 수 등의 연관관계를 모두 끊고, 숫자만 갖고 있는다.
PostView 엔티티 Redis 로 변경
기존의 PostView
변경된 PostView
기존의 Post의 PostView연관관계
변경된 Post의 PostView(연관관계를 끊고 조회수만 저장한다.)
PostLike 연관관계 제거
기존의 Post의 PostLikesCount
변경된 PostLikeCount
BatchSize를 통한 최적화
게시글 목록 조회는 페이지네이션으로 인해 한번에 10개씩 조회해온다.
Post는 {vote, parentComment, childComment}의 연관관계를 갖고 있다.
Post 목록 10개를 조회할 때 BatchSize를 적용하면
총 4회의 쿼리를 통해 데이터를 가져올 수 있다.
적용
연관 엔티티에 별도로 @batchsize 애노테이션을 붙여줬다.
결과
DB 캐싱 전 1번 요청 : 0.620초-> 0.352초
캐싱 후 1번 요청 : 0.281초 -> 0.183초
캐싱 후 500번 요청 : 평균 9.260초 -> 5.74초
캐싱 후 1000번 요청 : 평균 162797초 -> 7.74초
대략 40~50% 정도 성능이 개선됐다.