Fivefy 프로젝트/트러블슈팅

컬럼명 문제로 인한 DDL 오류 및 테이블 생성 실패 해결

sudaruuu 2026. 4. 13. 20:49

문제 상황

엔티티를 구현하고 애플리케이션을 실행하는 과정에서

테이블이 정상적으로 생성되지 않고 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 관점까지 함께 고려하는 습관을 가져야겠다고 느꼈다.