Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 접근제어지시자
- for문
- 시스템 환경 변수 편집
- Thread
- IntelliJ IDEA
- 형 변환
- 메서드 오버로딩
- 컴파일
- continue문
- 상수
- JAVA기초
- While
- 포함관계
- Java
- 집합관계
- function
- 생성자
- 인텔리제이 한글 깨짐 해결법
- OPP개념
- java변수
- this예약어
- break문
- multi-threading
- JAVA객체지향
- 메서드
- 연관관계
- 자바 멀티스레딩
- 인텔리제이 기초 설정
- 반복문
- Java데이터 타입
Archives
- Today
- Total
최원종의 개발 블로그
V2(PersistentContext)- 영속성 컨텍스트 개념 정리 본문
JPA(Java Persistence API)의 핵심 메커니즘인 영속성 컨텍스트(Persistence Context)

1. 주요 구성 요소 설명
영속 컨텍스트(Entity Manager): 엔티티를 영구 저장하는 환경입니다.
애플리케이션과 DB 사이에서 객체를 관리하는 일종의 메모리 저장소 역할을 합니다.
1차 캐시: 영속 컨텍스트 내부에 있는 메모리입니다.
@Id(식별자)를 키로 사용하여 엔티티 객체(memberA, memberB)를 저장합니다.
이미 캐시에 있는 데이터를 조회할 때는 DB에 접근하지 않아 성능이 향상됩니다.
쓰기 지연 SQL 저장소: 엔티티를 저장(persist)하거나 수정할 때,
즉시 DB로 SQL을 보내지 않고 차곡차곡 모아두는 임시 보관소입니다.
2. 동작 흐름 (번호 순서)
1. commit() 호출:
트랜잭션 작업이 완료되어 사용자가 commit 명령을 내립니다.
이때 영속 컨텍스트는 내부적으로 데이터를 DB에 반영하기 위한 준비를 시작합니다.
2. flush (플러시):
쓰기 지연 SQL 저장소에 쌓여있던 쿼리들(예: INSERT A, INSERT B)을 실제 데이터베이스로 전송하는 단계입니다.
중요: 이때 데이터베이스에 쿼리는 전달되지만, 아직 확정(Commit)된 상태는 아닙니다.
3. commit (데이터베이스 커밋):
DB에 전달된 쿼리들을 최종적으로 확정 짓습니다.
이 단계가 완료되어야 비로소 데이터가 DB에 영구적으로 저장됩니다.
3. 이 방식의 장점
쓰기 지연 (Batching): 쿼리를 하나씩 보낼 때마다 DB와 통신하는 비용을 줄일 수 있습니다.
여러 개의 INSERT 쿼리를 모아서 한 번에 보냄으로써 네트워크 성능을 최적화합니다.
객체의 동일성 보장: 1차 캐시 덕분에 같은 식별자로 조회한 객체는
항상 메모리상의 동일한 인스턴스임을 보장받습니다.
핵심 요약
영속 컨텍스트란
애플리케이션과 데이터베이스 사이에서 엔티티(Entity) 객체를 효율적으로 관리하고
상태를 추적하는 '논리적인 메모리 영역'을 말함
영속 컨텍스트는 "DB 통신은 최소화하고,
객체 관리는 극대화"하여 성능과 개발 편의성을 모두 챙기는 시스템
4가지 핵심 기능 요약
1차 캐시 (1st Level Cache): 한 번 조회한 엔티티를 메모리에 저장해두어,
같은 트랜잭션 내에서 다시 조회할 때 DB를 거치지 않고 즉시 반환합니다.
쓰기 지연 (Write-Behind): 엔티티를 저장하거나 수정할 때 즉시 DB에 보내지 않고,
내부 쿼리 저장소에 모아두었다가 트랜잭션이 끝나는 시점에 한꺼번에 보냅니다.
변경 감지 (Dirty Checking): 엔티티의 데이터가 변경되면 JPA가 이를 자동으로 감지하여
트랜잭션 커밋 시점에 수정(Update) 쿼리를 생성합니다.
동일성 보장 (Identity Map): 같은 식별자(@Id)를 가진 엔티티를 조회하면
항상 메모리상의 동일한 객체 주소를 반환합니다.
동작 과정 (Lifecycle)
1. 조회/저장: 영속 컨텍스트가 엔티티를 관리하기 시작하며 1차 캐시에 저장합니다.
2. 플러시(Flush): 트랜잭션 커밋 시점에 쌓여있던 SQL 쿼리들이 실제 DB로 전송됩니다.
3. 커밋(Commit): DB에서 변경 사항을 최종적으로 확정 짓습니다.'Spring boot 입문' 카테고리의 다른 글
| V2(PersistentContext) 게시글 작성 - PersistenceContext 활용 (0) | 2026.05.07 |
|---|---|
| V2(PersistentContext)-패키지 구조 변경 (0) | 2026.05.07 |
| V1(익명블로그)-게시글 수정하기 (0) | 2026.04.30 |
| V1(익명블로그)-게시글 삭제하기 (0) | 2026.04.30 |
| V1(익명블로그)-게시글 상세보기 만들기 (0) | 2026.04.30 |
