저번 리뷰에 이어서 3장 영속성에 대한 내용을 요약 리뷰해보고자 한다. 이전과 마찬가지로 예제는 포함하고 있지 않기 때문에 자세한 내용을 알고 싶으면 책을 구매하는 것을 추천한다.
JPA에서 중요한 것은 크게 엔티티와 테이블을 매핑하는 설계 부분과 매핑한 엔티티를 실제 사용하는 부분으로 나눌 수 있다. 영속성은?? 실제 사용하는 부분과 연관되어 있다.
데이터베이스를 하나만 사용하는 애플리케이션은 일반적으로 엔티티 매니저 팩토리를 하나만 생성하여 사용한다.
엔티티 매니저 팩토리란 엔티티 매니저 생성에 관여한다. 엔티티 매니저 팩토리 생성비용이 매우 크기 때문에 한 개만 생성하여 애플리케이션 전체에서 공유하여 사용하는 것이다.
그에 비해, 엔티티 매니저를 생성하는 비용은 매우 적다. 엔티티 매니저는 커넥션 풀에 직접 접근하여 DB와의 연결을 사용할 수 있다. 스레드 관점에서 엔티티 매니저 팩토리는 공유하여 사용할 수 있따. 그러나 엔티티 매니저를 공유해서 사용하게 된다면? DB와 연결되어 있기 때문에 동시성 문제가 발생할 수 있따. 따라서 서로 다른 스레드 간 공유하면 동시성 문제가 발생할 수 있기 때문에 스레드 간 엔티티 매니저 공유는 절대 불가능하다.
영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 뜻을 가지고 있다. 엔티티 매니저를 통해 엔티티가 저장, 조회, 수정되면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.
자세한 내용은 다른 글에서 다룬 적이 있어서 해당 글을 참고하면 좋을 것 같다.
프로젝트를 진행하면서 쿼리 최적화 등을 진행하며 영속성에 대해 제대로 이해하지 않으면 힘들겠다는 생각이 들었다. 해당 개념을 정확히 이해하고, 애플리케이션 설계와 구현을 진행하는 것이 좋다고 생각한다.