문제 상황
엔티티를 구현하고 애플리케이션을 실행하는 과정에서
테이블이 정상적으로 생성되지 않고 DDL 오류가 발생하였다.
특히 playlist_tracks, popular_charts 테이블 생성 과정에서
Hibernate가 DDL을 실행하지 못하고 예외가 발생하는 문제가 있었다.
Table 'fivefy_db.playlist_tracks' doesn't exist
Error executing DDL ...
원인 분석
문제를 확인해보니 공통적으로 컬럼명에서 문제가 발생하고 있었다.
1. index 컬럼명 사용
private Integer index;
- index는 MySQL 예약어이다.
- Hibernate가 테이블 생성 시 SQL 문법 오류가 발생하였다.
- 결과적으로 테이블 생성 자체가 실패하였다.
2. rank 컬럼명 사용
private Integer rank;
- rank 컬럼을 사용할 경우 테이블이 정상적으로 생성되지 않았다.
- 정확한 원인은 명확히 파악하지 못했지만, DB 내부 처리 또는 예약어와 관련된 문제로 추정된다.
핵심 원인
컬럼 네이밍 시 DB 예약어 및 SQL 레벨의 제약을 고려하지 못한 것이 원인이었다.
해결 과정
문제 원인을 확인한 후, 컬럼명을 다음과 같이 수정하였다.
PlaylistTrack
- private Integer index;
+ private Integer position;
- 예약어 충돌 방지를 위해 position으로 변경
PopularChart
- private Integer rank;
+ private Integer chartRank;
- 보다 명확한 의미의 컬럼명으로 변경
- 컬럼명 변경 이후 테이블이 정상적으로 생성되는 것 확인
결과
- 애플리케이션 실행 시 테이블이 정상적으로 생성됨
- DDL 오류가 더 이상 발생하지 않음
- playlist_tracks, popular_charts 테이블 생성 완료
결론
컬럼 네이밍은 단순한 코드 스타일이 아니라, DB 동작에 직접적인 영향을 주는 요소이다.
예약어와 DB 제약을 고려하지 않으면 DDL 오류로 이어질 수 있으며,
엔티티 설계 시 DB 관점까지 함께 고려하는 것이 중요하다.
느낀 점
이번 경험을 통해 컬럼 네이밍이 단순한 코드 스타일이 아니라,
DB 동작과 직접적으로 연결되는 중요한 요소라는 것을 체감할 수 있었다.
특히, 평소에는 변수명처럼 가볍게 생각했던 컬럼명이 DDL 오류로 이어질 수 있다는 점이 인상 깊었다.
앞으로는 엔티티를 설계할 때 코드 관점뿐만 아니라 DB 관점까지 함께 고려하는 습관을 가져야겠다고 느꼈다.
'Fivefy 프로젝트 > 트러블슈팅' 카테고리의 다른 글
| 스케줄러 기반 로직 테스트 설계와 운영 환경 고려 (0) | 2026.04.16 |
|---|---|
| 커버리지 100% 대신 의미 있는 테스트를 선택한 이유 (1) | 2026.04.15 |
| 동시 요청에서 발생할 수 있는 중복 데이터 문제와 DB 유니크 제약으로 해결 (2) | 2026.04.14 |
| 서비스와 엔티티의 검증 책임 분리 (1) | 2026.04.10 |
| 트랙 재생 상태 설계 개선 - SKIP 상태 도입 (0) | 2026.04.09 |