✏️ [1]영속성 컨텍스트(Persistence Context)

박상민·2023년 9월 24일
0

JPA

목록 보기
3/24
post-thumbnail

JPA를 이해하려면 영속성 컨텍스트를 이해해야한다.
JPA에서 가장 중요한 2가지

  • 정적인 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping)
  • 영속성 컨텍스트

또한, 엔티티 매니저 팩토리와 엔티티 매니저에 대해서 이해해야 한다.

웹 애플리케이션 개발을 한다고 하면 사진 속 엔티티 매니저 팩토리를 통해서 고객의 요청이 올 때마다 엔티티 매니저를 생성한다. (절대로 엔티티 매니저를 공용으로 사용하면 안된다.)
이 엔티티 매니저는 내부적으로 데이터 베이스 커넥션을 사용해서 DB를 사용한다.

⭐️ 영속성 컨텍스트(Persistence Context)

  • 영속성 컨텍스트는 JPA를 이해하는데 가장 중요한 용어
  • "엔티티를 영구 저장하는 환경"이라는 뜻
  • EntityManager.persist(entity);
    • 엔티티를 DB에 저장하는 것이 아닌 영속성 컨텍스트에 저장하는 것(영속화)

엔티티 매니저? 영속성 컨텍스트?
영속성 컨텍스트는 논리적인 개념이다. 눈에 보이지 않고 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다.


엔티티 매니저를 생성하면 그 안에 1:1로 영속성 컨텍스트가 생성된다. 쉽게 말하면 엔티티 매니저 안에 영속성 컨텍스트라는 눈에 보이지 않는 공간이 생기는 것이다.

📌 Entity의 생명주기


• 비영속 (new/transient)
• 영속 (managed)
• 준영속 (detached)
• 삭제 (removed)

✔︎ 비영속 (new/transient)

  • 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
  • 최초의 객체를 생성한 상태
//객체를 생성한 상태(비영속)
Member member = new Member()
member.setId(1L)
member.serName("Hello")

JPA에 관계없이 객체만 생성했다. 이것은 JPA랑 전혀 관계가 없는 상태이다. 이런걸 비영속 상태라고 한다.

✔︎ 영속 (managed)

  • 영속성 컨텍스트에 관리되는 상태
  • entityManager.persist() -> 영속 상태
//객체를 생성한 상태(비영속)
Member member = new Member()
member.setId(1L)
member.serName("Hello")

EntityManager em = emf.createEntityManager(); //emf는 Entity Manager Factory이다.
em.getTransaction().begin();

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

## 객체가 DB로 날라감
em.getTransaction().commit();

객체를 생성한 다음 엔티티 매니저에 persist 해서 객체를 넣음면 엔티티 매니저 안에 있는 영속성 컨텍스트에 객체가 들어가면서 영속 상태가 된다.

persist를 하면 DB에 저장이 되는 것이 아니다.
persist를 하면 영속성 컨텍스트에 넘어갔다가 트랜잭션을 커밋하는 시점에 영속성 컨텍스트에 있는 DB의 쿼리가 날아간다.

✔︎ 준영속 (detached), 삭제 (removed)

-영속성 컨텍스트에 저장되었다가 분리된 상태

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

-삭제된 상태

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

다음 글에서는 영속성 컨텍스트의 이점에 대해서 작성하겠다.
출처
자바 ORM 표준 JPA 프로그래밍 강의
게시글에서 사용한 모든 사진 자료는 위 강의 속 자료입니다.

profile
스프링 백엔드를 공부중인 대학생입니다!

0개의 댓글