spring.jpa.open-in-view
OSIV,
영속성 컨텍스트는 DB Connection을 1:1로 쓰면서 동작해야 함.
기본적으로 DB Transaction을 시작할 때 영속성 컨텍스트가 DB Connection을 가져온다.
커넥션 획득 후에 DB에게 돌려주는 시점이 중요하다.
이게 true로 켜져 있으면 응답이 반환되는 타이밍이 되어서야 끝남. 즉 Transaction이 끝나도 영속성 컨텍스트를 끝까지 살려두는 것.
지연 로딩은 영속성 컨텍스트가 살아 있어야 가능하고, 영속성 컨텍스트는 기본적으로 DB 커넥션을 유지하므로 이것 자체가 큰 장점이다.
그런데 이 전략은 너무 오랜 시간동안 DB Connection Resource를 사용한다.
따라서 실시간 트래픽이 중요한 Application에서는 Connection이 모자랄 수 있고, 이것이 장애로 이어진다.

true인 경우

false인 경우
이를 해결하기 위해 많은 방법들이 있는데,
그증 하나는 OSIV를 끈 상태로 복잡성을 관리하는 방법이다. 실무에서도 자주 쓰임.
바로 Command와 Query를 분리하는 것!
보통 비즈니스 로직은, 특정 Entity 몇 개를 등록하거나 수정하는 것이므로 성능이 크게 문제가 되지 않는다. 보통 성능 문제는 조회에서 많이 발생한다.
화면용 기능들은 요구사항이 자주 바뀌지만, 정책이나 핵심 비즈니스 로직은 잘 변경되지 않음.
예를 들어 OrderService라고 했을 때,
크고 복잡한 Application을 개발한다면, 이 둘의 관심사를 명확하게 분리하는 것이 유지보수 관점에서 의미 있는 선택이다.
출처: 실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-JPA-API%EA%B0%9C%EB%B0%9C-%EC%84%B1%EB%8A%A5%EC%B5%9C%EC%A0%81%ED%99%94