2026/05/09 3

OSIV · 낙관적 락 · 비관적 락

1. OSIV (Open Session In View)OSIV란?기본적으로 영속성 컨텍스트는 @Transactional 메서드 단위로 살아있다. OSIV가 켜지면 이 생명주기가 HTTP 요청 단위로 확장된다. Filter/Interceptor 레벨에서 영속성 컨텍스트를 열고, HTTP 응답이 클라이언트에게 보내질 때까지 유지한다.Spring Boot는 OSIV를 기본적으로 켜놓는다 (spring.jpa.open-in-view=true).OSIV가 켜져 있을 때HTTP Request 도착 → OpenEntityManagerInViewInterceptor.preHandle() → EntityManager 생성 (영속성 컨텍스트 시작) → Controller → Service (@Transaction..

N+1문제와 Fetch 전략 - LAZY, Fetch Join, @BatchSize

1. Fetch 전략 — EAGER vs LAZY전략 동작 JPA 기본값EAGER엔티티 로드 시 연관 엔티티도 즉시 JOIN으로 함께 로드@ManyToOne, @OneToOneLAZY연관 엔티티의 프록시만 만들어두고, 실제 접근 시 추가 쿼리@OneToMany, @ManyToMany @ManyToOne과 @OneToOne의 기본값이 EAGER라는 점이 함정이다. 명시하지 않으면 조회할 때마다 연관 엔티티를 함께 JOIN해온다. 모든 연관관계는 LAZY로 두는 것이 권장된다.@ManyToOne(fetch ..

Java & Spring/JPA 2026.05.09

영속성 컨텍스트 메커니즘 - 1차 캐시 · Dirty Checking · 쓰기 지연

1. JPA와 HibernateJPA(Jakarta Persistence API) 는 자바 객체를 관계형 DB에 매핑하는 명세이다. 인터페이스와 어노테이션의 집합일 뿐, 실제 동작 코드는 없다.Hibernate 는 이 명세의 구현체다. JPA보다 먼저 존재했고, 오히려 JPA 명세가 Hibernate의 영향을 받아 만들어졌다. 구분 JPA Hibernate위치명세구현체패키지jakarta.persistence.*org.hibernate.*역할인터페이스/어노테이션 정의실제 동작 코드sprin..

Java & Spring/JPA 2026.05.09