[프로그래밍] JPA

[JPA] JPA 와 DB Dialect

JHVan 2024. 5. 1. 11:05

Database Dialect

데이터베이스 방언(Database Dialect)

데이터베이스 방언이란 특정 데이터베이스 시스템이 사용하는 SQL 언어의 특정 변형. 각기 다른 데이터베이스가 제공하는 SQL 명령어, 함수, 데이터 타입 등에는 차이가 있음.

 

쿼리 예시: 데이터 페이징 조회 (첫 번째 페이지의 첫 10개 항목 조회)

1. PostgreSQL Dialect: PostgreSQL은 LIMIT와 OFFSET 키워드를 사용한 페이징을 지원.

 
SELECT * FROM employees ORDER BY id LIMIT 10 OFFSET 0

2. MySQL/MariaDB Dialect: LIMIT와 OFFSET을 지원하지만, 간단한 쿼리에서는 OFFSET을 생략하고 다음과 같이 작성.

 
SELECT * FROM employees ORDER BY id LIMIT 0, 10

3. Oracle Dialect (12c 이후): FETCH FIRST와 OFFSET 구문을 사용하여 좀 더 직관적인 페이징 쿼리 작성.

 
SELECT * FROM employees ORDER BY id 
FETCH FIRST 10 ROWS ONLY OFFSET 0 ROWS

4. SQL Server Dialect: SQL Server에서는 OFFSET 및 FETCH NEXT을 사용한 페이징을 지원.

 
SELECT * FROM employees ORDER BY id
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY

이 쿼리들의 주요 차이점:

  • 페이징 처리: 대부분의 현대 데이터베이스 시스템은 LIMIT 및 OFFSET 구문을 사용하여 페이징을 처리 (PostgreSQL, MySQL, MariaDB 및 Oracle 12c 이후). 반면, Oracle 12c 이전 버전은 ROWNUM을 사용하는 복잡한 서브쿼리가 필요하며, SQL Server는 OFFSET 및 FETCH 구문을 사용.
  • 데이터베이스 특화 기능: 각 데이터베이스는 고유의 최적화 및 기능을 제공하여, 특정 작업을 더 효율적으로 수행할 수 있음. 적절한 데이터베이스 방언을 사용하면 JPA/Hibernate가 이러한 특화 기능을 최대한 활용하여 데이터베이스와의 상호작용을 최적화할 수 있음.

JPA에서는 이러한 차이를 추상화하여, 개발자가 특정 데이터베이스의 세부적인 구현 사항에 관여하지 않고도 다양한 데이터베이스에서 동작할 수 있는 애플리케이션을 작성할 수 있음.

JPA 구현체(예: Hibernate, EclipseLink 등)는 다양한 데이터베이스 방언을 지원함.

yaml 파일에서 JPA 의 DB dialect 설정

H2 Database:

 
spring:
  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect

 

MySQL:

 
spring:
  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL5Dialect

 

MariaDB:

 
spring:
  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MariaDB53Dialect

 

'[프로그래밍] JPA' 카테고리의 다른 글

[JPA] JPA의 기본 키 생성 전략  (0) 2024.05.04
[JPA] Entity Mapping  (0) 2024.05.04
[JPA] JPA의 영속성 컨텍스트  (0) 2024.05.03
[JPA] JPA?  (0) 2024.04.29
[JPA] 와 SQL  (0) 2024.04.23