개요

Spring JPA에는 open-in-view 를 true / false 로 설정할 수 있습니다.

spring.jpa.open-in-view=true // true : default

오늘은 이 기능이 무엇을 하는지 간단하게 알아보도록 합시다.

 

 

 

 

OSIV

open-in-view(OSIV) 는 영속성 컨텍스트가 데이터베이스 커넥션을 언제 돌려주는지 설정하는 것입니다.

OSIV의 기본전략은 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 까지 영속성 컨텍스트

데이터베이스 커넥션을 유지하는 것입니다. 즉, 트랜잭션이 종료되어도 데이터베이스 커넥션을 유지하는 것인데요.

이 전략은 Controller에서 지연로딩을 통해 데이터를 받아올 수 있다는 장점이 있습니다.

다만, 이 기본전략은 데이터베이스 커넥션을 필요 이상으로 오래 사용하고, 오래 사용하기 때문에 트래픽이 많은 어플리케이션에서는 커넥션이 모자라 문제를 일으킬 수 있다는 것입니다.

 

 

spring.jpa.open-in-view=false

따라서 OSIV를 false로 하여 커넥션 반환시점을 트랜잭션 종료시점과 맞추어 사용하는 것이 조금더 나을 수 있습니다.

'FrameWork > JPA' 카테고리의 다른 글

[JPA] default_batch_fetch_size  (0) 2024.11.08
JPA 스키마 자동 생성  (0) 2023.11.17
spring.jpa.properties.hibernate.default_batch_fetch_size

application.properties

 

default batch fetch size

JPA에서 default_batch_fetch_size 는 지연로딩되는 쿼리를 IN 으로 묶어 한번에 보내는 기능입니다. 조회 시 성능을 개선하는 방법중 하나죠.

 

 

 

List<Order> orders = orderRepository.findAll();
orders.forEach(order -> System.out.println(order.getMember().getName()));

예를들어, 위와 같은 로직이 있을때 orders의 사이즈가 100이고, Member는 fetch=LAZY 이라고 가정해보겠습니다.

 

order.getMember().getName()을 호출하면 영속성 컨텍스트에 데이터가 없기때문에 먼저 쿼리가 나가고 영속성 컨텍스트에 저장됩니다. Member의 중복이 없다면 이 과정에서 100번 반복되어 총 쿼리는 최대 101번이 나갈 수 있게되는것입니다.

 

여기에서 default_batch_fetch_size=100 라고 설정해준다면 지연로딩되는 member를 IN절로 100개까지 묶어 한번에 모두 가져와 컨텍스트에 넣게됩니다. 그러면 이 경우에 2번의 쿼리만 발생하게됩니다.

 

따라서 default_batch_fetch_size를 적절하게 설정해놓는것이 좋겠습니다.

'FrameWork > JPA' 카테고리의 다른 글

[JPA] Open Session In View  (0) 2024.11.10
JPA 스키마 자동 생성  (0) 2023.11.17

- DDL(Data Definition Language) 을 애플리케이션을 실행하는 시점에 자동생성

- 개발단계에서 사용됨

 

hibernate.hbm2ddl.auto

옵션 설명
create 기존 테이블을 삭제 한 뒤에 새로 생성
create-drop 애플리케이션 실행 시 create + 애플리케이션 종료 시 drop
update 변경 된 내용만 반영 (추가된 내용만 반영, 삭제된 내용 반영X)
validate 엔티티와 테이블이 정상 매핑되어있는지 확인
none 사용하지 않음

 

application.properties

 

spring.jpa.hibernate.ddl-auto=[옵션]

 

'FrameWork > JPA' 카테고리의 다른 글

[JPA] Open Session In View  (0) 2024.11.10
[JPA] default_batch_fetch_size  (0) 2024.11.08

+ Recent posts