자바 객체와 데이터베이스를 연결해 데이터를 관리하는 JPA의 중요한 컨셉 두 가지가 있다.
엔티티(entity) : DB의 테이블과 매핑되는 객체
엔티티 매니저 : 엔티티를 관리해 데이터베이스와 어플리케이션 사이에서 객체를 생성, 수정, 삭제하는 역할
엔티티 매니저 팩토리 : 엔티티 매니저를 만드는 곳
예시
회원 A의 정보를 저장하고 관리할 엔티티 매니저를 엔티티 매니저 팩토리가 생성하면 데이터베이스에 회원 A의 정보를 저장하고 관리할 수 있다.
스프링 부트는 내부에서 엔티티 매니저 팩토리를 하나만 생성하고 관리한다. 따라서 개발자가 직접 생성하거나 관리할 필요가 없다.
엔티티를 관리하는 가상의 공간
영속성 컨텍스트 덕분에 데이터베이스에서 쉽게 데이터를 가져올 수 있고 엔티티를 편하게 사용할 수 있다.
엔티티를 조회하면 1차 캐시에서 데이터를 조회하고 값이 있으면 반환한다.
이를 통해 캐시된 데이터를 조회할 때에는 데이터베이스를 거치지 않아도 되서 매우 빠르게 데이터를 조회할 수 있다.
트랜잭션을 커밋하기 전까지는 데이터베이스에 실제로 질의문을 보내지 않고 쿼리를 모았다가 트랜잭션을 커밋하면 모았던 쿼리를 한번에 실행
이를 통해 적당한 묶음으로 쿼리를 요청할 수 있어 데이터베이스 시스템의 부담을 줄일 수 있다.
트랜잭션을 커밋하면 1차 캐시에 저장되어 있는 엔티티의 값과 현재 엔티티의 값을 비교해서 변경된 값이 있다면 변경 사항을 감지해 변경된 값을 데이터베이스에 자동 반영
이를 통해 적당한 묶음으로 쿼리를 요청할 수 있어 데이터베이스 시스템의 부담을 줄일 수 있다.
DB의 접근을 최소화해 성능을 높인다.