
✅ 엔티티 매니저
📌 엔티티
데이터베이스의 테이블과 매핑되는 객체.
📌 엔티티 매니저
- 엔티티를 관리하며, 데이터베이스와 어플리케이션 사이에서 객체를 생성/수정/삭제하는 역할을 함.
- 엔티티 매니저는 엔티티 매니저 팩토리에서 만들어짐.
- 엔티티 매니저는 엔티티를 영속성 컨텍스트에 저장함.
- 원래는 요청이 들어오면, 각 요청의 개수만큼 엔티티 매니저 팩토리가 엔티티 매니저를 만들어 요청을 처리하고,
필요한 시점에 DB와 연결한 뒤에 쿼리하지만, 스프링 부트에서는 엔티티 매니저 팩토리를 하나만 생성해서 관리하고
@PersistenceCnntext 또는 @Autowired 애너테이션을 사용해 엔티티 매니저를 사용.
- 스프링 부트에서는 '스프링데이터 JPA'가 엔티티 매니저를 관리하므로 직접 생성·관리할 필요가 없음.
- 스프링 부트에서는 실제 엔티티 매니저가 아닌 프록시(가짜) 엔티티 매니저를 사용.
* 스프링부트가 엔티티 매니저를 사용하는 방법 예시
@PersistenceContext
EntityManager em; // 프록시 엔티티 매니저 (필요시, 진짜 엔티티 매니저 호출)
📌 엔티티의 상태
엔티티는 아래와 같이 4가지의 상태를 가지며, 엔티티의 상태를 조절해 데이터를 올바르게 유지·관리 가능함.
1. 분리 상태 (detached) : 영속성 컨텍스트가 관리하고 있지 않은 상태. (엔티티가 관리되는 상태)
2. 관리 상태 (managed) : 영속성 컨텍스트가 관리하는 상태. (엔티티 객체가 분리된 상태)
3. 비영속 상태 (transient) : 영속성 컨텍스트와 전혀 관계 없는 상태. (엔티티 매니저가 엔티티를 관리하지 않는 상태)
4. 삭제된 상태 (removed) : 삭제된 상태. (엔티티 객체가 삭제된 상태)
* 엔티티 상태 변경 예시
public class EntityManagerTest {
@Autowired
EntityManager em;
public void example() {
// 1. 비영속 상태
Member member = new Member(1L, "홍길동");
// 2. 관리 상태
em.persist(member);
// 3. 분리 상태
em.detach(member);
// 4. 삭제된 상태
em.remove(member);
}
}
✅ 영속성 컨텍스트
📌 영속성 컨텍스트란?
- 엔티티를 관리하는 가상의 공간.
- 1차캐시, 쓰기지연, 변경감지, 지연로딩 이라는 특징을 가짐.
- 이러한 특징들 덕분에 데이터베이스로의 접근을 최소화해 성능을 높일수 있음.
📌 영속성 컨텍스트의 특징
특징 1 : 1차 캐시
- 영속성 컨텍스트 내부에 1차 캐시가 존재해, 캐시된 데이터를 조회 시, 데이터베이스를 거치지 않고 빠르게 데이터를 조회할 수 있음.
- 엔티티 조회 시, 1차 캐시에 데이터를 조회하고 있으면 반환.
- 엔티티 조회시. 1차 캐시에 데이터가 없으면 데이터베이스 조회 후, 1차 캐시에 저장 후, 반환.
특징 2 : 쓰기 지연
- 트랜잭션을 커밋하기 전까지 쿼리를 모았다가, 트랜잭션을 커밋하면 한번에 실행하는 것.- 묶음으로 쿼리 요청이 가능해 데이터베이스 시스템의 부담 감소.ex) 데이터 추가 쿼리가 3개 일 때, 영속성 컨텍스트는 트랜잭션을 커밋하는 시점에 3개의 쿼리를 한꺼번에 전송.
특징 3 : 변경 감지
- 트랜잭션 커밋 시, 1차 캐시에 저장된 값과 현재 엔티티 값을 비교해 변경사항을 DB에 자동반영하는 것.
- 묶음으로 쿼리 요청이 가능해 데이터베이스 시스템의 부담 감소.
특징 4 : 지연 로딩 (↔ 즉시 로딩)
쿼리로 요청한 데이터를 바로 어플리케이션에 로딩하는 것이 아닌 필요할때 쿼리를 날려 데이터를 조회하는 것.
참고자료 : 스프링 부트 3 백엔드 개발자 되기: 자바 편
https://product.kyobobook.co.kr/detail/S000201766024
스프링 부트 3 백엔드 개발자 되기: 자바 편 | 신선영 - 교보문고
스프링 부트 3 백엔드 개발자 되기: 자바 편 | ★ 자바 백엔드 개발자가 되고 싶다면 ★ 자바 언어 입문 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은
product.kyobobook.co.kr