관리 메뉴

개발노트

영속성 컨텍스트란? 본문

API/JPA

영속성 컨텍스트란?

YoonGwon 2021. 1. 18. 12:57

영속성 컨텍스트(Persistence Context)란?

-JPA를 이해하는 데 가장 중요한 용어는 영속성 컨텍스트(persistence context)다. 우리말로 번역하자면 '엔티티를 영구 저장하는 환경' 이라는 뜻이다.

- 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리한다.

em.persist(member);

- 지금까지는 이 코드를 단순히 회원 엔티티를 저장한다고 표현했다. 정확히 이야기하면 persist() 메소드는 엔티티 매니저를 사용해서 회원 엔티티를 영속성 컨텍스트에 저장한다.

- 위 개념은 논리적인 개념에 가깝고 눈에 보이지도 않는다. 영속성 컨텍스트는 엔티티 매니저를 생성할 때 하나 만들어진다. 이는 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있고, 영속성 컨텍스트를 관리할 수 있다.

 

 

 

1) 엔티티의 생명주기

- 엔티티에는 4가지 상태가 존재한다.

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

- 다음 그림은 엔티티의 생명 주기를 나타낸 그림이다.

엔티티 매니저의 생명주기

* 비영속

- 예를 들어 엔티티 객체를 생성했다. 지금은 순수한 객체 상태이며 아직 저장하지 않았다. 따라서 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없다. 이것을 비영속 상태라 한다. 다음 그림을 참고하자.

Member member = new Member();
member.setId("member1");
member.setUsername("회원1");

비영속 상태

* 영속

- 예를 들어 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장했다. 이렇게 영속성 컨텍스트가 관리하는 엔티티를 영속 상태라 한다. 이제 회원 엔티티는 비영속 상태에서 영속 상태가 되었다. 결국 영속 상태라는 것은 영속성 컨텍스트에 의해 관리된다는 뜻이다. 이것을 영속 상태라 한다. 다음 그림을 참고하자.

em.persist() 호출 후 영속 상태

* 준영속

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

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

 

* 삭제

- 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제한다.

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

 

*참고 그림

 

영속, 비영속 영역

 

참조: 김영한님의 '자바 OEM 표준 JPA 프로그래밍' 책 발췌

728x90

'API > JPA' 카테고리의 다른 글

[JPA] Entity 생명주기(Entity LifeCycle)  (0) 2022.08.12
JPA Annotation 정리  (0) 2021.01.18
JPA에서 플러시(flush) 개념 및 호출 방법 3가지  (0) 2021.01.18
JPA 개념 및 기초 예제 실습  (0) 2021.01.15