[JPA] 데이터베이스 스키마 자동 생성 :: 잡다한 프로그래밍
반응형

이전글에서 객체와 테이블의 매핑에 대해서 배웠는데,

이번에는 JPA가 애플리케이션을 실행할 때, 엔티티 클래스 정의를 기반으로 DB 테이블을 자동 생성하는 기능에 대해 정리한다.

 

쉽게말해, 엔티티를 작성하면 JPA가 알아서 테이블을 생성해준다!

 

객체 중심 개발 패러다임

과거에는 테이블 설계(DDL) → 객체 매핑 순이었다면,
JPA는 반대로 객체 정의(Entity) → 테이블 생성(DDL) 흐름을 지원합니다.

즉, "객체 중심 설계"로 전환하면서, JPA가 엔티티 정의를 읽고 적절한 테이블 스키마를 생성해줍니다.

 

DB 방언(Dialect)에 따라 DDL 자동 생성

JPA는 사용하는 DBMS에 맞는 방언(Dialect) 을 기반으로
적절한 SQL DDL을 자동 생성합니다.

예:

  • Oracle: varchar2
  • MySQL: varchar

 

⚙️ DDL 생성 전략 설정 (hibernate.hbm2ddl.auto)

DDL 자동 생성 기능의 핵심 설정은 다음 속성으로 제어합니다.

spring.jpa.hibernate.ddl-auto=create
설정 값 설명
create 기존 테이블 삭제 후, 매번 새로 생성 (애플리케이션 시작 시 DROP → CREATE)
create-drop create와 동일하지만, 애플리케이션 종료 시 테이블을 DROP
update 변경된 부분만 반영 (기존 데이터 보존) → 주의: 운영에서 사용 금지
validate 테이블과 엔티티 매핑이 일치하는지 검사만 수행 (DDL 실행 ❌)
none 아무 작업도 수행하지 않음 (기본값 또는 운영에서 권장)

 

언제 어떤 옵션을 써야 할까?

개발 환경 create, update 빠른 테스트 및 개발을 위해 테이블 자동 생성/수정
테스트 서버 update, validate 데이터 보존하면서 매핑 검증
운영 환경 validate, none DDL 실행 ❌, 수동 스키마 관리 필수


참고: DDL 자동 생성의 역할

  • @Table, @Column(length = 100), @UniqueConstraint, @Index 등
    엔티티에 설정한 메타데이터를 기반으로 테이블/컬럼/제약조건 생성
  • JPA 실행 로직에는 영향을 주지 않음
    → DDL은 시작 시점에만 수행되고, 이후 쿼리 동작과는 무관
반응형

'프로그래밍 > JPA' 카테고리의 다른 글

[JPA] 기본키 매핑  (0) 2025.06.19
[JPA] 필드와 컬럼 매핑  (1) 2025.06.19
[JPA] 객체와 테이블 매핑  (0) 2025.06.19
[JPA] JPA의 영속성 관리2  (0) 2025.06.10
[JPA] JPA 의 영속성 관리  (0) 2025.06.10

+ Recent posts