코딩/sparta TIL
Native Query(네이티브 쿼리)
americanoallday
2025. 5. 22. 16:09
Native Query(네이티브 쿼리) 는 JPA나 Hibernate가 제공하는 추상화 계층을 우회해서, 우리가 직접 SQL 문법으로 작성하는 쿼리를 의미합니다.
✅ 정리
구분 | 설명 | 예시 |
JPQL (Java Persistence Query Language) | JPA가 제공하는 객체 중심의 쿼리 | SELECT b FROM Book b WHERE b.title = :title |
Native Query | DB 고유의 SQL을 직접 작성 | SELECT * FROM books WHERE title = ? |
차이점 | JPQL은 엔티티 기준 Native는 테이블 기준 | 즉, JPQL은 자바 객체를 기준으로 동작 |
✅ 예시 비교
🔸 JPQL
@Query("SELECT b FROM Book b WHERE b.author = :author")
List<Book> findByAuthor(@Param("author") String author);
🔸 Native Query
@Query(value = "SELECT * FROM book WHERE author = :author", nativeQuery = true)
List<Book> findByAuthor(@Param("author") String author);
✅ Native Query를 쓰는 이유
상황 | 이유 |
GROUP BY, LIMIT, HAVING, JOIN 등 복잡한 쿼리 | JPQL은 문법이 제한적 |
성능 최적화 필요 | DB에서 직접 실행되므로 더 빠름 |
DB 뷰 / 함수 사용 | JPQL로는 불가능, Native Query 필수 |
특정 DB 기능 (예: MySQL의 LIMIT, FULLTEXT) | JPQL에서는 지원 안 됨 |
✅ 사용 시 주의할 점
- DB 종속적이라서 이식성이 떨어짐 (MySQL 쿼리는 PostgreSQL과 다름)
- 반환 타입을 Entity로 할 수 없을 땐 DTO 매핑 필요
필요하다면 지금 사용 중인 @Query를 Native로 바꾸는 예제도 알려줄게요.