전산실 생존기

JPA 실서버에서 절대 피해야 할 설정 하나 - hbm2ddl.auto="create" persistence.xml 옵션 정리

살찐용 2025. 4. 24. 16:22

JPA와 Hibernate 설정 중 persistence.xml 파일 내 설정은 개발과 배포 환경 모두에 영향을 주는 핵심 요소입니다. 특히 실서버에서는 데이터베이스에 직접 영향을 주는 설정을 신중하게 다뤄야 합니다.

 

주요 설정 예시

<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.max_fetch_depth" value="3"/>
<property name="hibernate.jdbc.fetch_size" value="5"/>
<property name="hibernate.jdbc.batch_size" value="50"/>

 

 

주요 설정 설명

  • hibernate.dialect
    사용 중인 데이터베이스 종류에 맞는 방언(Dialect)을 지정합니다.
    예: Oracle, MySQL, PostgreSQL 등
  • hibernate.show_sql
    실행되는 SQL을 콘솔에 출력합니다 (디버깅용).
    개발 중에는 유용하지만, 실서버에서는 비활성화 권장.
  • hibernate.format_sql
    SQL 출력 시 들여쓰기 등 포맷팅 적용 (가독성 향상용).
  • hibernate.hbm2ddl.auto
    데이터베이스 스키마 자동 생성 및 검증 관련 가장 주의할 설정입니다.

 

hibernate.hbm2ddl.auto의 옵션별 의미

옵션설명
none 아무 동작도 하지 않음. 실서버에서 권장.
validate 엔티티와 실제 DB 스키마의 구조 일치 여부만 확인. 생성이나 수정은 하지 않음.
update 엔티티 변경사항을 반영하여 DB를 자동 수정. 테스트 환경에서는 편리하지만 실서버에서는 위험.
create 실행 시마다 기존 테이블 삭제 후 새로 생성 (데이터 전부 삭제됨).
create-drop 실행 시 create처럼 생성하고, 종료 시 모든 객체를 삭제.
auto (deprecated) 예전 버전 Hibernate에서만 사용 가능. 현재는 명시 필요.

 

실서버에서 절대 피해야 할 설정

<property name="hibernate.hbm2ddl.auto" value="create" />

 

  • 이 설정은 프로젝트 실행 시 기존 DB 테이블을 전부 삭제하고 새로 생성합니다.
  • 실서버에 적용할 경우 데이터베이스가 초기화되어 영구 손실 발생 가능성이 있습니다.

실서버 배포 시에는 반드시 validate 또는 none으로 설정하세요!

 

 

마무리 팁

  • persistence.xml은 프로젝트 실행 시점에 읽혀 설정이 즉시 반영되므로, 실서버에서는 반드시 신중히 관리하세요.
  • 설정 변경 시, 사전 테스트 환경에서 반드시 검증 후 적용을 권장합니다.