Skip to content

Latest commit

 

History

History
45 lines (36 loc) · 2.95 KB

영속성_컨텍스트.md

File metadata and controls

45 lines (36 loc) · 2.95 KB

JPA에서 영속성 컨텍스트가 중요하다는데, 영속성 컨텍스트가 무엇이고, 왜 중요한걸까?

영속성 컨텍스트란 무엇인가?

  • 엔티티를 영구 저장하는 환경이라는 뜻으로, 자바 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다.

엔티티 매니저 팩토리란 무엇인가요?

  • 엔티티 매니저를 만드는 공장
  • DB를 하나만 사용하는 애플리케이션은 일반적으로 엔티티 매니저 팩토리를 하나만 생성한다.
  • 이렇게 1개마 만들어서 애플리케이션 전체에서 공유하도록 설계되어 있다.

엔티티 매니저란 무엇인가요?

  • 엔티티를 저장하고, 수정하고, 조회하고, 삭제하는 등 엔티티와 관련된 모든일(엔티티의 생명주기 포함)을 한다.

엔티티의 생명주기

  1. 비영속 상태 : 영속성 컨텍스트와 전혀 관계가 없는 상태
  2. 영속 상태 : 영속성 컨텍스트에 저장된 상태
  3. 준영속 상태 : 영속성 컨텍스트에 저장되었다가 분리된 상태
  4. 삭제 : 영속성 컨텍스트와 DB에서 삭제된 상태

영속성 컨텍스트는 어떤 특징을 가지고 있나?

  1. 영속성 컨텍스트는 식별자 값으로 엔티티를 구분하고, 영속 상태에서는 식별자 값이 반드시 있어야 한다. 만약, 식별자 값이 없으면, 예외가 발생한다.
  2. 엔티티를 영속성 컨텍스트에 저장하면, JPA는 보통 트랜잭션을 commit 하는 순간 영속성 컨텍스트에 새로 저장된 엔티티를 DB에 바영한다. -> Flush

flush

  • 영속성 컨텍스트의 변경 내용을 DB에 반영한다. 이떄, 영속성 컨텍스트의 변경 내용을 DB에 동기화하는 것이지, 영속성 컨텍스트에 보관된 엔티티를 지운다고 생각해서는 안된다.
  • 영속성 컨텍스트를 flush 하는 3가지 방법 방법 1. em.flush()를 직접 호출한다. 방법 2. TX commit시, flush가 자동 호출된다. 방법 3. JPQL 쿼리 실행시, flush가 자동 호출된다.
  • flush 실행하면, 다음과 같이 동작한다.
  1. 변경 감지가 동작해서, 영속성 컨텍스트에 있는 모든 엔티티를 스냅샷과 비교해서 수정된 엔티티를 찾는다.
  2. 수정된 엔티티는 수정 쿼리르 만들어 쓰지 지연 SQL 저장소에 등록한다.
  3. 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송한다.

엔티티를 연속성 컨텍스트가 관리했을 떄의 장점은 무엇인가요?

  1. 1차 캐시
  2. 동일성 보장
  3. TX를 지원하는 쓰기 지연
  4. 변경 감지
  5. 지연 로딩

엔티티를 연속성 컨텍스트가 관리했을 떄의 단점은 무엇인가요?

  • 영속성 컨텍스트를 사용하면 엔티티 관리 및 생명주기 관리에 관한 복잡성이 추가될 수 있다.
  • 이로 인해 관리 포인트가 늘어날 수 있으며, 이를 잘못 이해하거나 관리하지 않으면 버그가 발생할 수 있다.