JPA?
JPA는 자바의 ORM 기술 표준으로 인터페이스의 모음입니다.
표준 명세를 구현한 구현체들(Hibernate, EclipseLink, DataNucleus)이 있고, JPA 표준에 맞춰 만들면 사용자는 언제든 원하는 구현체를 변경하며 ORM 기술을 사용할 수 있습니다.
이번 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도 같이 추가해야 합니다.
2) JPA 설정
필요한 라이브러리를 다 받은 뒤 JPA 설정 파일인 persistence.xml에 설정을 해줘야 합니다. 해당 파일은 표준 위치가 정해져 있기 때문에 /resources/META-INF/ 밑에 위치해야 합니다.
DBMS 연결 시 필요한 정보와 JPA 옵션들을 설정해 줍니다.
기본적으로 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 엔티티 클래스를 하나 생성합니다.
5) 데이터 입력, 조회 테스트
간단한 코드를 통해 생성되는 SQL을 확인해 보겠습니다.
Insert code
Insert SQL
Select code
Select SQL
Select result
CUBRID 11.2 버전 이상을 사용하는 경우
CUBRID 11.2 버전부터 user schema가 추가 되었습니다. (CUBRID11.2 릴리즈)
11.2 버전 이상을 사용하는 경우 추가로 JPA 설정을 2가지 더 해야합니다.
1) 테이블명 어노테이션 설정
엔티티에 유저 스키마 + "." + 테이블명으로 설정
@Table(name="[schema_name].[table_name]")
2) persistence.xml에 설정 추가
테이블명의 "."을 Hibernate가 자동으로 "_"로 변환시키기 때문에 "."을 그대로 사용하기 위해 파라미터 설정
<property property name="hibernate.naming.physical-strategy" value="org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl" />
SpringBoot, JPA 와 CUBRID 연동
SpringBoot를 이용하면 더 간단하게 JPA와 CUBRID를 연동할 수 있습니다.
이번에는 gradle과 yml로 CUBRID 11.2 버전으로 설정해 보겠습니다.
build.gradle
application.yml
olympic 엔티티
repository 생성
JpaRepository를 상속 받은 OlympicRepository 인터페이스를 만듭니다.
데이터 조회 테스트