개발지식

(JPA) 영속성 컨텍스트

우루쾅 2025. 7. 23. 06:40
728x90
반응형
SMALL

영속성 컨텍스트란

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

 

EntityManager.persist(entity);

 

영속성 컨텍스트를 통해서 엔티티를 영속화 하는 것!

 

영속화란...

더보기

영속화는 일반적으로 어떤 상태나 데이터를 프로그램 종료 후에도 유지되도록 저장하는 것을 의미합니다. 

 

특히, 컴퓨터 과학에서는 데이터베이스에 객체나 정보를 저장하여 프로그램이 종료된 후에도 그 데이터가 사라지지 않고 계속 사용할 수 있도록 하는 것을 영속화라고 합니다. 

 

영속성 컨텍스트를 사용하면 entity를 DB가 아닌 영속성 컨텍스트에 저장을 함!

영속성 컨텍스트는 논리적인 개념이며, 눈에 보이지 않는다

엔티티 메니저를 통해 접근을 한다.

 

그런데 그럼 엔티티 매니저와 영속성 컨텍스트의 관계는?!

 

엔티티 메니저는 영속성 컨텍스트를 관리하는 주체..! 지피티가 있어 참 좋다

 

JPA의 동작 흐름

 

✅ 전체 구조 이해

이미지에서 보여주는 큰 박스는 **영속성 컨텍스트 (EntityManager)**야.
JPA에서 em.persist()를 호출하면 다음과 같은 흐름이 발생해:


🔷 첫 번째: em.persist(memberA);

  1. 비영속 상태의 memberA 객체가 persist()를 통해 호출됨.
  2. JPA는 이 객체를 영속성 컨텍스트에 등록함. (1차 캐시 저장)
  3. 동시에 INSERT SQL문이 생성됨 (단, 실제 DB에는 아직 반영되지 않음)
  4. SQL은 쓰기 지연 SQL 저장소에 보관됨 → 커밋 시 한꺼번에 실행됨
  5. 1차 캐시에도 @Id = memberA.getId() 기준으로 등록

📌 이 시점에서:

  • memberA는 영속 상태
  • DB에는 아직 INSERT되지 않음 (보통 tx.commit() 시점에 flush됨)

🔷 두 번째: em.persist(memberB);

  1. memberB도 역시 비영속 상태에서 persist()로 등록됨
  2. 영속성 컨텍스트에 memberB도 추가되고
  3. INSERT SQL이 생성되어 쓰기 지연 SQL 저장소에 함께 보관됨
  4. memberA와 마찬가지로, 1차 캐시에 함께 등록

💡 이제 1차 캐시는 다음과 같이 구성됨:

@IdEntity
"memberA" memberA
"memberB" memberB
 

🔑 핵심 개념 요약

개념설명
em.persist(entity) 비영속 → 영속 상태로 전환, 1차 캐시에 등록
쓰기 지연(SQL 저장소) INSERT SQL은 즉시 실행되지 않고 모아졌다가 flush() 또는 commit() 시점에 실행됨
1차 캐시 같은 엔티티를 두 번 조회하면 DB가 아닌 여기서 가져옴 (성능 향상, 동일성 유지)

 

 

출처

김영한 - 자바 ORM 표준 JPA 프로그래밍 - 기본편

728x90
반응형
LIST