BACKEND/JAVA & SPRING

MariaDB + JPA 연동

이-프 2023. 11. 1. 00:06

이번 Toy project #2에서는 Spring Boot, JPA, MariaDB를 연동해서 프로젝트 설계를 진행했다. 그 과정을 정리하여 다음 프로젝트를 대비하고자 한다. 🌱

Spring Boot + JPA + MariaDB

1. MariaDB 설치

2. MariaDB 공식 홈페이지의 다운로드 페이지 접속

https://mariadb.org/download/?t=mariadb&p=mariadb&r=11.3.0&os=windows&cpu=x86_64&pkg=msi&m=blendbyte

3. 버전, OS, 시스템 종류, 패키지 설정 후 Download

Version : Alpha, RC가 붙은 version을 제외한 최신 version

4. 다운로드한 msi 파일 실행

next → License Agreement 체크 → next → next

5. 사용자 환경 설정

  • ✅ Modify password for database user ‘root : root 계정에 대한 비밀번호 수정
  • Enable access from remote machines for ‘root’ user : 원격 시스템에서 ‘root’계정 접근에 대한 설정
  • ✅ Use UTF8 as default server’s character set : 기본 캐릭터셋(글자)를 UTF8로 설정

6. 데이터베이스 설정

  • Install as service : 서비스명 설정 (기본 설정 그대로 유지)
  • Enable networking : 포트번호 설정 (기본 설정 그대로 유지) ⇒ 우리팀은 3307로 다운받음
  • Buffer pool size : 버퍼 풀 크기 (기본 설정 그대로 유지)

7. 설치 완료

8. dependency 설정

JPA와 MariaDB 의존성을 추가한다.

implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' //JPA가 사용할 DB

9. application.yaml

DB 및 logging 설정을 추가한다.

spring:
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://localhost:3307/toy-project2?createDatabaseIfNotExist=true
    username: root
    password: 1234
  jpa:
    show-sql: true
    hibernate:
      ddl-auto: update
      jdbc:
        time_zone: Asia/Seoul
  config:
    import: application-secret.yaml

🚀 Trouble Shooting

⚠️ ERROR 발생 [Error creating bean with name 'entityManagerFactory']

  • Error 원문

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] due to: Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect') at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770) ~[spring-beans-6.0.13.jar:6.0.13] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598) ~[spring-beans-6.0.13.jar:6.0.13]

  • 프로젝트 실행시, 자동으로 해당 class의 이름을 갖는 DB table을 생성하기 위해 SpringBoot + JPA(Hibernate)를 사용했다.
  • 하지만, entityManagerFactory bean을 생성할 수 없다는 에러가 났다.
해결을 위해 시도한 방법

1️⃣ MariaDB Dialect 설정 변경

error 원문을 자세히 확인해보면, ‘Unable to determine Dialect without JDBC metadata (please set 'javax.persistence.jdbc.url', 'hibernate.connection.url', or 'hibernate.dialect')’이란 문장이 있다.

원인 : 이는 Spring Boot 컨테이너에서 MariaDb Dialect 설정을 찾지 못해서 에러가 생긴 것이다.

해결법 : application.yaml 에 아래 코드 추가

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect

spring:
	'''
  jpa:
    hibernate:
      show-sql: true
      ddl-auto: create
      properties:
        hibernate:
          dialect: org.hibernate.dialect.MariaDBDialect
          jdbc:
            time_zone: Asia/Seoul

⚡ Hibernate-entityManager와 관련된 내용은 다른 post로 대체한다.

2️⃣ createDatabaseIfNotExist=true 추가

1차 원인 변경 이후, java.sql.SQLSyntaxErrorException: Unknown database라는 새로운 에러가 나왔다. 이를 해결하기 위해 새로운 코드를 추가했다.

데이터베이스가 존재하지 않으면 자동으로 생성해주는 코드 추가한다.

원인 : mariaDB 에 접속할 때, DB가 생성되지 않았다.

해결법 : createDatabaseIfNotExist=true; 를 추가하여 DB를 생성한다.

🔗 참고 url

spring:
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://localhost:3307/toy-project2?createDatabaseIfNotExist=true
    username: root
    password: 1234

10. MairaDB 접속 방법

MariaDB설치할 때 같이 설치된 HeidiSQL 사용

🔗 참고 url

https://wecandev.tistory.com/71

https://kitty-geno.tistory.com/55


Uploaded by N2T

'BACKEND > JAVA & SPRING' 카테고리의 다른 글

JPA 상속 관계 매핑  (0) 2023.11.07
@Builder란?  (0) 2023.11.01
올바른 URI 설계 - Path Variable 과 Query Parameter  (1) 2023.10.31
@Controller vs @RestController  (0) 2023.10.31
카카오맵 open API - 키워드 검색하기  (0) 2023.10.31