[Spring JPA ] 데이터베이스 방언(Dialect) 이란?

최동근·2023년 2월 8일
0

JPA

목록 보기
13/13

안녕하세요 오늘은 스프링 JPA 에서 핵심적인 기능을 하는 데이터베이스 방언(Dialect) 에 대해 알아보겠습니다 👨‍💻

👾 ANSI SQL

SQL(Structured Query Language) 이란 관계형 데이터베이스에 정보를 저장하고 처리하기 위한 프로그래밍 언어입니다.

데이터베이스를 조금이라도 공부해보았더라면 다양한 RDBMS Vendor 가 존재한다는 것을 알 수 있습니다. MS-SQL, Oracle, MySQL,PostgreSQL 등 다양한 데이터베이스 공급업체가 있습니다.
이렇게 다양한 DBMS Vendor 가 존재하는 만큼 서로 자신만의 고유한 SQL 을 가집니다.
이에 따라 표준화된 SQL 에 대한 필요성이 생겼으며 미국 표준 협회(ANSI) 에서 ANSI SQL 을 통해 표준화된 SQL 을 정립하였습니다 🧑🏼‍💻

  • ANSI SQL 특징

    1. 표준 SQL문 이기 때문에 특정 DBMS 종류에 제약을 받지 않습니다.
    2. 가독성이 일반 Query 보다 좋습니다.

👾 JPA 데이터베이스 방언

스프링 JPA의 동작 원리를 간단하게 떠올려볼까요?
스프링 JPA를 사용하여 데이터베이스를 접근 및 관리하는 경우 어플리케이션이 직접 JDBC 레벨에서 SQL 을 작성하는 것이 아니라 JPA 가 직접 SQL 을 작성하고 실행하는 원리입니다 ❗️

그런데 여기서 문제가 발생합니다.
개발자가 사용하기로 결정한 RDBMS 마다 ANSI SQL를 표준으로 두고 있다 하지만 자신만의 독자적인 기능을 가지며 이를 방언(Dialect) 라고 합니다 🧑🏼‍💻
이때문에 데이터 타입, 함수명,페이징 처리 등 다양한 부분에서 차이가 발생하게 됩니다.
이때 스프링 JPA 를 이용한 개발 시 해당 RDBMS 에 맞게 SQL 을 작성해야 합니다.
다른 경우를 생각해볼까요?
만약 기존에 Oracle DB 을 데이터베이스로 사용하다가 고객의 요구에 따라 MS-SQL 에 맞게 추가로 개발하려는 상황이라면 어떨까요? 아마 엄청난 비용이 들어갈 것입니다.

하이버네이트를 포함한 대부분의 JPA 구현체들은 이런 문제를 해결하기 위해 다양한 데이터베이스 방언 클래스를 제공합니다 👍
개발자는 스프링 JPA가 제공하는 표준 문법에 맞추어 개발을 하면 되고 특정 데이터베이스에 의존적인 SQL 은 설정한 데이터베이스 방언이 처리해줍니다.

이렇게 추상화된 방언 클래스를 사용함으로써, 개발자는 데이터베이스에 의존적인 개발을 지양할 수 있으며 혹여나 고객의 요구 사항으로 데이터베이스를 변경할시 간단히 데이터베이스 방언만 변경해주면 됩니다 💪

👾 Hibernate 데이터베이스 방언 종류

  • H2 : org.hibernate.dialect.H2Dialect

  • Oracle 10g : org.hibernate.dialect.Oracle10gDialect

  • MySQL : org.hibernate.dialect.MySQL5InnoDBDialect

    👨‍🎨 실제 H2 데이터베이스 방언 설정 예시(application.yml)

profile
비즈니스가치를추구하는개발자

0개의 댓글