OSIV(Open Session In View)란 영속성 컨텍스트의 범위를 뷰까지 열어줄 것인가를 설정하는 것이다.
서비스의 사용자가 많아지면 DB커넥션에 대해 신경 써야하는데 OSIV 설정을 통해 DB커넥션의 성능을 향상 시킬 수 있다.
트랜잭션이 시작하는 시점에서 DB커넥션을 얻어서 요청이 끝날 때까지 DB커넥션을 가지고 있는다.
Service Layer의 @Transaction시작부터 -> Presentation Layer의 Response를 리턴할 때 까지 DB 커넥션을 점유한다.
그렇기 때문에 컨트롤러에서도 지연 로딩
이 가능하다.
위 컨트롤러에서order.getmember().getName()
에서 지연로딩이 발생하는데 에러가 나지 않는다.
DB커넥션를 Transaction 내부에서만 점유한다.
위 컨트롤러에서order.getmember().getName()
에서 지연로딩이 발생하는데 에러가 발생한다.
지연로딩 Query를 위한 Service Layer class 생성은 Command와 Query를 분리한다는 것으로 컨트롤러에서 지연로딩을 처리해야 할 때 Query용 Service를 만드는 것을 의미한다.
Ex) OrderService : 핵심 비즈니스 로직
OrderQueryService : 화면이나 API에 맞춘 서비스(주로 읽기 전용 트랜잭션)