OSIV (Open-Session-In-View)
- 영속성 컨텍스트의 생존 범위를 지정하는 옵션
true
: 영속성 컨텍스트를 뷰까지 열어둔다는 의미false
:@Transactional
메서드가 종료되면 영속성 컨텍스트가 종료. 즉, 트랜잭션을 종료할 때 영속성 컨텍스트가 닫히고, 커넥션도 반환
```
각 옵션의 특징과 장단점
true
장점
@Transactional
을 벗어난 곳(View Template / API Controller)에서 지연 로딩이 가능- Lazy Loading(지연 로딩)은 영속성 컨텍스트가 살아있어야 가능하기 때문에
단점
- DB 커넥션 리소스를 오랫동안 사용(View 까지)하기 때문에 커넥션이 고갈될 수 있다.
- 대규모, 실시간 애플리케이션에서 성능 저하로 이어질 가능성이 존재
- 표현 계층에서 엔티티를 수정하게 되면 DB에 반영되지 않음
@Transaction
이 벗어난 곳에서 수정한 이후 트랜잭션을 시작하는 계층을 시작한 경우, Dirty Checking이 되기 때문에 데이터가 변동이 될 수 있음
- DTO 와 같은 클래스가 아닌 Entity 클래스로 반환할 경우, Lazy Loading 지속적을 발생해 성능이 저하됨
false
장점
- DB Connection 자원의 효율적인 사용
단점
- View Template에서 지연 로딩 사용 불가
- Transaction 범위 안에서 지연로딩 관련 초기화를 전부 해줘야 한다.
어떻게 사용해야할까?
true
- 커넥션이 상대적으로 적게 필요한 관리자 서비스에서 사용
- 트랜잭션 범위 밖에서 지연로딩을 수행해야하는 경우에 사용
false
- 대규모, 실시간 애플리케이션 등 DB 커넥션을 효율적으로 사용해야 하는 경우
'Spring 단기심화 2기' 카테고리의 다른 글
TIL_HTTP 메서드의 멱등성_241205 (0) | 2024.12.05 |
---|---|
TIL_대규모 스트림 처리에서의 데이터 일관성 유지_241205 (0) | 2024.12.05 |
TIL_AOP_241126 (0) | 2024.11.26 |
TIL_@Transactional_241125 (0) | 2024.11.25 |
TIL_Docker-241124 (0) | 2024.11.24 |