본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다.
데이터베이스 스키마 자동 생성
- JPA는 객체 매핑만 해놓으면 애플리케이션 실행 시점에 필요 시 테이블을 모두 생성해준다.
- DDL을 애플리케이션 실행 시점에 자동으로 생성
- 테이블 중심 → 객체 중심
- 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL을 생성
- 이렇게 생성된 DDL은 개발 장비에서만 사용
- 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용한다.
스키마 속성
옵션 | 설명 |
create | 기존 테이블 삭제 후 다시 생성 (DROP + CREATE) |
create-drop | create와 같으나 종료 시점에 테이블 DROP |
update | 변경분만 반영 (운영 DB에는 사용하면 안됨) |
validate | 엔티티와 테이블이 정상 매핑되었는지만 확인 |
none | 사용하지 않음 |
더보기
🖥 create 실행
Hibernate:
drop table if exists Member CASCADE
Hibernate:
create table Member (
id bigint not null,
name varchar(255),
primary key (id)
)
🖥 create-drop 실행
Hibernate:
drop table if exists Member CASCADE
Hibernate:
create table Member (
id bigint not null,
name varchar(255),
primary key (id)
)
...
Hibernate:
drop table if exists Member CASCADE
🖥 update 실행
Hibernate:
alter table Member
add column age bigint
주의할 점
- 운영 장비에는 절대 create, create-drop, update 속성을 사용하면 안된다.
- 개발 초기 단계 : create 또는 update
- 테스트 서버 : update 또는 validate
- 스테이징과 운영 서버 : validate 또는 none
개발 서버, 특히나 운영 서버에스는 데이터베이스 스키마 자동 생성 기능을 아예 사용하지 않는 것을 권장한다고 한다.
개발 서버의 경우 update로 해놓으면 ALTER 쿼리를 자동으로 해주기 때문에 편할 수 있지만,
운영 서버에서 데이터가 몇천만 건 있는 경우 ALTER를 잘못치면 시스템 중단 사태가 일어날 수 있어 매우 위험도가 높다.
결론적으로 로컬 PC에서만 자유롭게 사용하고, 여러명이 사용하는 개발 서버나 스테이징 운영 서버에서는 가급적이면 사용하지 않는 것을 권장한다!
'🌱 Spring > JPA' 카테고리의 다른 글
[JPA] 상속관계 매핑(@Inheritance), 매핑 정보 상속@MappedSuperclass) (0) | 2022.10.17 |
---|---|
[JPA] 연관관계 매핑(3) - 다중성 (ManyToOne, ManyToOne, OneToOne, ManyToMany) (1) | 2022.10.11 |
[JPA] 연관관계 매핑(2) : 양방향 매핑 (0) | 2022.10.06 |
[JPA] 연관관계 매핑(1) : 단방향 매핑 (0) | 2022.10.06 |
[JPA] 엔티티 매핑(2) - 기본 키 매핑 전략 (1) | 2022.09.30 |
[JPA] 엔티티 매핑(1) - 객체와 테이블, 필드와 컬럼 매핑 (0) | 2022.09.30 |
[JPA] 영속성 관리 (0) | 2022.09.29 |
[JPA] JPQL : 객체 지향 쿼리 언어 (0) | 2022.09.29 |