spring.jpa.open-in-view: true (default)
-> 장점 : API호출이 끝나는 시점까지 커넥션을 들고있어서(영속성 컨텍스트가 살아있어서) 컨트롤러 또는 view단에서도 LAZY로딩이 가능하다.
-> 단점 : 커넥션을 계속 들고있게되면 로직이 오래걸리는경우 커넥션일 말라버릴 수 있음.
spring.jpa.open-in-view: false
-> 장점 : 트랜잭션을 종료할 때 영속성 컨텍스트를 닫고, 커넥션도 반환한다. 그러므로 커넥션 리소스를 낭비하지 않는다.
-> 단점 : OSIV를 끄면 모든 지연로딩을 트랜잭션(Service) 안에서 처리해야한다.
성능을 중요하게 생각한다면 OSIV를 끄고 비즈니스 로직(Command)과 view용 쿼리를 분리하는 것이다.
OrderService
OrderService: 핵심 비즈니스 로직
OrderQueryService: 화면이나 API에 맞춘 서비스 (주로 읽기 전용 트랜잭션 사용)
쉽게 생각한다면,
고객서비스의 실시간 API는 OSIV를 끄고,
ADMIN처럼 커넥션을 많이 사용하지 않는다면 OSIV를 켜는것이 좋다.