WEB/JPA

실전! 스프링부트와 JPA와 활용2 (OSIV와 성능 최적화)

Tony Lim 2021. 4. 6. 16:44
728x90

spring.jpa.open-in-view = true가 default다.

트랜잭션이 끝나도 api 단에서 lazy loading 때문에 프록시를 초기화하는 경우가있기에 db connection 을 계속 가지고 있다. 

application에서 응답이 나갈떄까지 끝까지 살아 있다. 지연로딩이 가능했던 이유이다.

하지만 커넥션을 너무 오래 들고 있기 때문에 실시간 트래픽이 중요한 앱에서는 커넥션이 모자라 장애로 이어 질 수 있다.

영속성컨텍스트 view rendering이 끝나는 시점에 끝난다. 즉 view rending 도중에도 영속성 컨텍스트에서 도움을 받을 수 있다.

OSIV Off

db connection을 짧은 기간 동안 만 유지하는 것이다. 커넥션 리소스를 낭비하지 않게 될 수 있다.

모든 lazy loading 트랜잭션 안에서 처리해줘야한다. fetch join 등 을 사용해서 로딩을 강제로 시켜놔야한다.

쿼리전용 서비스 단을 만들어줘서 컨트롤러단에서는 그냥 받아오기만 하는 역할로 수정을 할 수도 있다.

 

728x90