이 글에서는 스프링부트에서 JPA를 사용할 때 apllication.yml을 어떻게 설정해야 하는지에 대해 알아보도록 하겠습니다.
DB는 h2가 아닌 MySQL을 기준으로 다룬다는 점을 참고해주세요.
시작하기에 앞서 MySQL 연동이 되어 있어야 하므로, 연동 방법은 이글을 참고해주세요.
build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
runtimeOnly 'mysql:mysql-connector-java'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
apllication.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/example?serverTimezone=UTC&characterEncoding=UTF-8
username: root
password: 1234
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
open-in-view: false
show-sql: true
hibernate:
format_sql: true
ddl-auto: create
logging:
level:
org:
hibernate:
SQL: DEBUG
type:
descriptor:
sql:
BasicBinder: TRACE
- spring.datasource
- datasouce는 MySQL 설정과 관련된 것이므로 여기를 참고해주세요.
- spring.jpa.database-platform
- JPA 데이터베이스 플랫폼을 지정합니다.
- 예제에서는 MySQL InnoDB를 사용하도록 설정했습니다.
- spring.jpa.open-in-view
- OSIV(Open Session In View)는 웹 요청이 완료될 때까지 동일한 EntityManager를 갖도록 해줍니다.
- 스프링부트에서 OSIV가 기본값으로 true인데, 성능과 확장상 면에서 안좋다고 해서 false로 설정을 껏습니다. ( 참고 )
- spring.jpa.show-sql
- 콘솔에 JPA 실행 쿼리를 출력합니다.
- spring.jpa.hibernate.format_sql
- 콘솔에 출력되는 JPA 실행 쿼리를 가독성있게 표현합니다.
- spring.jpa.hibernate.ddl_auto
- 데이터베이스 초기화 전략을 설정합니다.
- none
- 아무것도 실행하지 않습니다.
- create
- SessionFactory가 시작될 때 기존테이블을 삭제 후 다시 생성합니다.
- create-drop
- create와 같으나 SessionFactory가 종료될 때 drop을 실행합니다.
- update
- 변경된 스키마만 반영합니다.
- validate
- 엔티티와 테이블이 정상적으로 매핑되었는지만 확인합니다.
- logging.level.org.hibernate.type.descriptor.sql
- SQL에서 물음표로 표기된 부분( bind parameter )을 로그로 출력해서 확인할 수 있습니다.
제가 주로 사용하는 설정은 위와 같습니다.
이 외에도 다양한 설정등이 있는데요, 개인적으로는 어노테이션으로 해결 가능한 것들은 어노테이션으로 처리하는 것을 좋아하기 때문에 설정을 잡지 않았습니다.
- spring.jpa.hibernate.naming
- 엔티티와 테이블에 대한 네이밍 전략
- spring.jpa.hibernate.use-new-id-generator-mappings
- auto increment에 대한 설정
이상으로 SpringBoot application.yml 파일에서 JPA를 설정하는 방법에 대해 알아보았습니다.
Hibernate, SpringBoot 버전마다 설정명, 기본값 등이 약간씩 차이가 있는 것 같네요.
[참고 자료]
https://jistol.github.io/java/2017/07/12/springboot-hibernate-sql-options/
https://www.popit.kr/스프링-부트-auto-configuration과-jpa하이버네이트-sql문-로깅