[도서 리뷰] - 자바 ORM 표준 JPA 프로그래밍 ( 영속성 )

DevHwan·2023년 2월 10일
0

들어가며

저번 리뷰에 이어서 3장 영속성에 대한 내용을 요약 리뷰해보고자 한다. 이전과 마찬가지로 예제는 포함하고 있지 않기 때문에 자세한 내용을 알고 싶으면 책을 구매하는 것을 추천한다.

엔티티 매니저 팩토리와 엔티티 매니저

JPA에서 중요한 것은 크게 엔티티와 테이블을 매핑하는 설계 부분과 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 영속성은?? 실제 사용하는 부분과 연관되어 있다.

데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 엔티티 매니저 팩토리를 하나만 생성하여 사용한다.

엔티티 매니저 팩토리란 엔티티 매니저 생성에 관여한다. 엔티티 매니저 팩토리 생성비용이 매우 크기 때문에 한 개만 생성하여 애플리케이션 전체에서 공유하여 사용하는 것이다.

그에 비해, 엔티티 매니저를 생성하는 비용은 매우 적다. 엔티티 매니저는 커넥션 풀에 직접 접근하여 DB와의 연결을 사용할 수 있다. 스레드 관점에서 엔티티 매니저 팩토리는 공유하여 사용할 수 있따. 그러나 엔티티 매니저를 공유해서 사용하게 된다면? DB와 연결되어 있기 때문에 동시성 문제가 발생할 수 있따. 따라서 서로 다른 스레드 간 공유하면 동시성 문제가 발생할 수 있기 때문에 스레드 간 엔티티 매니저 공유는 절대 불가능하다.

영속성 컨텍스트

영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 뜻을 가지고 있다. 엔티티 매니저를 통해 엔티티가 저장, 조회, 수정되면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.

자세한 내용은 다른 글에서 다룬 적이 있어서 해당 글을 참고하면 좋을 것 같다.

영속성 컨텍스트

영속성 컨텍스트의 특징

  • 엔티티와 식별자 값
    • 영속성 컨텍스트 내부에 존재하는 맵에서 사용하는 키
  • 데이터베이스 저장
  • 1차 캐시
    • 영속성 컨텍스트 내부의 캐시
    • 1차 캐시에서 먼저 조회하고 없으면 데이터베이스에서 조회한다.
  • 동일성 보장
  • 트랜잭션을 지원하는 쓰기 지연
    • 저장하는 쿼리를 쿼리 저장소에 보관했다가, 커밋 시점에 데이터베이스로 전송한다.
  • 변경 감지
    • 엔티티의 변경사항을 데이터베이스에 자동으로 반영하는 기능이다.
    • 엔티티의 최초 상태를 복사해서 저장하기 때문에 지원 가능 ( 스냅샷 )
  • 지연 로딩

마무리

프로젝트를 진행하면서 쿼리 최적화 등을 진행하며 영속성에 대해 제대로 이해하지 않으면 힘들겠다는 생각이 들었다. 해당 개념을 정확히 이해하고, 애플리케이션 설계와 구현을 진행하는 것이 좋다고 생각한다.

profile
달리기 시작한 치타

0개의 댓글