코딩/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로 바꾸는 예제도 알려줄게요.