본문 바로가기

개발 관련 부가 지식/자바, 스프링

spring.jpa.open-in-view 란?

728x90
728x90

스프링 부트로 프로젝트로 만들고 실행을 시키면, 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이 붙은 메소드 안에서 (필요에 따라) 지연로딩과 관련 초기화를 전부 시켜줘야 한다.