스프링부트-JPA-활용-9

존스노우·2022년 1월 21일
0

스프링

목록 보기
22/22

OSIV와 성능 최적화

spring.jpa.open-in-view : true 기본값

애플리케이션 시작시 워닝이 뜨는 이유는?

언제 데이터베이스 커넥션을 가져올까?

기본적으로는 데이터베이스 트랜잭션을 시작할 때.. 데이터베이스 커넥션을 가져옴

언제 데이터베이스에 커넥션을 돌려 줄까?
OSIV가 켜져있으면 ..

컨트롤러 돌아 올때 까지 반환을 안함.
api 가 유저에게 돌려줄 때까지 화면일 경우 유저한테 반환 될 때 까지
데이터베이스 커넥션을 물고 있다.
영속성과 데이터베이스 커넥션이 끝까지 살아 있다.

respone가 출력되고 사라진다.

그러나 실시간 트래픽이 중요한 애플리케이션에는 커넥션이 모자름 ..
계속 커넥션 리소스를 사용해서..

장점 : 엔티티를 적극 활용해서 컨트롤러나 View에서 레이지 로딩을 사용해서
중복도 줄이고 투명하게 LazyLoading을 활용해 코드를 유지보수하기 편해진다.

spring.jpa.open-in-view : false 종료

서비스 단에서 끝나버림.

커넥션 리소스를 낭비하지 않음

영속성 컨텍스트 생존 범위 안에서 지연 로딩을 강제로 호출 해 두어야 함.

트랜잭션 안에 넣거나 OR fetch join 을 사용해서 해결..

다른 해결 방법은

서비스계층으로 로직을 옮겨서겨서 실행

true 옵션은 장점이 컨트롤러에서 쿼리 서비스 같은걸 안만들고 구현가능

profile
어제의 나보다 한걸음 더

0개의 댓글