스프링 부트로 프로젝트로 만들고 실행을 시키면, WARN 이 하나 나온다.
(spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explictily configure spring.jpa.open-in-view to disable this warning)
application.properties에서
spring.jpa.open-in-view=false 로 하면 경고문은 사라지는데 그럼 여기서 open-in-view 설정은 뭐를 의미할까?
(open-in-view의 기본 설정은 true)
open-in-view 란?
open-in-view는 JPA에서 영속성 컨텍스트가 데이터베이스 커넥션을 DB에 언제 돌려주냐를 설정할 수 있다.
예를 들어, @Transactional을 붙은 메소드를 실행하면 (주로 서비스 단이죠)
데이터베이스 트랜잭션이 실행되고, 영속성 컨텍스트가 데이터베이스 커넥션을 받아서 필요한 데이터들을 가져오는데
해당 메소드가 끝이 날 때
spring.jpa.open-in-view=true 면 영속성 컨텍스트가 데이터베이스 커넥션을 반납하지않고,
spring.jpa.open-in-view=false 면 영속성 컨텍스트가 데이터베이스 커넥션을 반납한다.
spring.jpa.open-in-view=true 일 때는 Client에게 응답이 되고 난 후에 DB 커넥션을 반납한다. ❗
사용 용도
true 사용 하는 경우
어드민 같은 사용량이 많지 않은 경우는 true로 사용하여 지연로딩을 @Transactional 을 벗어난 곳에서도 할 수 있는 유연함을 챙길 수 있다.
false 사용 하는 경우
사용량이 많은 서비스를 제공하는 어플리케이션 에서는 false로 두어 DB 커넥션을 바로 반납하게 하여, 마르지 않도록 하는 것이 좋으며,
대신 @Transaciotnal이 붙은 메소드 안에서 (필요에 따라) 지연로딩과 관련 초기화를 전부 시켜줘야 한다.
'개발 관련 부가 지식 > 자바, 스프링' 카테고리의 다른 글
스프링 Race Condition 해결 방안 (0) | 2023.03.02 |
---|---|
Java Queue 구현 (0) | 2023.02.22 |
자바 객체 타입은 불변으로, 비교 방법 (공유참조, 값 복사) (0) | 2023.02.14 |
스프링 JPA 사용, 프록시 entity 확인 메소드 (0) | 2023.02.13 |
자바란, JVM 구조에 대해서 정리 (0) | 2023.01.19 |