먼저 설정부터 보겠습니다.
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의 AUTO가 IDENTITY 가 아닌 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/