영속성 컨택스트

정병웅·2024년 4월 10일
0

JPA

목록 보기
1/3

JPA에서 가장 중요한 개념 중 하나인 영속성 컨택스트에 대해서 간단하게 정리해보았다. 🤔

기본 의미

애플리케이션 계층과 디비 계층 사이에 존재하는 보이지 않는 논리적 개념의 계층

라이프 사이클

  1. 애플리케이션에서 객체를 생성
Member memberA = new Member();
memberA.setName("JPA Member");
  1. 애플리케이션에서 객체를 영속성 컨텍스트에 저장
EntityManager.persist(entity);
  1. 영속성 컨택스트에 종속된 캐시에 저장, 영속성 컨택스트에 종속된 쓰기지연 SQL 저장소에 등록
  2. 커밋
  3. 트랜잭션 종료 시 영속성 컨택스트 종료

특징

EntityManager.persist(entity)

persist -> entity를 DB가 아닌 영속성 컨텍스트에 저장
엔티티매니저를 통해 영속성 컨텍스트에 접근

비영속

객체를 생성 하고 값을 셋팅한 상태
JPA랑 전혀 상관 없는 상태

영속

DB에 저장 되어 있는 상태는 아님
엔티티매니저를 생성 후 데이터를 넣는 상태
EntityManager.persist(entity)

캐시

영속성 컨텍스트가 살아 있는 동안은 캐시를 사용 가능
-> 하지만, 실무에서는 크게 영향을 주지 않는다고 함 ‼️

영속 엔티티의 동일성 보장(결국 같은 객체 들고온다는 뜻)

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

a == b를 비교하면 true 출력

플러시

  • 영속성 컨텍스트 변경 내용 -> DB 반영
  • 라이프사이클
    변경감지 -> 수정된 엔티티 쓰기지연 SQL 저장소 등록 -> 쓰기 지연 SQL 저장소의 쿼리 DB에 전송
    영속성 컨텍스트를 비우지 않음(트랜잭션이 끝날 때만 해당)
    영속성 컨텍스트의 변경 내용을 디비에 동기화
profile
인생은 IT 노가다

0개의 댓글