본문 바로가기
Java

엔티티 매니저, 영속성 컨텍스트의 개념/특징/예시

by yapdol 2023. 8. 21.

 

 

 

 

✅ 엔티티 매니저

 

📌 엔티티

데이터베이스의 테이블과 매핑되는 객체.

 

📌 엔티티 매니저

- 엔티티를 관리하며, 데이터베이스와 어플리케이션 사이에서 객체를 생성/수정/삭제하는 역할을 함.

- 엔티티 매니저는 엔티티 매니저 팩토리에서 만들어짐.

- 엔티티 매니저는 엔티티를 영속성 컨텍스트에 저장함.

- 원래는 요청이 들어오면, 각 요청의 개수만큼 엔티티 매니저 팩토리가 엔티티 매니저를 만들어 요청을 처리하고,

  필요한 시점에 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