Backend/Java

Spring Boot - 필터링 & 검색 기능

개발자의 첫 걸음 2025. 8. 22. 10:00

 

안녕하세요. 오늘은

 

스프링 부트의 필터링 & 검색기능의 종류에 알아볼게요.

 

 

 

1. 쿼리 메서드(Query Method)

 

Spring Data JPA가 메서드명을 파싱 하여 JPQL을 자동생성하는데

 

메서드 이름만으로 자동으로 쿼리 생성으로

 

가장 간단하고 직관적인 방식이에요.

 

대신 복잡한 조건에는 권장하지 않아요.

 

List<User> findByUsername(String username);

List<User> findByAgeGreaterThan(int age);

List<User> findByUsernameContaining(String keyword);

List<User> findByUsernameAndStatus(String username, String status);

 

 

 

2. JPQL(Java Persistence Query Language)

 

그룹핑/집계/조인/서브쿼리 등 쿼리 메서드로 표현이 어려운 경우 명시적으로 JPQL을 사용으로 

 

SQL과 유사하지만 엔티티 기준으로 작성을 해서 DB에 독립적인 친구예요.

 

@Query("SELECT u FROM User u WHERE u.age > :age AND u.status = :status")
List<User> findActiveUsers(@Param("age") int age, @Param("status") String status);

@Query 어노테이션을 사용하고,

 

JPQL은 SQL만큼 유연하지 않고, 복잡한 동적 쿼리는 어려운 단점이 존재해요.

 

 

 

3. Native SQL

 

DB 벤더 특화 기능으로 극한 성능이 필요한 경우에 사용해요.

 

복잡한 통계/랭킹/리포트네 SQL 가독성이 JPQL보다 뛰어난 특징을 가지고,

 

진짜 SQL을 그대로 사용하는 방식이기 때문에 DB를 기준으로 작성해요.

 

@Query(value = "SELECT * FROM users WHERE username LIKE %:keyword%", nativeQuery = true)
List<User> searchByUsernameNative(@Param("keyword") String keyword);

 

@Query(nativeQuery = true)로 작성

 

엔티티, 맵핑 등 JPA의 이점을 일부 포기해야 하고,

 

유지보수성이 어려워질 수 있다는 단점이 있어요.

 

 

 

제가 배운 건 여기까지지만 

 

추가적인 기능이 있을까 하고 찾아보니

 

더 많았어요!

 

그래서 현재 내용들과 추가적인 내용들은 간단하게 표로 정리했어요.

 

단순 필터링 Query Method
복잡한 정적 쿼리 @Query
동적 조건 검색 Querydsl, Specification
타입 안전한 복잡한 쿼리 Querydsl
표준 API 활용 Criteria API
REST API 기반 자동 검색 Spring Data REST
고성능 텍스트 검색 Elasticsearch

 

 

 

여기까지 스프링부터의 필터링 & 검색기능에 알아봤는데요.

 

스프링부트를 알아가면 갈수록 힘들고 어렵지만

 

내 것으로 만들고 코드를 만져볼 때 흥미롭고 즐거웠답니다.

 

여러분들은 어떤가요?

 

 

 

 

 

'Backend > Java' 카테고리의 다른 글

Spring Security  (2) 2025.08.29
Java - List vs Set  (0) 2025.08.25
Spring Boot - Validation  (0) 2025.08.20
Spring Boot  (1) 2025.08.17
Java - JDBC  (3) 2025.08.13