JPA 사용법 2 (설정)

작성자 : 조회수 :

먼저 설정부터 보겠습니다.



Spring.datasouce

 

Driver-class-name : (어떤 디비를 사용할지 정해주는 설정입니다. Mysql,h2,oracle 등등이 있습니다. )

 

url : driver-class-name에 맞춰서 설정을 넣어줍니다.

 

아래 예시를 확인해보면

 

H2 url :

url: jdbc:h2:file:~/sampleDB/test_db;AUTO_SERVER=TRUE

 

MySQL url : jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Seoul

 

이처럼 자기가 원하는 DB의 이름과 url을 넣어주시면 됩니다.

 

Mysql url 구조를 본다면

 

jdbc:{어떤db인지}://{localhost:3306, 접속주소,url}/{사용 db이름}?serverTimezone=Asia/Seoul

 

이런 구조입니다.





Username password는 해당 DB의 아이디와 패스워드라고 생각하시면 됩니다!

 

이제 JPA: 부분을 보겠습니다.

 

Open-in-view : false, true (hibernate가 날리는 모든 쿼리문(ddl , dml)을 콘솔창에서 보여주는 옵션입니다.)

 

어플리케이션이 실행될 때 스캔을 통해서 @Entity 어노테이션이 명시한 클래스들을 찾아냅니다!

그리고 아래 설정을 통해서 데이터 베이스 초기화 전략을 선택합니다.

 

ddl-auto :

 

none : DB 기본값입니다. 아무것도 실행하지 않는다는 뜻 입니다.

 

Create-drop : 서버, 어플리케이션이 끝날 때  drop을 실행한다. 그리고 재실행할 때 create합니다.

(H2 DB가 가지고 있는 속성과 똑같다고 생각하면 됩니다.)

 

Create : 어플리케이션이 시작될 때 drop을 실행시킵니다.

(어플리케이션 종료를 해도 다시 시작하지 않는 한 DB에 자료가 남아있습니다.)

 

Update: 변경된 스키마들(테이블, 추가된 애트리뷰트들 등등)을 적용시킵니다.

 

Validate : 변경된 스키마가 있다면 update가 아닌 변경 점 만 출력해주고 어플리케이션을 종료시킵니다.

(즉 변경 점 체크)

 

(테스트 환경에서는 create, create-drop, update를 사용해도 괜찮지만

절대 실제 서비스 DB에서는 사용하면 안된 다는 글들이 있어 자세히 알아보려 합니다.)

 

사실 실 서버에서는 ddl-auto 기능은 none, validate를 사용한다고 합니다.

 

db설정은 직접 해당 DB에서 하는 게 좋다고 합니다!

 

JPA DB Naming(네이밍 전략)

 

스키마 이름, 애트리뷰트 이름을 자바 쪽에서 정할 때

 

DB에서는 어떻게 정할지 네이밍 전략을 설정하는 부분입니다.

 

사실 이 네이밍 전략은 공식 문서를 확인해본다면 공부 해야 할 점이 너무 많아서

 

일단 간단하게만 설명하려 합니다.




Physical-strategy : 물리적 이름 전략을 구성해봅니다. 일단 기본 설정은

 

 

공식 문서에 따르면

1차적으로 @Column , @Table 어노테이션을 통해서 논리적으로 이름을 정할 수 있습니다.

즉 아래 사진을 보시면

 

2차적으로 논리적 이름들을

앞서 말한 전력 설정을 통해 (물리적 명명 전략 계약에 의해 정의된 물리적 이름)으로 정할 수 있습니다.




명시적 명명 전략 : @Table , @Column 어노테이션을 붙여서 명시하는 명명전략이 있고

 

암시적 명명전략 : @Table , @Column 사용 없이 @Entity만 사용해 암시적으로 명명하는 전략

 

 

만약 명시적 명명 전략에 따라 @Table , @Column 어노테이션을 통해 이름을 정했다면

 

별다른 변경 과정 없이 DB에는 변수이름 그대로 따라 가겠지만

 

암시적 명명 전략이라면 설정 파일에 physical-strategy 따라서 변수 명이 정해집니다.

 

크게 두 가지만 말씀 드리겠습니다.

 

SpringPhysicalNamingStrategy(Default) -> 대소문자를 가려 underscore 형태로 변경합니다

 

Ex> 자바 코드 int studentName -> hibernate -> student_name

 

 

PhysicalNamingStrategyStandardImpl (제가 선택한 전략) -> 이름 그대로 따라갑니다.

 

Ex> 자바 코드 int studentName -> hibernate -> studentname

 

 

 

Use-new-id-generator-mappings : Hibernate ID 생성 전략을 그대로 따를지 말지를 선택하는 설정 구간입니다.

 

Hibernate 5.0에서는 MySQL AUTOIDENTITY 가 아닌 HIBERNATE의 테이블 생성 전략을 따라갑니다.

 

그래서 기존 AUTO, IDENTITY를 사용하려면 IDENTITY를 명시하거나 아래 사진처럼

 

생성전략 설정을 false로 해줘야 하는 것입니다.

 

 

Show-sql : sql 생성 문을 콘솔 창에 보여줍니다.

 

Hibernate.format_sql : 콘솔창에서 sql문을 보기 좋게 만들어주는 기능입니다. (true가 좋습니다.)




spring:
 
datasource:
   
driver-class-name: com.mysql.cj.jdbc.Driver
   
url: jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Seoul
   
username: {유저이름}
   
password: {유저 비밀번호}
 
jpa:
   
open-in-view: true
   
hibernate:
     
ddl-auto: create
     
naming:
       
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
     
use-new-id-generator-mappings: false
   
show-sql: false
   
properties:
     
hibernate.format_sql: true



이번 시간에는 설정과 사용법을 다루려 했으나 내용이 길어져서 다음 게시글에 다루도록하겠습니다.

 

레퍼런스

https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html

https://www.baeldung.com/hibernate-naming-strategy

https://pravusid.kr/java/2018/10/10/spring-database-initialization.html

https://nefertirii.github.io/jpa/hibernate-naming-strategies/