본문 바로가기
Back-end

기본 키 할당 전략

by 신재권 2023. 9. 29.

기본 키 할당 전략

JPA가 제공하는 DB 기본 키 할당 전략은 직접 할당 방식, 자동 생성 방식 두 가지가 존재한다.

직접 할당 방식은 기본 키를 애플리케이션에서 직접 할당하는 방식으로 @Id 어노테이션만 붙이고, id 값을 직접 할당하면 된다.

자동 생성 방식은 데이터베이스에서 제공하는 대리키를 사용하는 방식이다.

총 3가지 방식이 존재한다.

  • Identity
  • Sequence
  • Table

Identity 전략

Identity 전략은 기본 키 관리를 DB에 위임한다.

엔티티가 영속 상태가 되려면 식별자가 반드시 필요하다.

Identity 전략은 엔티티를 데이터베이스에 저장해야 식별자를 얻을 수 있다. 즉, 저장하는 순간 Insert SQL이 DB에 전달되어 쓰기 지연이 동작하지 않는다.

또한 기본 키는 nullable 하기 때문에, 테스트 코드에서는 ID를 통해 핸들링 할 수 없다. 이는 엔티티가 JPA 프레임워크에 종속적이게 되는 문제를 가져온다.

대표적으로 MySQL 벤더가 해당 전략을 지원한다.

Sequence 전략

데이터베이스의 시퀀스를 사용해서 기본키를 할당한다.

시퀀스 전략은 엔티티를 저장할 때 데이터베이스 시퀀스를 사용해 식별자를 조회 후, 식별자를 엔티티에 할당 한 후, 엔티티를 영속성 컨텍스트에 저장한다. 이후 플러시가 일어나면 엔티티를 데이터베이스에 저장한다.

시퀀스 전략은 시퀀스를 조회하는 추가 작업이 필요한데, 시퀀스에 접근하는 횟수를 줄이기 위해 allocationSize를 사용한다. 이는 설정한 값 만큼 한 번에 시퀀스 값을 증가시키고, 메모리에 시퀀스 값을 할당해 사용한다.

대표적으로 Oracle, PostgreSQL, H2 벤더가 해당 전략을 지원한다.

Table

키 생성 테이블을 사용하는 방식이다.

즉, 시퀀스와 비슷한 역할을 하는 테이블을 생성한다.

어떤 DB든 사용가능한 전략이다.

대신 테이블이 하나 더 생긴다는 단점이 있다.

'Back-end' 카테고리의 다른 글

코틀린 - 기본 문법  (1) 2023.10.25
JPA Entity 기본 생성자  (0) 2023.09.29
Wrapper Type vs Primitive Type In JPA  (0) 2023.09.29
JPA  (0) 2023.09.20
Spring MVC  (0) 2023.09.15