
데이터베이스를 사용하는 애플리케이션 개발에서는 데이터를 어떻게 효율적으로 조회할 것인지가 매우 중요하다. 이 때 자주 사용되는 개념 중 하나가 QUERY Method이다. 이번 글에서는 Query Method가 무엇인지, 왜 사용하는지, 그리고 어떻게 사용하는지에 대해 알아 보겠다.
Query Method는 데이터베이스에서 특정 데이터를 조회하기 위한 메서드이다. 특히 ORM 프레임워크에서 많이 사용되며 , 개발자가 SQL 쿼리를 작성하지 않고도 데이터를 손쉽게 조회할 수 있도록 도와준다. Query Method는 메서드 이름을 기반으로 자동으로 SQL 쿼리를 생성하며, 이를 통해 데이터베이스에서 원하는 데이터를 검색할 수 있다.
주로 Spring Data JPA와 같은 Java 기반의 프레임워크에서 많이 사용된다.
Query Method를 사용하는 장점은 다음과 같다.
Query Method의 기본 원리는 메서드 이름에 포함된 키워드를 기반으로 쿼리를 생성하는 것이다. 예를 들어 , Spring Data JPA에서는 아래와 같은 방식으로 Query Method를 정의할수 있다.
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastName(String lastName);
}
위의 예제에서 findByLastName 메서드는 lastName이라는 필드로 사용자를 검색하는 SQL 쿼리를 자동으로 생성한다. findBy뒤에 필드 이름을 붙여주는 방식으로 다양한 조건을 설정할 수 있다.
Query Method는 단순한 검색 뿐만 아니라, 다양한 조건을 추가하여 복잡한 쿼리도 쉽게 작성할 수 있다.
And를 사용한다.List<User> findByFirstNameAndLastName(String firstName, String lastName);
이 메서드는 SQL에서 where first_name = ? AND last_name = ?와 같은 쿼리를 생성한다.
이렇게 하면 두조건이 모두 만족하는 데이터를 조회할 수 있다.
Or를 사용한다. 예를 들어 , 사용자의 이름이나 성 중 하나라도 일치하는 데이터를 찾고자 할 때는 다음과 같은 메서드를 정의할 수 있다.List<User> findByFirstNameOrLastName(String firstName, String lastName);
이 메서드는 SQL에서 where first_name = ? or last_name =?와 같은 쿼리를 생성하며, 둘 중 하나의 조건만 맞아도 데이터를 반환한다.
OrderBy를 사용한다. 예를 들어, 성을 기준으로 오름차순 정렬하고, 그 내에서 이름을 기준으로 정렬하고자 할 때는 아래와 같이 정의한다.List<User> findByLastNameOrderByFirstNameAsc(String lastName);
이 메서드는 SQL에서 where last_name =? order by first_name asc와 같은 쿼리를 생성한다. asc는 오름차순을 의미하며, 내림차순 정렬을 원할 경우 Desc를 사용하면 된다.
GreaterThan 키워드를 사용한다.List<User> findByAgeGreaterThan(int age);
이 메서드는 SQL에서 where age> ? 와 같은 쿼리를 생성하며, 주어진 값보다 큰 나이를 가진 사용자만을 반환한다.
Like 키워드를 사용할 수 있다. 예를 들어, 이름에 특정 문자열이 포함된 사용자를 찾고자 할 때는 다음과 같이 정의 할 수 있다.List<User> findByFirstNameLike(String pattern);
여기서 pattern은 SQL의 Like절에서 사용하는 %와일드 카드를 포함할 수 있다. 예를 들어 , findByFirstNameLike("%John%")는 이름에 "John"이 포함된 모든 사용자를 반환한다.
findBy,And,Or,OrderBy 등의 키워드를 올바른 순서로 조합하여 원하는 쿼리를 생성해야한다. 순서가 잘못되면 의도하지 않은 쿼리가 생성되거나 오류가 발생할 수 있다.Query Method는 편리하지만 , 모든 쿼리 요구 사항을 처리할 수 있는 것은 아니다. 메서드 이름이 지나치게 길어질 수 있고, 복잡한 비즈니스 로직을 포함한 쿼리를 작성하기에는 한계가 있다. 이러한 경우에는 직접 SQL 쿼리를 작성하거나, @Query 애노테이션을 활용하여 커스텀 쿼리를 작성하는 것이 좋다.
@Query("SELECT u FROM User u WHERE u.age > :age")
List<User> findUsersWithAgeGreaterThan(@Param("age") int age);
Query Method는 데이터 조회 작업을 간단하고 효율적으로 처리할 수 있는 강력한 도구이다. 메서드 이름을 기반으로 쿼리를 자동 생성해 주므로, 개발자가 데이터 조회에 집중 할 수 있도록 돕는다. 그러나 복잡한 쿼리나 비즈니스 로직이 포함된 경우에는 쿼리를 직접작성해주거나 하는 대안을 고려하는것이 좋다.
Query Method를 잘 활용하면 개발 생산성을 높일 수 있으며, 보다 유지보수하기 쉬운 코드를 작성할 수 있다.