[TIL] 게시글 조회 시, 좋아요 개수를 가져오는 방법

phdljr·2023년 11월 21일
1

TIL

목록 보기
34/70

뉴스피드 프로젝트를 진행하게 되면서 ERD를 그리게 되었다.

최대한 데이터가 서로 중복되지 않게 구성했지만, 한가지 걸리는 문제가 있었다.
그것은 바로 게시글을 조회할 시, 좋아요 개수를 가져오는 것이다.

인터넷 검색을 해보니, 이러한 문제를 겪는 여러 프로젝트가 있음을 확인하였고, 해결 방법 또한 여러 개가 있음을 알게 되었다.

결론적으론, 정해진 답은 없었으며 상황에 따라 다르게 접근하는 것 같다.

그것이 무엇인지 알아보는 시간을 가져보았다.


게시글 조회 시, 좋아요 테이블 조회

즉, 게시글을 조회할 때 게시글 조회 쿼리도 날리고, 좋아요 테이블을 조회하는 쿼리도 날리게 하는 것이다.

데이터베이스에 데이터를 중복 없이 저장할 수 있으며, 다른 테이블에 영향을 끼칠 일이 없다는 장점이 있다.

하지만, 게시글을 조회할 때마다 두 번의 쿼리를 날려야 하며, 좋아요 개수가 많아질수록 점점 처리량이 많아지며 응답 속도가 느려질 것이다.

게시글 테이블에 좋아요 개수 속성을 추가

좋아요 개수 속성을 추가한다면, 게시글 테이블만 조회하면 쿼리 하나만으로 해결되며 처리 속도 또한 빠를 것이다.

하지만, 좋아요 테이블과 게시글 테이블 간의 데이터 차이가 일어날 가능성이 존재한다. 예를 들어, 좋아요 개수는 100개지만, 게시글 테이블에는 95개로 저장되어 있으며, 서로 간의 정합성이 맞지 않다는 것이다.

또한, LOCK을 걸어 정합성을 맞춰줄 순 있지만, 그만큼 속도에 영향을 끼칠 것이다.

주기적으로 테이블의 좋아요 개수 업데이트

매번 좋아요 개수를 업데이트시키는 것이 아닌, 특정 시간에 좋아요 개수를 업데이트시키는 것이다.

하지만, 업데이트를 시키기 전까진 클라이언트는 알맞은 좋아요 개수를 알 수 없다는 단점이 있다.


결론

좋아요의 개수가 많아 질수록 개수를 조회하는 쿼리는 부담이 많이 들 수밖에 없다.

좋아요의 개수가 그리 많지 않다면 기존의 테이블 설계처럼 진행하되, 부담이 점점 심해진다면 반정규화를 통해 게시글 테이블에 좋아요 개수를 속성으로 가질 수도 있을 것 같다.

지금은 그렇게 규모가 큰 프로젝트는 아니니 반정규화를 거치지 않을 것이다.

profile
난 Java도 좋고, 다른 것들도 좋아

0개의 댓글