Close
Close full mode
logo만렙 개발자 키우기

(4) 정리

Git RepositoryEdit on Github
Last update: 9 months ago by nowwaterReading time: 2 min

트랜잭션 범위의 영속성 컨텍스트 전략

스프링에서 JPA를 사용하면 트랜잭션 범위의 영속성 컨텍스트 전략이 적용된다.

이 전략은 트랜잭션 범위와 영속성 컨텍스트의 생존 범위가 같다. 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍스트에 접근한다.

트랜잭션 이라는 단위로 영속성 컨텍스트를 관리하므로 트랜잭션을 커밋하거나 롤백 시 문제가 없다.

유일한 단점은 프레젠테이션 계층에서 엔티티가 준영속 상태가 되므로 지연 로딩을 할 수 없다는 것.

지연 로딩을 하기 위한 방법들

  1. 글로벌 페치 전략

    단점 : 사용하지 않는 엔티티도 조회, N + 1 문제

  1. JPQL 페치 조인

    단점 : 프레젠테이션 계층(뷰)과 데이터 접근 계층(리포지토리) 간에 의존 관계가 증가

  1. 강제로 초기화

    단점 : 비즈니스 로직을 담당하는 서비스 계층에서 프레젠테이션 계층을 위한 작업이 늘어남.

스프링 OSIV : 비즈니스 계층 트랜잭션 전략

준영속 상태에서 지연 로딩을 할 필요 없이, 프레젠테이션 계층에서도 영속 상태로 유지해준다.

기존 OSIV 는 프레젠테이션 계층에서도 엔티티를 수정할 수 있다는 단점.

스프링 프레임워크가 제공하는 스프링 OSIV는 기존의 OSIV의 이런 단점들을 해결하기 위해 조회 기능만 가능한 인터페이스를 제공하여 프레젠테이션 계층에서 엔티티 수정을 막는다.

영속성 컨텍스트는 요청과 동시에 생성되고 요청이 종료될 때 같이 종료되지만, 트랜잭션은 서비스 계층에서 커밋되면 플러시하고 끝난다.

즉, 프레젠테이션 계층은 데이터 수정이 일어나도 영속성 컨텍스트가 플러시되지 않으므로 DB에 반영되지 않는다.

프레젠테이션 계층에서 영속성 컨텍스트가 살아있어 컨트롤러에서 레포지토리를 직접 호출하여 단순한 엔티티 조회가 가능하다.

🚀 JPA — Previous
(3) OSIV
Next — 🚀 JPA
14장. 컬렉션과 부가 기능