DB/JPA

[JPA] 기본키 생성 전략 (추가설명) (업데이트중...)

annovation 2025. 3. 12. 08:52

IDENTITY 전략

1. 특징 - 영속성 컨텍스트에 저장되기 전에 데이터베이스에 INSERT를 실행해야 한다.

  • JPA에서는 객체를 persist() 하면 영속성 컨텍스트(Entity Manager 내부의 1차 캐시)에 먼저 저장되지만, IDENTITY 전략을 사용하면 기본키(ID)를 생성하기 위해 즉시 데이터베이스에 INSERT 쿼리를 실행해야 한다는 제약이 있다.
  • IDENTITY 전략은 데이터베이스가 기본키 생성을 담당하고, JPA가 직접 기본키를 생성할 수 없으므로, 엔티티를 저장하려면 먼저 데이터베이스에 INSERT를 실행해야만 기본키를 얻을 수 있다.

ex.

 

2. 단점 - JPA의 1차 캐시 및 영속성 컨텍스트 기능을 제대로 활용하지 못할 수 있다.

    • JPA는 엔티티를 영속성 컨텍스트(1차 캐시)에 저장한 후, 트랜잭션이 끝날 때 한꺼번에 INSERT를 실행하는 “쓰기 지연” 기법을 사용하는데, IDENTITY 전략은 기본키를 즉시 받아야 하므로, persist() 호출 시점에 바로 INSERT 쿼리가 실행된다.
    • 트랜잭션을 종료하기 전에 미리 DB에 저장되어야 하기 때문에 1차 캐시의 이점(버퍼링, 배치 처리, 성능 최적화)을 활용하지 못하게 된다.

ex.

 

3. 단점 - persist() 메서드를 호출하는 즉시 INSERT 쿼리가 실행되므로, 트랜잭션 처리 시 비효율적일 수 있다.

  • ?

SEQUENCE 전략

1. 특징 - 데이터베이스의 시퀀스(Sequence) 객체를 이용하여 기본키를 생성하는 방식이다.

  • 시퀀스(Sequence)는 데이터베이스에서 자동으로 증가하는 숫자를 생성하는 객체이다.
  • SEQUENCE 전략을 사용하면, JPA가 트랜잭션이 시작되기 전에 미리 기본키 값을 가져올 수 있어 성능이 향상된다.

2. 장점 - 트랜잭션 내에서 기본키를 미리 가져와서 사용할 수 있어 성능이 좋다.

  • ?

3. 장점 - IDENTITY 방식과 달리, 영속성 컨텍스트에서 관리가 가능하다.

  • ?

TABLE 전략

1. 특징 - 데이터베이스에 의존하지 않고 JPA에서 키를 관리할 수 있다.

  • ?

2. 장점 - 모든 데이터베이스에서 동일하게 동작한다.

  • ?

3. 단점 - 다른 전략에 비해 성능이 떨어질 수 있다.

  • ?

출처

OpenAI ChatGPT (https://openai.com)

'DB > JPA' 카테고리의 다른 글

[JPA] ddl-auto를 썼는데 컬럼이 삭제되지 않는 이유  (1) 2025.04.12
[JPA] 더티 체킹 (Dirty Checking)  (0) 2025.03.13
[JPA] 기본키 생성 전략  (0) 2025.03.03
[JPA] BaseEntity  (0) 2025.02.28
[JPA] Enity Annotation  (1) 2024.12.19