T_era
영속성 컨텍스트 - JPA 핵심 개념 : 동일성 보장 및 쓰기 지연 본문
1. 동일성 보장 (Identity Guarantee)
- 동일 트랜잭션 내 조회된 Entity는 동일 인스턴스 반환.
- 영속성 컨텍스트의 1차 캐시 활용.
- DB 조회 후 1차 캐시에 저장, 이후 동일 조회 시 1차 캐시에서 반환.
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("your_persistence_unit");
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
// DB 조회, 1차 캐시에 저장
Tutor findTutor1 = em.find(Tutor.class, 1L);
// 1차 캐시 조회
Tutor findTutor2 = em.find(Tutor.class, 1L);
// true 반환
System.out.println("findTutor1 == findTutor2 : " + (findTutor1 == findTutor2));
transaction.commit();
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
}
2. 쓰기 지연 (Transactional Write-Behind)
- 동일 트랜잭션 내 생성된 SQL을 Commit 시점에 일괄 반영.
- 쓰기 지연 저장소 활용.
- persist() 호출 시 SQL 즉시 전송 X, 쓰기 지연 저장소에 보관.
- transaction.commit() 시 영속성 컨텍스트 Flush, 쓰기 지연 저장소의 SQL 일괄 실행 후 DB 반영.
성능 최적화:
- 네트워크 통신 횟수 감소, 성능 향상.
- hibernate.jdbc.batch_size 설정으로 동일 유형 SQL 묶어서 전송 가능.
@GeneratedValue(strategy = GenerationType.IDENTITY) 사용 시 주의사항:
- 해당 전략 사용 시 persist() 호출 시점에 즉시 INSERT SQL 실행, 쓰기 지연 무시.
결론적으로, 동일성 보장은 트랜잭션 내 객체 참조 일관성 유지 및 불필요한 DB 조회 감소에 기여하며, 쓰기 지연은 DB 통신 횟수 최적화로 성능 향상에 기여한다.
'Programing > Spring' 카테고리의 다른 글
| JPA 관련 설정 (0) | 2025.05.15 |
|---|---|
| 변경 감지(Dirty Checking) (0) | 2025.05.15 |
| 영속성 컨텍스트 - Entity 생명주기 및 캐시 (0) | 2025.05.15 |
| 공통 관심사(Cross-Cutting Concerns)와 Servlet Filter (0) | 2025.05.15 |
| JWT 보안 취약점 및 대응 방안 (0) | 2025.05.15 |