본문 바로가기

Spring 인강 정리/자바 ORM 표준 JPA 프로그래밍 - 기본편

영속성(Persistence) 컨텍스트 란?


JPA에서 가장 중요한 특성 2가지

  • 객체와 관계형 데이터베이스 매핑하기(Object Relational Mapping)
  • 영속성 컨텍스트

1. 영속성 컨텍스트

  • "엔티티를 영구 저장하는 환경" 이라는 뜻
  • 논리적인 개념으로 눈에 보이지 않는다.
  • 엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다.
  • JPA는 영속성 컨텍스트를 이용하여 엔티티의 라이프 사이클을 관리한다.

엔티티 매니저 팩토리와 엔티티 매니저


2. 엔티티의 생명주기

  • 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
            Member member = new Member();
            member.setId("member1");
            member.setUsername("회원1");
  • 영속(managed) : 영속성 컨텍스트에 의해 관리되는 상태
            EntityManager em = emf.createEntituyManager();
            em.getTransaction().begin();
    
            em.persist(member); //영속
  • 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태
        em.detach(member);
  • 삭제(removed) : 삭제된 상태
        em.remove(member);

 



3. 영속성 컨텍스트의 이점

* 1차 캐시 : 영속성 컨텍스트는 1차 캐시를 이용하여 CRUD 코드 실행 시, 1차적으로 캐시에서 조회를 한다. 

  • 1차 캐시에 저장되어 있지 않은 정보일 경우에 쿼리를 날려 DB에서 조회를 실행한다.
  • 쿼리문을 더 적게 실행하게 되므로 성능에 이점

 

  • 영속 엔티티의 동일성 보장 
    : 1차 캐시로 반복 가능한 읽기 등급의 동일한 트랜젝션 격리 수준을 데이터베이스가 아닌 애플리케이션 차원에서 제공
    같은 정보를 두번 가져오게 되면, 두번째는 1차 캐시에서 가져오게 되므로 자바 컬렉션과 같이 주소가 같고 값이 복사되는 형식
        Member a = em.find(Member.class,"member1");
        Member b = em.find(Member.class,"member2");

        System.out.println(a == b);//true

 

  • 쓰기 지연
    : transaction.commit(); 을 통해 영속성 컨텍스트에 등록된 SQL을 한번에 데이터베이스에 요청.
    값은 1차 캐시에, 쿼리는 쓰기 지연 SQL 저장소에 저장되었다가 한번에 보내지는 방식

 

  • 엔티티 수정 시, 변경 감지
    : 엔티티가 수정되면 1차 캐시에서 스냅샷(값을 읽어온 최초의 시점을 복사)과 비교를 하고 값이 다르다면 쓰기 지연 SQL 저장소에 update 쿼리 저장

 

* 플러시 : 영속성 컨텍스트의 변경내용을 데이터베이스에 반영

        em.flush(); //1. 직접 호출
        transaction.commit(); //2. 플러시 자동 호출
        query = em.createQuery("select m from Member m", Member.class);
        List<Member> members = query.getResultList(); //3. JPQL 자동 호출

이전 글 보기 -

https://dev-pine.tistory.com/entry/JPAJava-Persistence-API-란

 

JPA(Java Persistence API) 란?

1. JPA(Java Persistence API) 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음 JPA 2.1 표준 명세를 구현한 3가지 구현체: Hibernate, EclipseLink, DataNucleus * ORM(Object-relational mapping, 객체 관계..

dev-pine.tistory.com

해당 포스트는 김영한님의 자바 ORM 표준 JPA 프로그래밍을 듣고, 정리한 글입니다.
https://www.inflearn.com/course/ORM-JPA-Basic#%EF%BB%BF

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런

www.inflearn.com