[JPA] dialect란?

JPA의 가장 큰 장점은 객체 매핑을 통해 자동으로 SQL 쿼리를 작성해 DB에 전달해준다.

그런데 DB의 종류는 한가지가 아닌 정말 다양한 DB의 벤더들이 있고 각 DB마다 SQL 문법이 다르다.

그럼 JPA는 어떻게 이 수많은 DB들에 우리가 사용하는 DB에 맞는 SQL을 작성하여 전달해줄까?

 

이 때 사용되는 것이 바로 "Dialect (방언)"이다.

dialect는 JPA 구현체(ex: hibernate)가 사용하는 SQL 방언을 추상화한 것으로, 각 DB마다 다른 SQL 문법을 처리해준다.

DB마다 맞은 SQL 언어를 JPA가 알아서 자동으로 인지하는 것이 아니라 다음과 같이 DB에 맞는 dialect를 설정해줘야한다.

 

application.yml
spring:
  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
#        dialect: org.hibernate.dialect.Oracle10gDialect
#        dialect: org.hibernate.dialect.H2Dialect
#        dialect: org.hibernate.dialect.PostgreSQLDialect

이렇게 자신이 사용하는 DB를 diaclect 옵션으로  설정하면 그 DB 문법에 맞는 SQL이 작성되어 전달된다.