티스토리 뷰





반응형
@Entity
public class Member {
	@Id
    private Long id;
    private String name;
}

위와 같이 작성을 할 경우 JPA에서 자동으로 DDL을 애플리케이션 실행 시점에 생성해준다.

이렇게 만들 경우 4가지 옵션으로 사용이 가능하다.

ddl-auto : create, update, validate, none

옵션 설명
create 기존 테이블 삭제 후 다시 생성
update 변경분만 반영
validate 엔티티와 테이블이 정상 매핑되었는지만 확인
none 사용하지 않음

개발 환경(로컬)에서는 create나 update를 사용해도 되나, 스테이징과 운영에서는 절대 사용해선 안된다.

스테이징과 운영은 validate, none을 권장

왜냐하면 create는 데이터 자체를 날릴 수 있으며,

update는 많은 alter문을 실행하다가 DB락이 걸려서 운영 장애가 날 수 있다.

기본키 매핑

기본키 매핑 방법에는 2가지 방식이 있습니다.

직접할당 : @Id만 사용

자동생성 : @GeneratedValue

  • IDENTITY : 데이터베이스에 위임, MYSQL
  • SEQUENCE : 데이터베이스 시퀀스 오브젝트 사용, 오라클
  • TABLE : 키 생성용 테이블 사용, 모든 DB에서 사용(@TableGenerator 필요)
  • AUTO : 방언에 따라 자동 지정, 기본값

IDENTITY

IDENTITY 전략의 경우 DB에 insert될 때 알아서 시퀀스를 넣고 실행되기 때문에 insert문 자체에도 id 값은 null로 실행된다. 그래서 pk를 알 수 있는건 막상 DB에 데이터가 들어가봐야 알 수 있다.

 

하지만 그러면 영속성 컨텍스트는 pk를 모르기 때문에 관리를 할 수 없으므로 이 전략일 경우에만 예외적으로 persist 작업때 insert문을 날리게 된다.

SEQUENCE 

아이덴티티 전략과는 다르게 시퀀스는 persist 시점에

call next value for MEMBER_SEQ

라는 구문이 실행되어 pk를 불러와서 기본키 매핑이되므로 원래의 매커니즘대로 움직이게 된다.

그러나 결국 DB의 조회를 해오는 것이므로 성능적인 개선이 필요하다.

그래서 사용하게되는 옵션이 allocationSize이다.

 

한 번의 호출로 얼만큼의 시퀀스를 불러올지 정하는 옵션인데 권장 옵션은 50개씩이다.

1번의 호출로 50개의 시퀀스를 불러와서 서버에서는 1개씩 쭉 쓰다 50개를 다 쓰게 되면 다시 호출해서 새로운 50개를 받아오는 방식이다. 이렇게 설정할 경우 네트웍 비용을 아낄 수 있다.

 

 

출처 : https://www.inflearn.com/course/ORM-JPA-Basic

반응형
댓글
반응형
최근에 달린 댓글
글 보관함
Total
Today
Yesterday
최근에 올라온 글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31