JPA의 ddl-auto 옵션은 각각 어떤 동작을 하고 어떤 상황에서 사용해야 할까요?

Kkd·2024년 11월 21일
0

매일메일 개념정리

목록 보기
5/93

JPA의 ddl-auto 옵션은 애플리케이션이 실행될 때 JPA가 데이터베이스 테이블 및 스키마를 어떻게 생성하거나 수정할지를 정의하는 Hibernate의 설정입니다. 이 옵션은 spring.jpa.hibernate.ddl-auto로 설정할 수 있으며, 다음과 같은 동작을 제공합니다.


1. none

  • 동작:
    • DDL(Data Definition Language)을 사용하지 않음. JPA가 데이터베이스 스키마를 생성하거나 수정하지 않습니다.
  • 사용 상황:
    • 이미 데이터베이스 스키마가 완전히 설정되어 있고, JPA가 스키마를 건드리면 안 되는 경우.
    • 외부에서 관리되는 데이터베이스(예: DBA가 설계한 데이터베이스)에 연결할 때 적합.

2. validate

  • 동작:
    • 엔티티와 데이터베이스 테이블 간의 매핑을 검증합니다.
    • 스키마를 변경하지 않고, 엔티티 정의와 데이터베이스 테이블의 구조가 일치하는지 확인만 합니다.
    • 불일치 시 애플리케이션 실행이 실패합니다.
  • 사용 상황:
    • 데이터베이스 스키마를 이미 생성했으며, 애플리케이션이 해당 스키마와 정확히 일치하는지 확인하고 싶은 경우.
    • 테스트나 배포 환경에서 안전성을 검증할 때 유용.

3. update

  • 동작:
    • 기존 데이터베이스 스키마를 수정합니다.
    • 엔티티 변경 사항(예: 새로운 필드 추가)이 있으면 해당 내용을 반영하여 데이터베이스를 업데이트합니다.
    • 기존 데이터는 유지되지만, 일부 구조적인 변경(제약 조건 수정 등)은 반영되지 않을 수 있습니다.
  • 사용 상황:
    • 로컬 개발 환경에서 엔티티 변경 사항을 데이터베이스에 반영하면서 기존 데이터를 유지해야 할 때.
    • 빠른 개발 속도를 위해 사용되지만, 배포 환경에서는 추천되지 않음.

4. create

  • 동작:
    • 애플리케이션 실행 시 기존 데이터베이스 테이블을 삭제한 후, 엔티티 정의에 따라 새로운 스키마를 생성합니다.
    • 모든 기존 데이터가 삭제됩니다.
  • 사용 상황:
    • 초기 개발 단계에서 사용.
    • 데이터 무결성이 중요하지 않은 테스트 환경에서 스키마를 자주 초기화해야 할 때.

5. create-drop

  • 동작:
    • create와 동일하게 애플리케이션 실행 시 테이블을 생성하지만, 애플리케이션 종료 시 테이블을 삭제(drop) 합니다.
  • 사용 상황:
    • 단위 테스트 환경에서 사용.
    • 애플리케이션 실행 종료 후 데이터를 보존할 필요가 없을 때.

6. none vs 기본 설정 생략

  • 설정을 생략하면 기본적으로 none으로 작동하지 않고, 특정 환경(로컬 개발, 테스트, 프로덕션)에 따라 Spring Boot가 자동으로 적절한 동작을 설정합니다.
    • 로컬 환경: update
    • 프로덕션 환경: validate

DDL-AUTO 옵션 선택 기준

옵션사용 환경설명
none프로덕션외부에서 스키마를 관리하며 변경이 필요 없을 때.
validate프로덕션 또는 테스트엔티티와 스키마의 일관성을 검증하고 싶은 경우.
update로컬 개발엔티티 변경 사항을 자동 반영하며, 데이터는 유지.
create초기 개발, 테스트데이터베이스 초기화를 자주 수행해야 할 때.
create-drop단위 테스트테스트 실행 후 데이터베이스가 필요 없는 경우.

프로덕션 환경에서 스키마 변경

스키마 변경이 필요할 때는 적절한 데이터베이스 마이그레이션 도구(Flyway, Liquibase 등)를 사용하여 제어된 방식으로 스키마를 관리하거나, 사용자가 없는 새벽에 스키마 변경 작업을 수동으로 진행하는 것이 더욱 안전할 수 있습니다.


주의사항

  1. updatecreate는 프로덕션 환경에서 사용 금지
    • 프로덕션 데이터가 손상되거나 무결성이 깨질 위험이 있습니다.
  2. 스키마 관리 전략 설정
    • 실무에서는 DDL 자동 생성을 사용하지 않고, DB 스키마를 수동 관리하거나 마이그레이션 도구(예: Flyway, Liquibase)를 사용하는 것이 일반적입니다.
  3. validate 추천
    • 프로덕션 환경에서는 validate를 사용하여 예상치 못한 스키마 불일치를 방지할 수 있습니다.

요약

  • 로컬 개발: update 또는 create.
  • 테스트 환경: create 또는 create-drop.
  • 프로덕션 환경: validate 또는 none.
    스키마 관리와 데이터 무결성을 위해 프로덕션에서는 데이터베이스 변경을 철저히 통제하는 것이 중요합니다.
profile
🌱

0개의 댓글