728x90
nativeQuery란❓
nativeQuery는 JPA에서 네이티브 SQL 쿼리를 직접 실행할 수 있도록 하는 기능입니다.
JPA는 기본적으로 JPQL (Java Persistence Query Language)를 사용하여 엔티티 기반의 쿼리를 작성하지만, 때로는 복잡한 SQL 쿼리가 필요하거나, 성능 최적화를 위해 데이터베이스에 의존적인 쿼리를 사용할 때가 있습니다.
이럴 때 nativeQuery를 사용하면 JPQL 대신 원래의 SQL 쿼리를 사용할 수 있습니다.
JPA에서는 손쉽게 @Query 어노테이션으로 커스텀 쿼리를 작성할 수 있는데, 이 때 옵션으로 "nativeQuery = true"로 설정한다면 네이티브 SQL을 사용할 수 있습니다.
nativeQuery 사용 vs nativeQuery 사용 X
nativeQuery X
@Modifying
@Query(value = "UPDATE Post SET views = views + 1 WHERE postId = :postId")
void incrementViews(@Param("postId") UUID postId);
nativeQuery O
@Modifying
@Query(value = "UPDATE Post SET views = views + 1 WHERE postId = :postId", nativeQuery = ture)
void incrementViews(@Param("postId") UUID postId);
동시성 제어 때문에 PostgreSQL의 내부적인 락을 사용하기 위해서 @Modifying 어노테이션과 @Query 어노테이션을 사용해야 했습니다.
이 때 nativeQuery 옵션을 사용할지 안할지 고민하던와중 Jmeter로 실제 속도를 확인하고 결정하기로 했습니다.
nativeQuery 사용 X 요약 보고서
nativeQuery 사용 요약 보고서
위 사진 결과에서도 알 수 있듯이 계속해서 바뀌긴 하지만 별 차이가 없기 때문에 native 사용안하기로 결정했습니다.
JPQL과 Native Query의 차이점
- JPQL (Java Persistence Query Language)
- JPA에서는 JPQL을 사용하여 객체 지향적인 방식으로 쿼리를 작성합니다.
- JPQL은 SQL과 달리 엔티티와 속성에 대해 동작하며, 이를 실제 데이터베이스 쿼리로 변환하는 추가 작업이 필요합니다.
- Native Query
- 반면, nativeQuery = true는 JPA를 통해 직접 SQL을 실행하는 방식으로, 데이터베이스에 특화된 최적화된 쿼리를 사용할 수 있습니다.
- 즉, JPA가 쿼리를 변환하는 과정 없이 SQL을 바로 실행합니다.
- 단순한 쿼리에서는 nativeQuery = true로 지정하더라도 성능 차이가 거의 없을 수 있습니다.
- 성능이 중요한 복잡한 연산이나 대량의 데이터를 다룰 때는 네이티브 쿼리가 더 나은 성능을 제공할 수 있습니다.
- 따라서 상황에 따라 nativeQuery를 사용할지 결정하는 것이 좋습니다.
'TIL,일일 회고' 카테고리의 다른 글
[TIL, 일일 회고] 2024.10.04 -JPQL -> native query (0) | 2024.10.04 |
---|---|
[TIL, 일일 회고] 2024.10.03 - GitHub Merge 이슈 재활용 (이슈번호와 제목을 함께 가져오는 방법) (1) | 2024.10.03 |
[TIL, 일일 회고] 2024.10.01 - SQL dialect is not configured 에러 해결하기 (0) | 2024.10.01 |
[TIL, 일일 회고] 2024.09.30 - Jmeter 한글 버전으로 변경하기 (0) | 2024.09.30 |
[TIL, 일일 회고] 2024.09.29 - Arrays.binarySearch메서드란❓ (0) | 2024.09.29 |