TIL

+20 영속성 컨텍스트란? 영속성 컨텍스트의 기능

JAVABOZA 2023. 7. 4. 08:56

영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다.

영속성 컨텍스트는 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다.

엔티티 매니저(EntityManager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 된다.

--> 엔티티 객체를 효율적으로 쉽게 관 리하기 위해 만들어진 공간

 

  • 효율적으로 처리하기 위해 JPA는 영속성 컨텍스트에 Entity 객체들을 저장하여 관리하면서 DB소통합니다.
  • 영속성 컨텍스트에 접근하여 Entity 객체들을 조작하기 위해서는 EntityManager가 필요합니다.
  • EntityManager는 이름 그대로 Entity를 관리하는 관리자입니다.
  • 개발자들은 EntityManager를 사용해서 Entity저장하고 조회하고 수정하고 삭제할 수 있습니다.
  • EntityManagerEntityManagerFactory를 통해 생성하여 사용할 수 있습니다.

EntityManagerFactory는 일반적으로 DB 하나하나만 생성되어 애플리케이션이 동작하는 동안 사용됩니다.

 

 

 

 

 

엔티티의 생명주기

- 비영속 ( Member member = new Member ): 영속성 컨텍스트와 전혀 관계가 없는 상태

 ㄴ 엔티티 객체를 생성했지만 아직 영속성 컨텍스트에 저장하지 않은 상태

 

- 영속 ( em.persist() ) : 영속성 컨텍스트에 저장된 상태

  ㄴ 엔티티 매니저를 통해서 엔티티를 영속성 컨텍스트에 저장한 상태를 말하고 있으며, 영속성 컨텍스트에 의해

      의해 관리 된다는 뜻

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

   ㄴ 영속성 컨텍스트가 관리하던 영속 상태의 엔티티 더이상 관리하지 않는 상태

- 삭제 (em.remove())  : 삭제된 상태

   ㄴ 엔티티를 영속성 컨텍스트와 데이터베이스에서 삭제

 

 

 

영속성 컨텍스트가 엔티티를 관리했을 때 장점

1차캐시

 ㄴ 영속 상태의 엔티티를 이곳에 저장

 ㄴ 1차 캐시의 키는 식별자값(데이터베이스의 기본 키) 값은 엔티티의 인스턴스

Member member = em.find(Member.class, "member1");

동일성보장

 ㄴ 엔티티의 동일성 보장

Member a = em.find(Member.class, "member1");
Member b = em.find(Member.class, "member1");
System.out.print(a==b) // true

트랜잭션을 지원하는 쓰기 지연

 ㄴ 엔티티 매니저는 트랜잭션을 커밋하기 전까지 내부 쿼리 저장소에 INSERT SQL을 모아둠

      그리고 트랜잭션을 커밋할 때 모아둔 쿼리를 DB에 보냄.

 

변경감지

 ㄴ 엔티티를 수정할 때는 단순하게 엔티티를 조회해서 데이터를 변경

!! 변경감지는 영속성 컨텍스트가 관리하는 영속 상태의 엔티티만 적용!!

 

지연로딩


 

 

트랜잭션

 

Atomicity(원자성)

- 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 한다.

- 트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두가 완벽히 수행되지 않고 어느하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.

Consistency(일관성)

- 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.

- 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

 

Isolation(독립성,격리성)

- 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없다.

- 수행중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.

 

Durablility(영속성,지속성)

- 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 한다.

 

 

'TIL' 카테고리의 다른 글

+22 JWT 토큰기반 무엇일까?  (0) 2023.07.06
+21 Spring DATA JPA란 무엇??  (0) 2023.07.05
+19 JPA란 무엇일까?  (0) 2023.07.03
+ 18 인증 // 인가 그것이 무엇인가 + JWT기반 인증  (0) 2023.07.01
+17 Springboot DTO, CREATED, READ  (0) 2023.06.30