본문 바로가기
카테고리 없음

ddl-auto 옵션, 정확히 알고 사용하자

by asdft 2024. 1. 15.

내가 JPA에 대해서 익숙하지 않을 때, DB인 MySQL과 연동하려고 하면 테이블과 관련된 오류들이 많았다.

그래서 이를 위해 어려움을 겪을 모든 개발자들을 위해 조금이나마 도움이 됐으면 하는 마음에서 이 글을 쓰게 됐다.

 

 

ddl-auto 옵션 종류


  • create: 애플리케이션 빌드 시, 기존테이블 삭제 후 다시 생성 (DROP + CREATE)
  • create-drop: create와 같으나 종료시점에 테이블 DROP
  • update: 변경분만 반영 (운영DB에서는 사용하면 안됨)
  • validate: 엔티티와 테이블이 정상 매핑되었는지만 확인
  • none: 사용하지 않음(사실상 없는 값이지만 관례상 none이라고 한다.

 

주의할 점


  • 운영 장비에서는 절대 crate, create-drop, update 사용하면 안된다.
  • 개발 초기 단계는 create 또는 update
  • 테스트 서버는 update 또는 validate
  • 스테이징과 운영 서버는 validate 또는 none

 

여기에서 유의해야 할 점은,

1. 개발 초기 단계 즉, 엔티티를 만들고 있는 과정에서 이를 통해 MySQL에서 테이블을 생성하는 시점에서, ddl-auto: create 로 해야한다.

: 이를 validate로 할 경우, 아직 테이블이 만들어지지 않은 상태에서 엔티티와 테이블을 비교하게 되어, 엔티티와 DB의 테이블간, 매치가 안되어 오류가 발생할 수 있다.

 

2. MySQL의 명령어와 똑같이 엔티티의 name을 짓지는 않았는지 고려해야 한다.

: 나의 경우 주문 엔티티의 이름을 order로 지어 Mysql에서 테이블 생성 시 오류가 생겼던 적이 있었다. order의 경우 MySQL의 명령어 중 하나이므로, 따로 @Table(name = "orders")를 통해 테이블명을 지정해 주어야 한다.

 

개발 초기에는 데이터의 양도 적고, 실행하는데 큰 문제가 없어 이를 간과하고 사용할 수 있겠지만, 다뤄야할 데이터의 양이 많아지고 로컬,운영,테스트 서버환경을 분리해서 사용하다 보면 얼마나 중요한지 깨닫게 될것이다.

 

ex) 로컬에서 'ddl-auto: create'로 설정된 상태로 운영서버를 붙여 돌릴경우 실 사용자의 데이터들이 들어있는 DB의 테이블이 날아가는 불상사가 일어날 수 있다.