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 |