반응형
    
    
    
  이전글에서 객체와 테이블의 매핑에 대해서 배웠는데,
이번에는 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 |