Open In View
- "Open in View"는 웹 애플리케이션에서 사용되는 개념으로, 데이터베이스의 트랜잭션을 뷰(View) 가 렌더링되는 시점까지 연장하는 것을 의미한다.
- 이 개념은 주로 ORM(Object-Relational Mapping) 프레임워크에서 사용된다.
- 전통적인 방식에서는 트랜잭션을 서비스(Service) 레이어에서 시작하고, 데이터 액세스 계층(DAO, Repository)에서 종료한다.
- 스프링부트에서는 @Transactional이 붙은 레이어(서비스)에서 트랜잭션이 시작되고, 서비스가 종 료될 때, 트랜잭션이 종료된다. 이것은 open in view를 false로 설정한 것과 동일하다.
- "Open in View"를 사용하는 경우 트랜잭션의 시작은 서비스이고, 트랜잭션의 종료도 서비스가 종료될 때다. 하지만 DB에 select할 수 있는 세션이 view에 렌더링될 때까지 유지된다. 이 기능을 켜두고, 엔티티를 컨트롤러에서 응답하는 순간 Lazy Loading으로 인해 예상치 못한 결과가 발생 할 수 있다.


Open In View 활용법
- Open In View를 false로 설정하여 세션을 서비스가 끝나는 시점에 종료시킨다.
- 서비스가 끝나는 시점에 엔티티를 DTO로 옮기면서 Lazy Loading을 처리해준다.
- "Open in View"를 사용하는 경우 주의해야 할 점은 장기간 트랜잭션 유지로 인해 데이터베이스 리소스가 오랜 시간 동안 점유될 수 있으며, 불필요한 쿼리나 성능 문제가 발생할 수 있다. 따라서 "Open in View"를 사용할 때는 성능 측면과 리소스 관리에 유의하여 적절한 사용 방식을 선택해야 한다.
실전 적용방법
'I leaned > 스프링,스프링부트' 카테고리의 다른 글
컨트롤러 단위 테스트 (0) | 2023.07.17 |
---|---|
리포지토리 단위 테스트 (0) | 2023.07.17 |
DTO (0) | 2023.07.17 |
컨트롤러와 서비스의 책임 (0) | 2023.07.17 |
요청 DTO 유효성 검사 (0) | 2023.07.17 |