최대 1 분 소요

문제 상황

스크린샷 2022-09-26 오후 6 26 20
spring boot와 jpa를 사용해 좋아요한 게시글 리스트 조회 api를 구현하던 중, 위와 같은 에러가 발생했다.

문제 원인

이는 LikeService에서 postId로만 게시글을 조회해서 생기는 문제였다.
“내가” 좋아요한 게시글 리스트를 가져오고 싶었던 것이기 때문에,
postIdmemberId가 둘 다 일치하는 like를 가져왔어야 한다.

기존에는 postId만 일치하는 like를 가져왔었기 때문에
like가 한 개가 아닌 여러개가 조회되어 위와 같은 에러가 발생한 것이다.

예를 들어 10번 멤버와 11번 멤버가 5번 게시글을 좋아요 한 경우에,
like는 아래처럼 2개가 생성될 것이다.

like_id | post_id | member_id
   1    |    5    |    10
   2    |    5    |    11

이 때, postId가 5인 like를 조회한다면, 총 2개가 조회 될 것이기 때문에
postIdmemberId가 둘 다 일치하는 1개의 like만 가져오도록 LikeRepository를 수정해야 한다.

해결 방법

기존의 LikeRepository를 아래와 같이 변경하였다.

기존

LikeService

Like like = likeRepository.findByPostId(postId) // postId가 일치하는 like 를 반환
                .orElseThrow(() -> new CustomException(LIKE_ERROR));

LikeRepository

public interface LikeRepository extends JpaRepository<Like, Long> {
    Optional<Like> findByPostId(long postId);
}

변경

LikeService

Like like = likeRepository.findByMemberIdAndPostId(member.getId(), postId) // postId와 memberId 둘 다 일치하는 like 를 반환
                .orElseThrow(() -> new CustomException(LIKE_ERROR));

LikeRepository

public interface LikeRepository extends JpaRepository<Like, Long> {
    Optional<Like> findByMemberIdAndPostId(long memberId, long postId);
}

Ref.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기