springbootjpaquery
Spring Boot JPA 쿼리 전략 - 메서드 이름, JPQL, QueryDSL까지
조회 0
Spring Data JPA를 사용할 때는 쿼리를 어디까지 자동으로 맡기고, 어디부터 직접 작성할지를 정하는 것이 중요합니다.
이 글에서는 Spring Boot + JPA 환경에서 자주 쓰는 쿼리 작성 방법을 단계별로 정리합니다.
1. 메서드 이름 기반 쿼리
가장 단순한 방법은 메서드 이름을 규칙대로 쓰면 JPA가 알아서 쿼리를 만들어 주는 방식입니다.
interface UserRepository : JpaRepository<User, Long> {
fun findByEmail(email: String): User?
fun findByStatusAndAgeGreaterThan(status: UserStatus, age: Int): List<User>
fun countByStatus(status: UserStatus): Long
}
- 단순 CRUD, 조건이 2–3개 정도까지는 메서드 이름만으로도 충분합니다.
- 메서드 이름이 너무 길어지면 JPQL 또는 QueryDSL로 넘기는 시점을 고민해야 합니다.
2. @Query로 JPQL 직접 작성
메서드 이름만으로 표현하기 애매해지면 @Query를 사용합니다.
interface UserRepository : JpaRepository<User, Long> {
@Query(
"""
select u
from User u
where u.status = :status
and u.createdAt >= :from
and u.createdAt < :to
order by u.createdAt desc
"""
)
fun findActiveUsersBetween(
@Param("status") status: UserStatus,
@Param("from") from: LocalDateTime,
@Param("to") to:
): List<User>
}