[JPA] ddl-auto=create 테이블 drop 에러가 난다면

2024. 6. 19. 18:42JPA

 

spring.jpa.hibernate.ddl-auto=create

 

create는 테이블을 새로 생성해주고, update는 기존 테이블의 변경 사항을 수정해준다고 단순히 생각했다. 처음에 엔티티를 등록할 때 테이블 생성을 위해 create를 사용한 후 쭉 update 설정을 이용했다. 그러다가 테이블의 변경 사항을 적용하는 과정에서 create 설정을 사용, 에러를 마주하게 됐다. 

 

ddl-auto=create 는 기존에 있는 테이블을 삭제하는 작업을 거친 후 새로 생성한다. 

ddl-auto=create-drop 은 create와 동일하지만 애플리케이션이 종료될 때 테이블을 삭제한다.

ddl-auto=update 는 모든 변경사항이 아닌, 새로운 테이블과 컬럼의 변경사항만 반영한다. 기존 컬럼의 타입 변환 X

ddl-auto=validate 는 엔티티 클래스와 테이블이 정상적으로 매핑되는지 검사한다. 예외 발생 시 종료.

ddl-auto=none 은 아무런 변화 X

 

create는 drop할 테이블을 찾지 못하면 에러를 발생시킨다. 테이블 이름을 수정하거나, 특정 테이블을 sql 쿼리문으로 삭제했지만 엔티티 클래스는 남아 있는 경우. 엔티티 클래스와 테이블 간의 불일치.

ddl-auto 속성을 제대로 이해하지 못한 상태에서 에러를 잡으려 했기에 많은 시간 동안 create >> update로 바꾸면 되는 간단한 문제를 쉽게 해결하지 못했다. 

쿼리문을 일일히 작성해주지 않는 것은 큰 장점이 될 수 있지만, 알고 쓰지 않는다면 큰 피해를 초래한다. 정말 조심해야하는 운영 서버에서는 auto 기능을 최대한 배제해야 할 것이다. 변경 사항을 적용하려할 때 직접 쿼리문을 작성한다면, 적어도 키보드를 뚝딱거리면서 한 번 더 내가 쓴 코드의 영향력을 생각해보지 않을까? 손이 많이 갈수록 디테일해진다.