본문 바로가기
JAVA

[JPA] 영속성 컨텍스트의 이점 - 동일성 보장

by 고 민 2024. 1. 10.
728x90
반응형

동일성 보장

영속성 컨텍스트의 이점 두번째는 영속 엔티티의 동일성을 보장해 준다는 것.

동일성 보장을 공부하기에 앞서 동일성에 대해 알아보자. 

동일성 

동일성이란 서로 다른 두 객체 인스턴스가 완전히 같은 값을 갖는 경우를 의미한다. 

변수가 참조하는 두 객체의 주소값이 같기 때문에 사실상 하나의 객체로 봐도 무방하다. 

두 객체가 동일한지는 '==' 연산자를 통해 판별할 수 있다.

 

동일성 보장 예제

Member member1 = em.find(Member.class, 1L);
Member member2 = em.find(Member.class, 1L);

System.out.println("member 1 == member2? " + (member1 == member2));

tx.commit();

 

결과

Hibernate: 
    select
        member0_.id as id1_0_0_,
        member0_.name as name2_0_0_ 
    from
        Member member0_ 
    where
        member0_.id=?
member 1 == member2? true

 

예제 코드 실행 결과 true가 나와 두 객체의 동일성이 보장 됨을 알 수 있다. 

영속 엔티티의 동일성 보장이 가능한 이유는 1차 캐시에 있다. 앞 글에서 다뤘듯 DB 조회 시 가져온 엔티티는 1차 캐시에 저장하고, 이후 다시 조회 할 때 1차캐시에서 저장된 엔티티를 가져온다. 

따라서 두 객체는 동일성이 보장 될 수 밖에 없다. 

 

동일성 보장의 이점 

1차 캐시로 반복가능한 읽기(Repeatable read) 등급의 트랜잭션 격리 수준을 애플리케이션 차원에서 제공 가능하다. 

즉, 트랜잭션 레벨이 Read Commited여도 1차 캐시를 이용해 Repeatable read 등급의 이점을 챙길 수 있는 것. 

 

 

 

 

 

728x90
반응형