[TIL] N+1, 프로젝트, 커스텀 어노테이션

지인·2023년 8월 9일
0

TIL

목록 보기
38/38
post-custom-banner

🙃 프로젝트

  • 유저 초대, 권한 부여 기능구현
  • AOP, Exction 구현
  • postman으로 테스트

[프로젝트] Trello


🙃 커스텀 어노테이션

  • AOP에서 메서드들을 상황별로 묶어 좀더 효율적으로 할 수 있는 방법을 찾았고 적용해서 AOP 구현 했다.

[Spring] 커스텀 어노테이션


🙃 N+1

  • UserBoard 엔티티에서 ManyToOne 관계로 User 엔티티를 참조하고 있다.
    UserBoard 엔티티에서 userId를 사용해 사용자 ID에 해당하는 보드를 조회하려고 했다.
    이럴 경우, 각각의 보드마다 해당 보드의 작성자인 사용자 정보를 가져오기 위해 추가 쿼리를 실행하게 된다.
    이로 인해 사용자마다 보드 개수만큼 추가적인 쿼리가 실행되어 N+1 문제가 발생한다.
public interface UserBoardRepository extends JpaRepository<UserBoard, Long> {
    List<UserBoard> findAllByUserId(Long userId);
}
  • 해결 : Fetch join
    주어진 사용자 ID에 해당하는 모든 유저보드 엔티티를 가져오면서 작성자 정보를 함께 가져와서 추가적인 쿼리 없이 N+1 문제를 해결할 수 있었다.
public interface UserBoardRepository extends JpaRepository<UserBoard, Long> {
    @Query("SELECT ub FROM UserBoard ub JOIN FETCH ub.board WHERE ub.user.id = :userId")
    List<UserBoard> findAllByUserIdWithUserFetch(Long userId);
}
profile
열쩡
post-custom-banner

0개의 댓글