영속성

박민서·2023년 5월 10일
0

Jpa1

목록 보기
2/6

JPA강의를 시청하다가 영속성에대해 더 자세히 알고 싶어서 작성하게됨

persistence : 고집

persist : 집요하게 계속하다.

JPA에서 영속성은 두 단어의 뜻처럼 Entity를 영구적으로 저장해주는 환경을 의미한다.

영속성

  • 정의
    • 프로그램이 데이터를 생성하고 종료되어도 사라지지 않는 데이터의 특성
    • 데이터나 파일을 데이터베이스에 영구 저장함으로써 데이터에 영속성을 부여한다.

EntityManagerFactory 와 EntityManager

  • EntityManagerFactory

    • 생성하는데 비용이 크기 때문에 애플리케이션 전체에서 한 번만 공유하도록 설계되어 있다.
    • 여러 스레드가 동시에 접근해도 안전하다. 따라서 서로 다른 스레드 간에 공유가 가능하다.
  • EntityManager

    • 생성하는데 비용이 거의 들지 않는다.
    • 여러 스레드가 동시에 접근하면 동시성 문제가 발생하기 때문에 스레드 간에 절대 공유하지 않는다.
    • 데이터베이스 연결이 꼭 필요한 시점까지 (보통 트랜잭션을 시작할 때) 커넥션을 얻지 않는다.
    • @Entity를 달고 있는 Entity 객체들을 Persistence Context에서 관리한다.
  • 스레드

    • 어떠한 프로그램 내에서, 어떠한 프로세스 내에서 실행되는 흐름의 단위.
    • 일반적으로 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경의 따라 둘 이상의 스레드를 동시에 실행할 수 있다.
  • Persistence Context

    • @PersistenceContext는 EntityManager를 생성하는 클래스

영속성 컨텍스트

엔티티를 영구적으로 저장하는 환경이라는 뜻. EntityManager를 이용해 Entity를 저장하거나 조회할 때 EntityManager는 영속성 컨텍스트에 Entity를 보관하고 관리한다. EntityManager객체.persist(Entity객체)를 실행하면 영속성 컨텍스트가 Entity를 관리하게 된다.

  • 영속성 컨텍스트는 Entity 를 식별자 값으로 구분한다.

    • Entity에서 @Id 어노테이션을 통해 지정한 멤버변수가 영속성 컨텍스트에 식별자 값으로 저장된다.
    • JPA는 보통 트랜잭션을 커밋하는 순간 영속성 컨텍스트에 새로 저장된 Entity를 데이터베이스에 반영한다 -> flush
  • 1차 캐시를 이용한다.

    • 영속성 컨텍스트 내부에 존재하는 캐시(Map)를 1차 캐시라 한다. 영속 상태의 Entity는 모두 이곳에 저장되어 있으며 키는 @Id로 매핑한 식별자이며 값은 Entity 인스턴스이다.
    • entityManager.find() 메소드를 호출하면 먼저 1차 캐시에서 Entity를 찾고, 만약 찾는 Entity가 1차 캐시에 없으면 데이터베이스에서 조회한 후 1차 캐시에 저장하고 영속 상태인 해당 객체를 반환한다.
  • 지연 로딩을 수행한다.

profile
ㅎㅇㅌ

0개의 댓글