[TIL] Hibernate Dialect(MySQL8Dialect) 오류 스키마 DDL 경고

2026. 2. 8. 23:28·IL/TIL

1) 문제 상황

Spring Boot 실행 시 아래 오류로 애플리케이션이 기동되지 않음.

  • 에러 핵심 로그
 
StrategySelectionException: Unable to resolve name [org.hibernate.dialect.MySQL8Dialect] Caused by: ClassNotFoundException: org.hibernate.dialect.MySQL8Dialect

추가로 DB 관련 오류도 함께 발생함.

 
Unknown database 'posting'

또 다른 실행에서는 아래 DDL 관련 오류/경고가 출력됨.

 
CommandAcceptanceException: Error executing DDL "alter table comments drop foreign key ..." Table 'posting.comments' doesn't exist

2) 원인 분석

원인 A — Hibernate 버전 변경으로 Dialect 클래스명이 달라짐

프로젝트 의존성에서 Hibernate가 7.x(예: 7.2.1.Final) 로 올라간 상태였고,
기존 예제(주로 Hibernate 5.x 기반)에서 쓰던 org.hibernate.dialect.MySQL8Dialect가 더 이상 존재하지 않아 ClassNotFound가 발생했다.

즉, 구버전 튜토리얼 설정을 신버전에 그대로 적용한 것이 원인.


원인 B — DB 자체는 ddl-auto=create로 생성되지 않음

spring.jpa.hibernate.ddl-auto=create는 테이블 생성 옵션이지,
posting 같은 데이터베이스(schema) 자체를 만들어 주지 않는다.

그래서 DB가 없는 상태면:

 
Unknown database 'posting'

이 발생한다.


원인 C — 스키마 드롭 과정에서 “없는 테이블”에 FK 드롭 시도

ddl-auto=create는 시작 시점에 기존 스키마 정리를 하면서
외래키를 드롭하려고 시도할 수 있는데, DB가 새로 생성된 상태라 테이블이 없으면

 
Table 'posting.comments' doesn't exist

같은 메시지가 뜰 수 있다.

하지만 로그를 보면 이후에 실제로는:

  • drop table if exists ...
  • create table ...
  • alter table ... add constraint ...
  • 그리고 Started ... 로 정상 기동

까지 진행되므로 대부분 치명적인 실패가 아니라 “초기화 단계의 경고성 로그” 인 경우가 많다.


3) 해결 방법

해결 1 — Dialect 설정 수정(또는 삭제)

기존 설정:

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

수정(권장):

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

또는 아예 dialect 라인을 삭제하고(자동 감지) 사용해도 됨.


해결 2 — 데이터베이스 생성

MySQL에서 DB 생성:

CREATE DATABASE posting

해결 3 — DDL 옵션 조정(선택)

실습에서 로그가 거슬리거나, 매번 드롭/생성을 원하지 않으면:

  • 변경 사항을 유지하고 싶을 때(드롭 없음):
 
spring.jpa.hibernate.ddl-auto=update
  • 실행할 때 생성 + 종료할 때 드롭(실습용):
 
spring.jpa.hibernate.ddl-auto=create-drop

4) 결과

  • MySQL8Dialect ClassNotFound 오류 해결
  • DB 연결 성공
  • 테이블 및 FK 생성 정상 완료
  • 애플리케이션 정상 기동 확인 (Started PostingApplication ...)

5) 배운 점 / 예방책

  • 버전이 바뀌면 설정 키/클래스명이 바뀔 수 있다. (특히 Hibernate Dialect)
  • ddl-auto=create는 DB(schema) 생성이 아니라 테이블 생성이다.
  • 실습에서는 dialect를 직접 박아두지 말고 자동 감지가 덜 말썽이다.
  • application.properties에 DB 비밀번호를 그대로 두면 위험 → 실무에서는 .env 또는 환경변수로 분리.
저작자표시 비영리 (새창열림)

'IL > TIL' 카테고리의 다른 글

20260211 [TIL] 외래키로 매핑되어 있는 부모 테이블 row 삭제  (0) 2026.02.11
20260210 [TIL]  (0) 2026.02.10
20260129 [TIL] - Spring 입문 시작에서  (0) 2026.01.29
20260126 [TIL] - 자료구조 및 알고리즘 INTRO  (0) 2026.01.26
20260113 [TIL] 10 - Flowchart  (0) 2026.01.13
'IL/TIL' 카테고리의 다른 글
  • 20260211 [TIL] 외래키로 매핑되어 있는 부모 테이블 row 삭제
  • 20260210 [TIL]
  • 20260129 [TIL] - Spring 입문 시작에서
  • 20260126 [TIL] - 자료구조 및 알고리즘 INTRO
견지
견지
개발로 개발하는지 새발로 개발하는지 내가 개인 건지 새인 건지 사람인 건지
  • 견지
    개발새발
    견지
  • 전체
    오늘
    어제
    • 분류 전체보기 (20)
      • ... (0)
      • IL (20)
        • TIL (16)
        • WIL (4)
        • MIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    JSP
    oracle
    CSS
    JavaScript
    git
    DB
    HTML
    java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
견지
[TIL] Hibernate Dialect(MySQL8Dialect) 오류 스키마 DDL 경고
상단으로

티스토리툴바