개발자 공부 업무 정보/DEBUG

OSIV 2편

회님 2022. 12. 29. 10:00
반응형

https://itallinform.tistory.com/41

 

OSIV 1편

JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning JPA를 이용하여 간단한

itallinform.tistory.com

 

1편에 이어

 

OSIV가 ON, OFF될 때 어떤 영향이 있는지 알아보자

 


OSIV ON

 

 

OSIV ON

 

OSIV ON 상태에선 위 그림처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때 까지

영속성 컨텍스트와 데이터베이스 커넥션을 유지한다.

 

이렇게 영속성 컨텍스트가 유지가 되면 

@ManyToOne(fetch = FetchType.LAZY)

와 같이 LAZY 설정을 하여 지연로딩이 가능하다.

 

지연로딩은 영속성 컨텍스트가 살아있어야 가능하고

영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지한다.

 


 

OSIV OFF

 

 

OSIV OFF

 

OSIV OFF 상태에선 위 그림처럼 트랜젝션을 종료할 때 ( 트랜젝션 범위 내에서 ) 영속성 컨텍스트를 닫고,

데이터베이스 커넥션도 반환한다.

 

따라서 커넥션 리소스를 낭비하지 않는다.

 

OSIV ON 과 달리 OFF상태에서는  모든 지연로딩을 트랜잭션 안에서 처리해야한다.

 

지연로딩 관련 코드들을 트랜잭션 안으로 넣어야 한다는 단점이 있으며 view 단에서 지연로딩이 동작하지 않는다.

 

결론적으로 트랜잭션이 끝나기 전에 지연 로딩을 강제로 호출해 두어야 한다.

 

 

그럼 어떻게 하는게 좋을지 3편에서 알아보도록 하자.

반응형