인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

김민지님의 프로필 이미지
김민지

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

데이터베이스 스키마 자동 생성

운영장비에서 create, create-drop, update를 사용하면 안되는 이유

작성

·

879

4

create같은 경우엔 서버 시작시점에 table을 다 날려요 그얘기는  db를 server모드로 해놔도 껏다키면 데이터가 다 날라간다는얘긴가요?
update는 왜 안되는건가요?

답변 3

1

김민지님의 프로필 이미지
김민지
질문자

2. 제가 예전에 create로 했을때 기존 데이터가 없어지진 않았거든요
근데 없어져야할것같은데.. 제꺼가 잘못된건가요..?

출력되는 로그를 한 번 확인해보는 것이 좋을 듯 싶네요, 
drop table cascade 가 아니라 drop table로 되어있었다면

외래키 등으로 엮여있는 테이블이 먼저 drop 되지 않았을 경우에는

제대로 drop 이 안되었을 수 있습니다. 

1

김민지님의 프로필 이미지
김민지
질문자

1. 근데 새로운 컬럼을 추가했으면 기존데이터에는 해당 컬럼의 값이 null인게 맞지않나요..? 그럼 어떻게 돼야하는데요..?
2. create같은 경우엔 서버 시작시점에 table을 다 날려요 그얘기는  db를 server모드로 해놔도 껏다키면 데이터가 다 날라간다는얘긴가요?

1. 말씀하신 것처럼 그것이 로직 상으로는 맞습니다만, 추가한 컬럼에 관련해서 데이터를 검사하거나 가져오는 경우를 생각해봅시다.

이런 경우에 컬럼 추가 이후에 들어가는 데이터들이야 문제 없겠지만 기존 데이터들을 새로운 함수에서 사용할 때는 예측못한 문제가 생길 수도 있겠지요?

  실무를 진행하다보면 여러 사람들과 일을 하게 됩니다. 모든 사람들이 데이터 구조나 이전 작업내용을 파악하고 있는 게 아닙니다. 그렇기에 가급적이면 이러한 테이블 구조의 변경 등은 최소화되는 것이 좋습니다.

 

2. 답변을 드릴 수도 있지만 때로는 직접 한 번 해보는 편이 더 좋을 때도 있는 법입니다. 

 

감사합니다 

1

  • create : SessionFactory 시작시 스키마를 삭제하고 다시 생성
  • create-drop : SessionFactory 종료시 스키마를 삭제
  • update : SessionFactory 시작시 객체 구성와 스키마를 비교하여 컬럼 추가/삭제 작업을 진행함. 기존의 스키마를 삭제하지 않고 유지.
  • validate : SessionFactory 시작시 객체구성과 스키마가 다르다면 예외 발생시킴.

 

운영장비의 경우 기존에 이미 데이터가 있는 경우이기에 update를 설정함으로 인해서
테이블의 구성이 변경될 경우 예상치 못한 문제들이 발생할 수 있습니다. 

 

예를 들어서 기존에 데이터가 들어있던 컬럼이 alter 문으로 인해서 그 컬럼이 삭제되는 경우라던지

혹은 새로운 컬럼을 추가하였는데 기존에 있던 데이터들의 경우 해당 컬럼에 값을 넣어주지 않았기 때문에

null 값으로 설정이 되게 될텐데 이로 인해서 또 문제가 발생할 수도 있겠지요? 

김민지님의 프로필 이미지
김민지

작성한 질문수

질문하기