상세 컨텐츠

본문 제목

[스프링] Hibernate DDL AUTO 주의할점(단점)

Backend

by choiDev 2023. 12. 24. 10:55

본문

Hibernate의 hibernate.hbm2ddl.auto 속성은 데이터베이스 스키마를 자동으로 생성, 갱신 또는 유지보수하는 데 사용됩니다.

이 속성은 개발 및 테스트 단계에서 편하게 사용 가능하지만, 프로덕션 환경에서는 주의해야 합니다.

 

용어사전

DDL(Data Definition Language) : 데이터 정의어라고 부르며 데이터를 생성, 수정, 삭제등 데이터의 전체 골격을 결정하는 역할의 언어이다.

 

DDL auto 왜 주의해야되는 걸까?

  1. 데이터 손실의 위험:
    • DDL 자동 생성이 활성화되면 Hibernate는 데이터베이스 스키마를 자동으로 업데이트합니다. 이는 기존 테이블을 수정하거나 삭제할 수 있습니다. 따라서 프로덕션 데이터베이스에서 사용하면 의도치 못한 CRUD가 벌어저 큰 장애를 초래 할 수 있습니다.

  2. 보안 문제:
    • 자동 DDL은 애플리케이션이 데이터베이스에 대한 일부 권한을 가지고 있어야 합니다. 애플리케이션이 높은 권한이 가지고 있다면 해당 애플리케이션의 소스코드를 수정하거나 환경변수 파일등을 수정하여 DB에 접근하여 악의적인 행동을 초래할수 있습니다. 따라서 프로덕션 환경에서는 보안 문제가 발생할 수 있으므로 이에 대한 적절한 접근 방식을 고려해야 합니다.
  3. 성능 저하:
    • 애플리케이션이 시작될 때마다 Hibernate가 자동으로 DDL을 실행하면 성능에 부정적인 영향을 미칠 수 있습니다. 특히 스키마가 크고 복잡한 경우에는 자동 DDL이 시간이 오래 걸릴 수 있습니다.
  4. 운영 환경과의 불일치:
    • 개발 및 테스트 환경에서는 자동 DDL이 편리하게 사용될 수 있지만, 프로덕션 환경에서는 보다 신중하게 처리해야 합니다. 운영 환경에서는 스키마 변경이나 데이터베이스 업데이트를 수동으로 관리하는 것이 더 안전할 수 있습니다.

따라서 프로덕션 환경에서는 hibernate.hbm2ddl.auto 속성을 사용하기 보단 none으로 disable 하는 것이 좋습니다. Hibernate의 DDL 자동 생성 기능은 주로 개발 및 테스트 단계에서 사용되며, 프로덕션 환경에서는 신중하게 다뤄져야 합니다.

관련글 더보기