DB에 Insert 하는 기능을 개발 중 이미 존재하는 데이터인지 중복 체크하는 로직을 추가해야 하는 상황이 있을 것이다...
예를 들어 회원가입 시 ID 중복 체크를 한다면 Spring Data Jpa의 쿼리메소드 중 countByUserId() 메소드를 사용해서 중복체크를 할 수 있지만, countByUserId()보다는 existsByUserId()를 써서 중복체크를 하도록 하자.
public interface MemberRepository extends JpaRepository<Member, Long> {
// 모든 row를 순회한다.
Long countByUserId(String userId);
// 조건을 만족하는 데이터 존재 시 종료
boolean existsByUserId(String userId);
}
countBy~ 는 DB의 모든 row를 순회하며 갯수를 세는 쿼리를 실행하고, existsBy~ 는 조건을 만족하는 데이터가 1건이라도 존재하면 즉시 스캔을 종료하기 때문이다. (데이터가 많아질수록 큰 성능 차이를 보일 것이다.)
// countByUserId() 로그
Hibernate: select count(m1_0.id) from member m1_0 where m1_0.user_id=?
// existsByUserId() 로그
Hibernate: select m1_0.id from member m1_0 where m1_0.user_id=? limit ?
Hibernate 로그에도 위와 같은 쿼리가 나가는 것을 확인할 수 있다.
'Spring Data Jpa' 카테고리의 다른 글
[JPA] Open-in-view (0) | 2024.04.25 |
---|