자바 & 스프링

JPA allocationSize default 값이 50인 이유

p829911 2021. 11. 30. 20:27

JPA 기본 키 생성 전략은 4가지이다.

  • IDENTITY: 기본 키 생성을 데이터베이스에 위임한다 (MYSQL)
  • SEQUENCE: 데이터베이스 시퀀스를 사용해서 기본 키를 할당한다 (ORACLE, H2)
    - @SequenceGenerator 필요
  • TABLE: 키 생성용 테이블 사용, 모든 DB에서 사용가능
    - @TableGenerator 필요
  • AUTO: 방언에 따라 자동 지정, 기본값

위의 네 가지 방법 중 SEQUENCE 전략과 TABLE 전략을 사용할 때 Generator 속성에 allocationSize라는 속성이 있다. 이 속성의 default 값은 50이다.

allocationSize: 시퀀스 한 번 호출에 증가하는 수(성능 최적화에 사용됨, 데이터베이스 시퀀스 값이 하나씩 증가하도록 설정되어 있으면 이 값을 반드시 1로 설정해야 한다.)

Sequence 전략에서는 데이터베이스 시퀀스를 통해 식별자를 조회하는 추가 작업이 필요하다.

  1. 식별자를 구하려고 데이터베이스 시퀀스를 조회한다.
  2. 조회한 시퀀스를 기본값으로 사용해 데이터 베이스에 저장한다.

위와 같이 시퀀스에 접근하는 것을 줄이기 위해 allocationSize를 활용한다. allocationSize에 할당한 값만큼 한번에 시퀀스 값을 증가시키고 나서 메모리에 시퀀스 값을 할당한다.

allocationSize값이 50이 시퀀스를 한번에 50을 증가시킨 다음에 1~50까지는 메모리에 할당한다. 그리고 51이 되면 시퀀스 값을 100으로 증가시킨 다음 51~100까지 메모리에 식별자를 할당한다.

이 방법은 시퀀스 값을 선점하므로 여러 JVM이 동시에 동작해도 기본 키 값이 충돌하지 않는 장점이 있다. 반면에 데이터베이스에 직접 접근해서 데이터를 등록할 때 시퀀스 값이 한 번에 많이 증가한다는 점을 염두해 두어야 한다.

 
 
 
 
 
 
 
 
 

'자바 & 스프링' 카테고리의 다른 글

java의 싱글톤  (0) 2021.12.01
PreparedStatement 쿼리를 사용하는 이유  (0) 2021.11.30
java - thread 동기화  (0) 2021.11.30
java - Stream  (0) 2021.11.30
Java 8 Lambda — 2  (0) 2021.11.30