[JPA] 6. 영속성 컨텍스트란?

2022. 4. 11. 23:13· BE/JPA
목차
  1. 영속성 컨텍스트
반응형

자바 ORM 표준 JPA 프로그래밍

 

 

 

이 포스팅에서 작성하는 내용은 자바 ORM 표준 JPA 프로그래밍 (김영한 지음) 에서 발췌하였습니다.

 

 

영속성 컨텍스트

- "엔티티를 영구 저장하는 환경" 이라는 뜻

- JPA를 이해하는데 가장 중요한 개념

- JPA를 이용하면 영속성 컨텍스트라는 개념이 자주 등장하니 초기에 잡아주는 것이 중요

- JPA와 Java 객체 사이의 임시 보관소? 라고 생각하면 쉽다.

→ 이 임시 보관소에 들어가야 JPA 관련 작업이 가능하다.

 

1. 엔티티 매니저 & 영속성 컨텍스트

- 영속성 컨텍스트는 논리적인 개념(눈에 보이지 않음)

- 엔티티 매니저를 통해서 영속성 컨텍스트에 접근

 

 

2. 엔티티의 생명주기

  • 비영속 (new/transient)
    • 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태
// JPA와 관련없이 단순히 객체를 생성하고 정의한 상태
MemberInfo memberInfo = new MemberInfo();
memberInfo.setMemberId(5L);
memberInfo.setMemberName("홍길동");
  • 영속 (managed)
    • 영속성 컨텍스트에 관리되는 상태
// JPA와 관련없이 단순히 객체를 생성하고 정의한 상태
MemberInfo memberInfo = new MemberInfo();
memberInfo.setMemberId(5L);
memberInfo.setMemberName("홍길동");

// 엔티티 매니저를 이용하여 영속성 컨텍스트에 접근
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

// 객체를 저장한 상태 (영속)
em.persist(memberInfo);
  • 준영속 (detached)
    • 영속성 컨텍스트에 저장되었다가 분리된 상태
// JPA와 관련없이 단순히 객체를 생성하고 정의한 상태
MemberInfo memberInfo = new MemberInfo();
memberInfo.setMemberId(5L);
memberInfo.setMemberName("홍길동");

// 엔티티 매니저를 이용하여 영속성 컨텍스트에 접근
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

// 객체를 저장한 상태 (영속 상태)
em.persist(memberInfo);

// memberInfo 엔티티를 영속성 컨텍스트에서 분리 (준영속 상태)
em.detach(memberInfo);
  • 삭제 (removed)
    • 삭제된 상태
// JPA와 관련없이 단순히 객체를 생성하고 정의한 상태
MMemberInfo memberInfo = new MemberInfo();
memberInfo.setMemberId(5L);
memberInfo.setMemberName("홍길동");

// 엔티티 매니저를 이용하여 영속성 컨텍스트에 접근
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

// 객체를 저장한 상태 (영속 상태)
em.persist(memberInfo);

// 영속성 컨텍스트에서 해당 엔티티를 삭제 (삭제 상태)
em.remove(memberInfo);

 

 

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

  • 1차 캐시
    • DB에서 가져오거나 persist를 이용해서 엔티티를 넣은 경우, 1차 캐시에 저장하고 그 이후에 조회할 때 DB에서 조회하지 않고 캐시에서 가져옴
    • 트랜잭션 내부에서만 동작.
    • 다른 JPA와 공유하는 건 2차 캐시라고 함
    • 트랜잭션 내부에서만 동작하기 때문에 찰나의 순간에서 사용
  • 동일성 보장
    • 동일 트랜잭션 내에서 같은 데이터를 서로 다른 엔티티에 두었을 때, 이 서로 다른 엔티티는 동일성을 만족한다.
  • 트랜잭션을 지원하는 쓰기 지연
    • 트랜잭션에서 쿼리들을 모아서 커밋할 때 한 번에 입력한다.
    • 쿼리 하나씩 입력해서 자주 왔다갔다 하는 것 보다 한 번에 가는 것이 효율적
  • 변경 감지
    • 트랜잭션 내에서 영속성 컨텍스트 내의 데이터를 수정 시, 커밋할 때 변경된 내용을 알아서 UPDATE 쿼리로 입력
    • 스냅샷을 찍어두고 커밋할 때 비교해서 변경된 내용을 알아냄
  • 지연 로딩
    • 특정 엔티티를 조회할 때 연관된 엔티티를 한 번에 조회하지 않고, 그 연관된 엔티티가 실제로 사용될 때 조회하는 옵션
    • 즉시 로딩 : 특정 엔티티를 조회할 때 연관된 엔티티를 한 번에 조회

 

반응형

'BE > JPA' 카테고리의 다른 글

[JPA] 8. 엔티티 매핑  (0) 2022.04.13
[JPA] 7. 플러시 & 준영속상태  (0) 2022.04.13
[JPA] 5. JPA에서 리스트를 조회해보자  (0) 2022.04.05
[JPA] 4. JPA 맛보기  (0) 2022.03.31
[JPA] 3. JPA 프로젝트 세팅  (0) 2022.03.26
  1. 영속성 컨텍스트
'BE/JPA' 카테고리의 다른 글
  • [JPA] 8. 엔티티 매핑
  • [JPA] 7. 플러시 & 준영속상태
  • [JPA] 5. JPA에서 리스트를 조회해보자
  • [JPA] 4. JPA 맛보기
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (514)
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (195)
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 코테 공부
  • JPA
  • MongoDB with Node.js
  • 자기 공부
  • 자기개발
  • 프로젝트로 배우는 Vue.js 3
  • 코틀린
  • vue3 공부
  • 자바공부
  • 전산회계 2급 준비
  • java 8
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • 자기공부
  • MongoDB 기초부터 실무까지
  • 알고리즘공부
  • Oracle
  • 자바 개발자를 위한 코틀린 입문
  • 자바 공부
  • junit5
  • Effective Java
  • 이펙티브 자바
  • 알고리즘 공부
  • 코테공부
  • 자바 테스팅 프레임워크
  • Java to Kotlin
  • JPA 공부
  • 자기 개발
  • 더 자바 Java 8
  • 이펙티브자바
  • MongoDB 공부

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[JPA] 6. 영속성 컨텍스트란?
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.