상세 컨텐츠

본문 제목

🐲 영속성 관리(2) - 연속성 컨텍스트(Persistence Context)

영속성 관리

by 개발하는 정복자 2022. 5. 13. 22:27

본문

- 도입 🫶🏾

영속성이 뭔지도 모른체 JPA를 사용한다면 간단한 구현은 가능할지라도 큰 프로젝트를 경험하게 된다면 한계에 직면하게 될것이다.

그러니 꼭 이해하길 권한다. 저번 시간의 영속성 관리(1) - EntityManager (앤티티 매니저) 👨‍💼🏭  를 충분히 이해한 상태에서 이 글을 읽는게 수월할 것이다. 저자 김영한의 자바 ORM 표준 JPA 프로그래밍 📚 을 참고했다.

 


- 본론 ✌🏿

영속성 컨텍스트란? 

영속성 컨텍스트는 쉽게 말해 엔티티를 영구 저장하는 환경이란 뜻이다. 이것은 논리적 개념에 가깝고 눈에 보이지도 않는다.

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

영속성 컨텍스트는 엔티티 매니저를 생성할 때 하나 만들어진다.

 

엔티티의 생명주기 ♻️

< 엔티티의 4가지 속성 >

1. 비영속(new/transient): 영속성 컨텍스트와 전혀 관계가 없는 상테

2. 영속(managed): 영속성 컨텍스트에 저장된 상태

3. 준영속(detached): 영송성 컨텍스트에 저장되었다가 분리된 상태

4. 삭제(removed): 삭제된 상태

 

👉🏾 비영속

  • 순수한 객체 상태
  • 영속성 컨텍스트나 데이터베이스와는 전혀 관련이 없다.
Member member = new Memeber();
member.setId("member1");
member.setUsername("회원1");

 

👉🏾 영속

  • 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장한 상태
  • 영속성 컨텍스트가 관리하는 상태
@PersistenceContext
private EntityManager em;

em.persist(member);

@PersistenceContext

스프링이 처음 시작할 때, entity manager를 만들어서 빈으로 등록을 해둔다.
entity manager는 @Autowired가 아니고 특별하게 @PersistenceContext라는 어노테이션으로 주입을 해줄 수 있다.
근데 최신 스프링부트에서는 @Autowired로도 할 수 있다고 한다.

참고 : https://h32j00.tistory.com/78

 

[Spring] annotation 종류와 쓰임새

지금까지 사용했던 annotation을 정리해보겠다. @Autowired 스프링 컨테이너에 빈으로 등록되어있는 객체를 자동으로 주입해준다. @PersistenceContext 스프링에서 영속성 관리를 위해 Entity Manager가 존재한

h32j00.tistory.com

👉🏾 준영속

  • 영속성 컨텍스트가 괸라하던 영속 상태의 엔티티를 영속성 컨텍스트가 관리하지 않으면 준영속 상태가 된다.
  • 준영속으로 만드는 메서드
    • em.detach() : 준영속 만들기
    • em.close() : 영속성 컨텍스트 닫기
    • em.clear : 영속성 컨텍스트 초기화
em.detach(member);

 

👉🏾 삭제

  • 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제한다.
em.remove(member);

 

- 다음

🤑영속성 관리(3) - 영속성 컨텍스트의 특징

 

관련글 더보기

댓글 영역