JPA 사용하려 초기 설정을 마치고 애플리케이션을 구동시켜보면 콘솔에 아래와 같은 경고가 출력됩니다.
spring.jpa.open-in-view is enabled by default, so database queries can be performed during view rendering.To disable this alert, configure spring.jpa.open-in-view explicitly
spring:
jpa:
open-in-view: false
위와같이 .yaml 파일에 설정을 해주면 경고는 사라지는데, 뭘 의미하는 속성일까? 하는 궁금증에 포스트를 작성합니다.
OSIV(Open Session In View)는 하이버네이트(Hibernate)나 JPA(Java Persistence API)와 같은 ORM(Object-Relational Mapping) 프레임워크를 사용할 때 자주 언급되는 패턴입니다.
이 패턴의 핵심 아이디어는 HTTP 요청이 시작될 때 데이터베이스 세션을 열고, 요청이 완료될 때까지 세션을 열어두는 것입니다.
이를 통해 뷰 레이어에서 지연 로딩(Lazy Loading)과 같은 ORM 기능을 사용할 수 있게 됩니다.
즉, 데이터베이스 세션을 요청 시작부터 끝까지 열어두고 필요할 때마다 데이터를 가져올 수 있는 패턴이라고 생각하면 됩니다.
DB 에서 데이터를 필요한 순간에 조회하는 방식을 말합니다.
이는 애플리케이션의 성능을 향상시키고, 불필요한 자원 사용을 줄이는 데 도움이 됩니다.
예를 들어, 사용자 정보에 여러 개의 주문 정보가 연관되어 있을 때, 사용자 정보만 필요하고 주문 정보는 필요하지 않은 상황에서는 사용자 정보만 불러오고, 주문 정보는 실제로 그 정보를 접근할 때까지 데이터베이스에서 불러오지 않습니다. 이렇게 함으로써, 모든 연관 정보를 처음부터 불러오는 것(Eager Loading)에 비해 효율적으로 데이터를 관리할 수 있습니다.
OSIV 패턴은 특정 상황에서 매우 유용할 수 있지만, 사용할 때는 그로 인해 발생할 수 있는 성능 문제와 리소스 사용에 대해 주의해야 합니다. 최신 Spring Boot 버전에서는 OSIV가 기본적으로 활성화되어 있으나, 필요에 따라 비활성화하고 명시적인 세션 관리나 페치 전략을 선택하는 것이 좋습니다.