공부/JPA

OSIV

kkkkkdddddhhhhh 2023. 12. 18. 00:40

Open Session in View :

JPA에서 영속성 컨텍스트의 생존 범위를 어디까지 설정할지 처리하는 패턴.

 

따로 설정해놓지않으면 기본값은 true로 되어있다.

true인 경우 Open Session in view 이름 그대로 Spring에서 View를 반환할때 까지 영속성 컨텍스트가 생존한다.

 

컨트롤러 계층에서 지연로딩 초기화가 가능하단 이야기.

 

이 경우의 장점은 앞서 말한 영속성 컨텍스트의 생존 범위가 대략 인터셉터부터 리파지토리까지 요청을 받고 응답을 보낼때까지 살아있기때문에 코드 작성이 수월해진다.

 

어느 계층에서던 Entity를 조회하거나 초기화 할  수 있다.

 

단점으로 그만큼 요청이 처리되는 긴 시간동안 데이터베이스 커넥션을 계속 가지고있기에 웹 어플리케이션 성능에 문제가 생길 수 있다. 

 

 

false로 설정해 꺼놓는 경우.

Transaction이 유지되는한에서만 영속성 컨텍스트가 생존한다.

 

보통 서비스 레이어에서 @Transaction을 사용하기때문에 서비스 메서드내에서 영속성컨텍스트가 생기고 사라지게 된다. 

 

이 이야기는 

 

'영속성컨텍스트의 생존범위가 줄어든다 == 데이터베이스 커넥션에 관한 리소스도 줄어든다'

 

이기때문에 웹 어플리케이션 성능에 있어서 장점이있다.

 

 

보통 실무에서 고객간 실시간 API 응답이 많은 프로덕션일경우 OpenSessionInView를 꺼둔다. (성능 문제로 인해)

하지만 요청이 잦지않은 어드민 웹 어플리케이션일 경우 OpenSessionInView를 true로 켜둔다고한다.

 

'공부 > JPA' 카테고리의 다른 글

Collection fetch Join (~~ toMany 관계)  (0) 2023.12.16
JPA N + 1 과 FetchJoin  (0) 2023.12.15