2024. 6. 19. 18:42ㆍJPA
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 기능을 최대한 배제해야 할 것이다. 변경 사항을 적용하려할 때 직접 쿼리문을 작성한다면, 적어도 키보드를 뚝딱거리면서 한 번 더 내가 쓴 코드의 영향력을 생각해보지 않을까? 손이 많이 갈수록 디테일해진다.
'JPA' 카테고리의 다른 글
[JPA] N+1 문제? 이렇게 많은 쿼리문이 수행될 줄 몰랐지 (0) | 2024.06.21 |
---|---|
[JPA] FetchType.EAGER의 남용과 순환 참조 그리고 N+1 (0) | 2024.06.20 |
[JPA] setter와 getter 맘대로 쓰면 안 되는 거야?? (0) | 2024.06.17 |