HQL, Native SQL Query

calis_ws·2024년 1월 11일
0

Hibernate 에서는 HQLNative SQL Query 두 가지 주요 쿼리 방식을 제공한다.

HQL (Hibernate Query Language)

Hibernate 프레임워크에서 사용하는 객체 지향 쿼리 언어이다.

기본적으로 SQL과 유사하지만, DB 테이블이 아닌 Hibernate 에서 매핑한 자바 객체와 그 객체의 속성에 중점을 둔다. 따라서 HQL 쿼리는 엔터티 객체와 필드명을 사용하며, SQL 보다 객체 지향적인 접근을 갖고 있다.

특징

  • HQL 은 SQL 과는 달리 자바 객체를 대상으로 쿼리를 작성한다. 엔티티 객체와 그 객체의 속성을 사용하여 데이터를 조회하고 조작할 수 있다.

  • Hibernate 에서 제공하는 객체와 DB 간의 매핑 정보를 활용하여 객체 간의 관계를 이용하거나 객체의 프로퍼티를 사용하는 등의 풍부한 기능을 제공한다.

  • 다양한 DB 에 대해 Hibernate 가 알아서 적절한 SQL 로 변환하므로, DB 종속성이 낮다.

Native SQL Query

일반적으로 특정 데이터베이스 시스템에 특화된 SQL 쿼리를 의미한다.

JPQL 은 표준 SQL 이 지원하는 대부분의 문법과 SQL 함수들을 지원하지만 특정 DB 에 종속적인 기능은 지원하지 않는다. 이때, 네이티브 SQL 를 직접 작성하여 사용할 수 있다.

JPQL 이란 JPA 표준에 따라 개발된 객체 지향 쿼리 언어이며, JPA를 구현한 Hibernate 에서는 JPQL을 지원함

특징

  • 기본적으로 SQL 문법을 사용하므로, DB 에 특화된 SQL 구문을 직접 작성할 수 있다.

  • 직접 SQL 을 작성하는 것이기 때문에 사용 중인 DB 에 따라서 쿼리가 달라질 수 있다. 따라서 DB 종속성이 높아지며, 이는 이식성이 낮아질 수 있는 단점이 될 수 있다.

  • Native SQL Query 를 사용하면 Hibernate 의 객체-관계 매핑을 우회하게 된다. 따라서 객체지향적인 측면에서의 이점을 잃을 수 있다.

차이점

  1. 표현 방식
  • HQL : 객체 지향 쿼리 언어로, DB 테이블이 아닌 Hibernate 에서 매핑된 엔티티 객체와 필드를 대상으로 쿼리를 작성한다. 쿼리 작성은 Java 클래스와 속성에 기반하며, SQL 과는 구문적으로 다르다.

  • Native SQL Query : 기존 SQL 문법을 사용하며, 직접 DB 테이블 및 필드를 대상으로 쿼리를 작성한다. SQL 쿼리와 유사하게 작성되며, DB 에 종속적인 문법을 사용할 수 있다.

  1. 중점
  • HQL : 객체 지향 프로그래밍 개념에 기반하여 쿼리를 작성하는 데 중점을 두며, DB에 대한 세부 사항을 추상화한다.

  • Native SQL Query : 주로 SQL 데이터베이스와의 상호 작용에 직접적으로 중점을 두며, 특정 DB의 기능을 최대한 활용할 수 있다.

  1. 종속성
  • HQL : Hibernate 를 사용하면 어떤 DB 를 사용하더라도 동일한 HQL 쿼리를 사용할 수 있다. DB 종속성이 낮아지며, Hibernate 가 하부에서 SQL로 변환한다.

  • Native SQL Query : Native SQL Query는 직접 SQL 을 작성하기 때문에 특정 DB 종속성이 높다. DB 간에 쿼리를 이식하기 어렵고, 유지보수에 어려움이 있을 수 있다.

  1. 성능 및 최적화
  • HQL : Hibernate 는 HQL 쿼리를 자체적으로 최적화하고, 캐싱과 같은 기능을 제공하여 성능을 향상시킬 수 있다.

  • Native SQL Query : 개발자가 직접 SQL을 작성하므로 최적화 및 성능 향상에 대한 책임이 사용자에게 있다.


정리

HQL 은 OOP 와 DB 간의 매핑을 강조하며, DB 종속성을 낮추고 추상화한다.

반면 Native SQL Query는 직접 SQL 을 사용하여 DB 와의 상호 작용에 중점을 두고, 특정 DB 에 종속적인 쿼리를 작성할 수 있다.

두 방식의 선택은 프로젝트 요구 사항 및 개발자의 선호도에 따라 다를 수 있다.

profile
반갑습니다람지

0개의 댓글