[개발 일기] 2025.06.02 - JPQL과 Native Query 차이

2025. 6. 2. 13:09·개발 일기

💡 개요

 

Spring JPA 환경에서 복잡한 쿼리를 작성해야 할 때는 대표적으로 JPQL과 Native Query를 사용할 수 있다.

 

 

물론 QueryDSL도 있지만, QueryDSL은 별도의 커스텀 리포지토리 구현이 필요하다.

 

 

따라서 단 한 번만 복잡한 쿼리가 필요한 경우에는 JPQL이나 Native Query를 사용하는 것이 더 효율적일 수 있다.

 

 

그렇기 때문에 오늘은 이 두 기술, JPQL과 Native Query의 차이점을 정리해 보자.

 

 

 

🛠️ JPQL

 

JPQL은 JPA에서 제공하는 쿼리 언어로, 데이터베이스의 테이블이 아닌 엔티티 객체를 기준으로 쿼리를 작성하는 방식이다.

@Query("SELECT m FROM Member m WHERE m.name = :name")
List<Member> findByName(@Param("name") String name);

 

문법을 보면 SQL과 유사하지만, 자세히 보면 엔티티의 필드명을 사용한다는 것을 알 수 있다.

 

 

이러한 특징 때문에 JPQL은 DB에 독립적인 쿼리를 작성할 수 있기 때문에 유지보수가 쉬운 장점이 있다.

 

 

하지만 어쨋든 JPQL은 JPA에서 제공되는 쿼리 기술이기 때문에 복잡한 서브쿼리나 성능 향상용 쿼리 사용엔 제약이 있다.

 

 

 

🛠️ Native Query

 

Native Query는 이름 그대로 실제 DB에서 사용하는 SQL 문법 그대로 쿼리를 작성하는 방식이다.

 

@Query(value = "SELECT * FROM member WHERE name = :name", nativeQuery = true)
List<Member> findByName(@Param("name") String name);

 

이 방식은 JPA의 추상화된 구조를 벗어나기 때문에, 복잡한 조인이나 성능 최적화를 위한 DB 고유 기능을 자유롭게 사용할 수 있다는 장점이 있다.

 

 

예를 들어 LIMIT, UNION, 윈도우 함수 등을 자유롭게 사용할 수 있다.

 

 

하지만 만약 SQL 언어를 사용하는 RDB에서 No SQL을 사용하는 DB로 변경한다면 모든 Native Query을 수정해야 하기 때문에 유지 보수에 불리한 단점이 있다.

 

 

뿐만 아니라 쿼리에 오류가 있어도 컴파일 시점에 잡히지 않기 때문에 런타임 에러 가능성도 있다. (SQL에 종속적)

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.06.04 - H2는 Point 타입을 사용할 수 없다!!  (1) 2025.06.04
[개발 일기] 2025.06.03 - 값 검증을 응용 계층에서??  (0) 2025.06.03
[개발 일기] 2025.06.01 - 제품과 리뷰의 관계  (1) 2025.06.01
[개발 일기] 2025.05.31 - 자바에서 HTTP 요청 보내는 연습좀 하자  (0) 2025.05.31
[개발 일기] 2025.05.29 - 기능 개발은 정방향, 최종 병합은 역방향  (0) 2025.05.29
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.06.04 - H2는 Point 타입을 사용할 수 없다!!
  • [개발 일기] 2025.06.03 - 값 검증을 응용 계층에서??
  • [개발 일기] 2025.06.01 - 제품과 리뷰의 관계
  • [개발 일기] 2025.05.31 - 자바에서 HTTP 요청 보내는 연습좀 하자
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.06.02 - JPQL과 Native Query 차이
상단으로

티스토리툴바