인프런 - 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의노트
데이터베이스 스키마 자동 생성
DDL을 애플리케이션 실행 시점에 자동 생성(Data Definition Language : 데이터베이스 스키마를 정의하는 일련의 SQL 명령), 어플리케이션 실행 시점에 Entity를 인식하여 데이터베이스 테이블을 만들고 인식된 Column을 자동 생성한다.
테이블 중심 → 객체 중심
데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성
이렇게 생성된 DDL은 개발 장비에서만 사용, 운영에서는 사용 X
생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용
속성 : hibernate.hbm2ddl.auto
- create : 기존테이블 삭제 후 다시 생성 ( DROP + CREATE )
@Entity
public class Member {
@Id
private Long id;
private String name;
private int age;
}
- create-drop : create와 같으나 종료시점에 테이블 drop >> 테스트할 때 써본다.
- update : 변경분만 반영(운영 DB에는 사용하면 안됨) → 왜?
update로 설정시, Member 클래스에서 id와 name만 넣고 테이블을 만든 뒤, age를 추가하고 어플리케이션을 실행시키면 다음과 같이 ALTER 문이 나가면서 age column을 추가하면서 테이블을 수정한다.(※ 주의 : column을 지우는 건 안된다! 실수라도 column이 날아가면 안되기 때문)
- validate : 엔티티와 테이블이 정상 매핑되었는지만 확인
@Entity
public class Member {
@Id
private Long id;
private String name;
// private int age;
private int notAge;
}
기존에 있던 age column 대신 notAge로 column명을 변경하고 나서 어플리케이션을 실행하면
이런 식으로 Member table에 notAge column이 없다고 나오면서 SchemaManagementException을 던진다.
- none : 사용하지 않음
데이터베이스 스키마 자동 생성 옵션 주의할 점
- 운영 장비에는 절대 create, create-drop, update 사용하면 안된다.
- 개발 초기 단계는 create 또는 update
- 테스트 서버는 update 또는 validate -> create로 하면 기존 테스트 했던 데이터들이 다 날아가기 때문.
- 스테이징과 운영 서버는 validate 또는 none
→ 개발 단계 / 로컬PC에서 테스트할 게 아니라면 그냥 안 쓰는 게 좋더라..!
→ update는 왜 안되는가? alter table 쿼리가 날아가는데 잘못하면 DB락이 걸린다. 몇 분 동안 서비스가 중단될 수도 있다.
DDL 생성 기능
@Column에 넣을 수 있는 조건들
→ nullable = false, length = 10, unique = true, ...
DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA의 실행 로직에는 영향을 주지 않는다.
→ Member클래스를 @Entity로 하고, @Table의 옵션인 name을 "MDB"로 수정하는 경우 JPA는 매번 DB에 쿼리를 보낼 때 마다 이 Entity를 MDB라는 데이터베이스의 테이블을 찾아 매핑할 것이다. 이는 이후 실행 로직에도 계속 영향을 미치는 것이다. 하지만, DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고, JPA의 실행 로직에는 영향을 주지 않는다.
'STUDY > JPA' 카테고리의 다른 글
[4-2] Entity Mapping - 객체&테이블, 필드&컬럼 (0) | 2023.07.19 |
---|---|
[3-4] 준영속 상태 (0) | 2023.07.06 |
[3-3] 플러시 (0) | 2023.07.05 |
[3-2] 영속성 컨텍스트의 이점 (+Batch) (0) | 2023.07.04 |
[3-1] 영속성 컨텍스트란? (0) | 2023.07.03 |