기본 키 매핑

tyghu77·2023년 7월 28일
0

권장하는 식별자 전략

기본키 제약조건 : NULL 아님, 유일, 변하면 안된다.
(오랜 기간동안 변하면 안된다.)

Long + 대체키 + 키 생성 전략을 사용하는 것이 좋다.
(오토 인크리먼트나 시퀀스를 쓰는것을 권장 또는 UUID)

IDENTITY 전략의 특징

IDENTITY 전략은 id에 값을 넣으면 안된다.
id값을 DB에 들어가 봐야 알 수 있다.
JPA는 영속성 컨텍스트에 넣기 위해 id(pk)값이 필요하다. 그래서 트랜잭션 커밋 시점에 쿼리를 날리는 것이 아니라, 영속화 하는 단계에서 쿼리가 날아가게된다.

따라서 IDENTITY 전략을 사용할 경우 모아서 쿼리를 날릴 수 없게 된다.

SEQUENCE 전략의 특징

SEQUENCE도 id 값을 DB에 들어가야 알 수 있다.

  1. JPA가 영속성 컨텍스트에 넣기 위해 id(pk)값이 필요하다.
  2. 영속화 하는 단계에서 다음 시퀀스 값을 달라고 DB에 쿼리를 보낸다.
  3. 가져온 값을 id에 넣은 후에 영속성 컨텍스트에 저장한다.

IDENTITY와 다르게 쿼리를 바로 날리지는 않는다.(버퍼링이 가능함)

그런데 중간에 자꾸 네트워크를 타기 때문에 성능에 문제가 있을 수 있을 것같다.
그래서 JPA는 다음을 지원한다.

@SequenceGenerator에서 allocationSize 옵션이 있는데 이 값이 기본으로 50이다.
미리 50개를 DB에 올려놓고 (DB는 51) 메모리에서 1씩 쓰는 것이다.
이렇게 하면 매 순간 DB에 요청하는 것이 아니라 한번 요청하고 메모리에서 설정한 만큼 쓴 후에 51을 마주치는 순간 다시 요청하게 된다.

profile
배운것을 기록하자

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

좋은 글 감사합니다.

답글 달기