나머지...

JPA와 CUBRID 연동 가이드

by 김동민 posted Feb 22, 2023

JPA?

JPA는 자바의 ORM 기술 표준으로 인터페이스의 모음입니다.
표준 명세를 구현한 구현체들(Hibernate, EclipseLink, DataNucleus)이 있고, JPA 표준에 맞춰 만들면 사용자는 언제든 원하는 구현체를 변경하며 ORM 기술을 사용할 수 있습니다.

jpa_interface.jpg

이번 CUBRID 연동 가이드에서는 대표적으로 많이 사용하는 Hibernate를 사용하여 작성했습니다.

 

 

버전 정보

SpringBoot: 2.7.8

Hibernate: 5.6.14.Final

Java: 11
CUBRID: 11.0.10, 11.2.2

 

 

JPA와 CUBRID 연동

1) 라이브러리 설정

Maven 프로젝트에 JPA(Hibernate), CUBRID JDBC 라이브러리를 넣기 위해 pom.xml에 설정을 합니다.

CUBRID JDBC를 받기 위해 repository도 같이 추가해야 합니다.

pom_xml.png

 

 

2) JPA 설정

필요한 라이브러리를 다 받은 뒤 JPA 설정 파일인 persistence.xml에 설정을 해줘야 합니다. 해당 파일은 표준 위치가 정해져 있기 때문에 /resources/META-INF/ 밑에 위치해야 합니다.

persistence_repository.png

 

DBMS 연결 시 필요한 정보와 JPA 옵션들을 설정해 줍니다.

persistence_xml.png

기본적으로 driver, url, user, password를 설정하고, 방언(dialect)도 필수적으로 설정해야 합니다.

DBMS가 제공하는 SQL 문법과 함수들이 조금씩 다르기 때문에 JPA가 어떤 DBMS의 방언(dialect)를 사용해야 할지 알아야 하기 때문입니다.

 

추가적으로 필수 설정은 아니지만, SQL 출력과 관련된 옵션들을 추가했습니다.

- show_sql: Hibernate가 만든 모든 SQL을 콘솔에 보여준다.

- format_sql: 로그와 콘솔에 SQL을 보기 편하게 포맷해서 보여준다.

- use_sql_comments: SQL 내부에 주석을 생성하여 보여준다.

그 외 옵션들은 hibernate user guide를 통해 확인할 수 있습니다.

 

 

3) 테이블 스키마

demodb의 olympic 테이블을 사용합니다.

=== <Help: Schema of a Class> ===

 

 <Class Name>

     olympic

 <Attributes>

     host_year            INTEGER NOT NULL

     host_nation          CHARACTER VARYING(40) NOT NULL

     host_city            CHARACTER VARYING(20) NOT NULL

     opening_date         DATE NOT NULL

     closing_date         DATE NOT NULL

     mascot               CHARACTER VARYING(20)

     slogan               CHARACTER VARYING(40)

     introduction         CHARACTER VARYING(1500)

 <Constraints>

     PRIMARY KEY pk_olympic_host_year ON olympic (host_year)

 

 

4) 엔티티 클래스 생성

olympic 테이블의 컬럼들과 동일하게 olympic 엔티티 클래스를 하나 생성합니다.

olympic_entity.png

 

 

5) 데이터 입력, 조회 테스트

간단한 코드를 통해 생성되는 SQL을 확인해 보겠습니다.

 

Insert code

jpa_insert_code.png

Insert SQL

jpa_insert_sql.png

 

 

Select code

jpa_select_code.png

Select SQL

jpa_select_sql.png

Select result

jpa_select_result.png

 

 

 

CUBRID 11.2 버전 이상을 사용하는 경우

CUBRID 11.2 버전부터 user schema가 추가 되었습니다. (CUBRID11.2 릴리즈)

11.2 버전 이상을 사용하는 경우 추가로 JPA 설정을 2가지 더 해야합니다.

 

1) 테이블명 어노테이션 설정

엔티티에 유저 스키마 + "." + 테이블명으로 설정

@Table(name="[schema_name].[table_name]")

olympic_entity_11_2.png

 

2) persistence.xml에 설정 추가

테이블명의 "."을 Hibernate가 자동으로 "_"로 변환시키기 때문에 "."을 그대로 사용하기 위해 파라미터 설정

<property property name="hibernate.naming.physical-strategy" value="org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl" />

persistence_11_2_xml_localhost_red_box.jpg

 

 

 

SpringBoot, JPA 와 CUBRID 연동

SpringBoot를 이용하면 더 간단하게 JPA와 CUBRID를 연동할 수 있습니다.

이번에는 gradle과 yml로 CUBRID 11.2 버전으로 설정해 보겠습니다.

 

build.gradle

build_gradle.png

 

application.yml

application_yml.png

 

 

olympic 엔티티

spring_olympic_entity.png

 

 

repository 생성

JpaRepository를 상속 받은 OlympicRepository 인터페이스를 만듭니다.

spring_repository.png

 

 

데이터 조회 테스트

spring_select_result.png