T_era

영속성 컨텍스트 - JPA 핵심 개념 : 동일성 보장 및 쓰기 지연 본문

Programing/Spring

영속성 컨텍스트 - JPA 핵심 개념 : 동일성 보장 및 쓰기 지연

블스뜸 2025. 5. 15. 17:55

1. 동일성 보장 (Identity Guarantee)

  • 동일 트랜잭션 내 조회된 Entity는 동일 인스턴스 반환.
  • 영속성 컨텍스트의 1차 캐시 활용.
  • DB 조회 후 1차 캐시에 저장, 이후 동일 조회 시 1차 캐시에서 반환.
try {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("your_persistence_unit");
    EntityManager em = emf.createEntityManager();
    EntityTransaction transaction = em.getTransaction();
    transaction.begin();

    // DB 조회, 1차 캐시에 저장
    Tutor findTutor1 = em.find(Tutor.class, 1L);
    // 1차 캐시 조회
    Tutor findTutor2 = em.find(Tutor.class, 1L);

    // true 반환
    System.out.println("findTutor1 == findTutor2 : " + (findTutor1 == findTutor2));

    transaction.commit();
} catch (Exception e) {
    e.printStackTrace();
    transaction.rollback();
}

2. 쓰기 지연 (Transactional Write-Behind)

  • 동일 트랜잭션 내 생성된 SQL을 Commit 시점에 일괄 반영.
  • 쓰기 지연 저장소 활용.
  • persist() 호출 시 SQL 즉시 전송 X, 쓰기 지연 저장소에 보관.
  • transaction.commit() 시 영속성 컨텍스트 Flush, 쓰기 지연 저장소의 SQL 일괄 실행 후 DB 반영.

성능 최적화:

  • 네트워크 통신 횟수 감소, 성능 향상.
  • hibernate.jdbc.batch_size 설정으로 동일 유형 SQL 묶어서 전송 가능.

@GeneratedValue(strategy = GenerationType.IDENTITY) 사용 시 주의사항:

  • 해당 전략 사용 시 persist() 호출 시점에 즉시 INSERT SQL 실행, 쓰기 지연 무시.

결론적으로, 동일성 보장은 트랜잭션 내 객체 참조 일관성 유지 및 불필요한 DB 조회 감소에 기여하며, 쓰기 지연은 DB 통신 횟수 최적화로 성능 향상에 기여한다.