OSIV(OPEN SESSTION IN VIEW)란?
2021. 2. 4. 17:43ㆍJPA/JPA
OSIV
OSIV는 세션(JPA에서는 엔티티매니저)의 생명 주기를 설정할 수 있는 옵션이다.
엔티티 매니저는 데이터베이스 커넥션의 생명 주기를 같이 가지고 있어 엔티티 매니저가 생성될때 데이터 베이스 커넥션을 생성하여 엔티티 매니저가 사라질때 데이터 베이스의 커넥션은 반환된다.
엔티티 매니저는 트랜잭션 시작시 생성된다.
spring.jpa.open-in-view: true (기본값)
데이터 베이스 커넥션, 엔티티 매니저가 트랜잭션 시작시 생성되고 컨트롤러에서 응답될때 데이터 베이스 커넥션 반환, 엔티티 매니저가 사라진다.
장점: 컨트롤러에서 지연로딩이 가능하다. (코딩이 편하다)
단점: 커넥션을 물고 있는 주기가 길어지고 커넥션을 빨리 반환하지 않으면 커넥션풀로 인해 장애로 이어질 수 있다.
spring.jpa.open-in-view: false
트랜잭션 시작시 엔티티 매니저, 데이터베이스 커넥션을 얻어오고 트랜잭션 종료시 반환된다.
장점: 데이터 베이스 커넥션 반환 주기가 빨라져 성능이 향상된다.
단점: 지연로딩을 위해 서비스단에서 강제로 지연로딩을 하여 프록시를 초기화 해줘야 하기 때문에 서비스단의 복잡도가 커진다.
따라서 커맨드 쿼리 책임 분리 패턴을 적용하여 핵심 비즈니스를 다루는 Service와 화면이나 API에 맞춘 Service를 분리하여 관리해야한다.
'JPA > JPA' 카테고리의 다른 글
컬렌션(일대다) SELECT 시, 주의점과 성능 최적화 (0) | 2021.02.04 |
---|---|
엔티티에 setter를 사용하면 안되는 이유와 대체방안 (0) | 2021.01.29 |
준영속상태의 엔티티를 변경할 때 변경감지와 merge() (0) | 2021.01.29 |
임베디드 타입, @Embeddable, @Embedded (0) | 2021.01.21 |
cascade, orphanRemoval (0) | 2021.01.20 |