미운 오리 새끼의 우아한 개발자되기

[JPA] 영속성 관리 (1) 엔티티 매니저 팩토리와 엔티티 매니저 본문

Spring & Spring Boot

[JPA] 영속성 관리 (1) 엔티티 매니저 팩토리와 엔티티 매니저

Serina_Heo 2023. 5. 23. 12:14

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

엔티티 매니저 팩토리 : 엔티티 매니저를 만드는 공장. 공장을 만드는 비용은 상당히 크기 때문에 애플리케이션 전체에서 공유하도록 설계됨. 
엔티티 매니저: 엔티티를 관리하는 관리자. 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않는다. 

엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하므로 다른 스레드 간에 공유해도 되지만, 엔티티 매니저는 여러 스레드가 동시에 접근하면 동시성 문제가 발생하므로 절대 스레드간 공유 x

2. 영속성 컨텍스트

영속성 컨텍스트: 엔티티를 영구 저장하는 환경. 영속성 컨텍스트는 엔티티 매니저를 생성할 때 하나 만들어 진다. 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있고, 관리할 수 있다.

3. 엔티티의 생명주기

엔티티에는 4가지 상태가 존재함.

  • 비영속 (new/transient): 영속성 컨텍스트와 전혀 관련이 없는 상태
  • 영속 (managed): 영속성 컨텍스트에 저장된 상태
  • 준영속(detached): 영속성 컨텍스트에 저장되었다가 분리된 상태
  • 삭제(removed): 삭제된 상태 

 

비영속: 엔티티 객체를 생성하고 저장하지 않은 상태

// 객체를 생성한 상태(비영속)
Member member = new Manager();
member.setId("member1");
member.setUsername("회원1");

 

영속: 엔티티 매니저를 통해 엔티티를 영속성 컨텐스트에 저장하면 이제 이 엔티티를 영속상태라고 한다. 즉, 영속상태는 영속성 컨텍스트에 의해 관리된다는 의미이다.

// 객체를 저장한 상태(영속)
em.persist(member);

 

준영속: 영속성 컨텍스트가 관리하던 엔티티를 더이상 관리하지 않으면 준영속 상태가 됨. 특정 엔티티를 준영속 상태로 만들려면 em.detach()를 호출하면 된다. em.close()를 호출해 영속성 컨텍스트를 닫거나, em.clear()를 호출해 영속성 컨텍스트를 초기화해도 준영속 상태가 된다.

// 회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태
em.detach(member);

 

삭제: 엔티티를 영속성 컨텍스트와 DB 에서 삭제한다.

// 객체를 삭제한 상태(삭제)
em.remove(member);

'Spring & Spring Boot' 카테고리의 다른 글

[JPA] 고급 매핑 (3) 복합 키  (0) 2023.05.09
[JPA] 고급 매핑 (2) @MappedSuperclass  (0) 2023.05.09