환경
- Java 11
- Spring Boot 2.7.0
- AWS Aurora MySQL 3.01.0
- MySQL 8.0.23
- JPA
- Lombok
소스
plugins {
id 'org.springframework.boot' version '2.7.0'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'com.me.my-project'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
implementation 'org.mariadb.jdbc:mariadb-java-client:2.7.5'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
spring:
application.name: my_project
datasource:
driver-class-name: org.mariadb.jdbc.Driver
username: user
password: pw
jpa.database-platform: org.hibernate.dialect.MySQL8Dialect
---
spring:
config.activate.on-profile: production
datasource:
url: jdbc:mariadb:aurora//localhost:3306/my_project
---
spring:
config.activate.on-profile: local
datasource:
url: jdbc:mariadb://localhost:3306/my_project?allowPublicKeyRetrieval=true&useSSL=false
설정
build.gradle
jdbc
mysql-connector-java, mariadb-java-client, aws-mysql-jdbc 세 가지 선택지가 있음
mariadb-java-client
- Aurora 환경에서의 Failover를 지원함
- Aurora의 파이프라이닝 호환 문제로 3버전에서는 기능 지원 안함
- 해서 2.x 최신 버전인 2.7.5 사용
aws-mysql-jdbc
- 동일하게 Aurora Failover 지원
- 1.0.0 릴리즈가 22년 3월에 되어, 안정화 이슈가 있을 수 있을듯
application-local.yml
datasource.driver-class-name
- 보통 연결 URL 기반으로 Spring Boot가 자동 세팅하므로 명시하지 않아도 됨
- MySQL이 아닌 MariaDB Driver를 사용하므로 명시
datasource.url
- 드라이버 정보 명시 :
jdbc:mysql//, jdbc:mariadb//
jdbc:mariadb:aurora// aurora 모드 옵션을 붙여 Aurora Failover 기능 활성화
- 옵션
- MySQL 8버전부터
caching_sha2_password plugin이 디폴트임
allowPublicKeyRetrieval=true&useSSL=false 옵션을 주어, insecure connection을 허용
- 권장되지 않으나, 로컬 환경이므로 사용
- DBMS마다 SQL 문법이 다름
- Dialect : Hibernate가 DBMS에 알맞은 SQL문을 생성하도록 해줌
- MySQL 8 버전인 경우
MySQL8Dialect, MySQLDialect 의 선택지가 있음
MySQL8Dialect : MySQLDialect 에 추가로 몇가지 메소드들을 지원함
- Spring Boot 2.7.0
→ spring-boot-starter-data-jpa 2.7.0
→ hibernate-core 5.6.9.FInal
- Hibernate 6.x 버전부터
MySQL8Dialect 는 deprecated됨 (MySQLDialect 사용)
- 해서
MySQL8Dialect 를 사용