본문 바로가기

Spring&IntelliJ

방언(dialect)(hibernate.dialect) 이란?

 

방언이란? 번역처리 기능. 특정 프로그램(데이터베이스)에서만 쓰이는 기능이나 문법을 처리해 주는자(JPA)입장에서 바라본 번역처리 기능. dialect는 처리자의 옵션이다.

🧐 Dialect란?

JPA의 주요 특징인 "데이터베이스에 종속적이지 않다"를 쓰기위해 hibernate.dialect 를 쓴다.

hibernate의 dialect로 데이터베이스 방언(언어, 사투리)을 설정할 수 있다.

서로 다른 데이터베이스 문법, 타입 등을 알아서 처리해주므로 개발자는 데이터베이스를 바꾸더라도 코드를 크게 바꾸지 않게 된다.

 

 

가변 문자 비교

MySQL : VARCHAR

Oracle : VARCHAR2

 

문자열 자르는 함수

SQL 표준 : SUBSTRING()

Oracle : SUBSTR()

 

이렇게 SQL 표준과 다르거나 특정 데이터베이스만의 고유 기능을 JPA에서는 방언(Dialect)라고 한다.

개발자는 JPA가 제공하는 표준 문법에 맞춰 사용하면 되므로, 특정 DB에 의존적인 SQL은 Dialect가 처리해준다.

DB가 변경되어도 코드를 변경할 필요없이 Dialect만 바꿔주면 된다.

 

 

 

🧐 그렇다면 어떻게 바꿀까?

하이버네이트는 다양한 데이터베이스 방언을 제공한다. 대표적으로 다음 3가지가 있다.

  • H2 : org.hibernate.dialect.H2Dialect
  • 오라클 10g : org.hibernate.dialect.Oracle10gDialect
  • MySQL : org.hibernate.dialect.MySQL5InnoDBDialect

더 보고 싶다면 Hibernate ORM 공식문서를 참고하자

 

그래서 Maven 구조로 확인해보면 persistenc.xml파일에 있는 사진의 빨간색 부분을 참고하면 된다.

파란색 부분처럼 H2를 쓴다면 저렇게 쓰고, Oracle10g를 쓴다면 중간것을 주석풀고 나머지를 지우면 된다.