티스토리 뷰
반응형
OSIV(Open Session In View)
영속성 컨텍스트를 뷰까지 열어두는 기능을 말한다. 뷰에서도 지연 로딩을 사용할 수 있어 스프링 프레임워크에서는 OSIV 사용 여부를 기본적으로 true로 설정하고 있다.
JPA가 데이터베이스 커넥션을 언제 가져올까?
트랜잭션이 처음 발생할 때 데이터베이스 커넥션을 가져온다!
그렇다면 JPA는 데이터베이스 커넥션을 언제 종료할까?
OSIV가 켜져 있는 경우
OSIV가 켜져있다면 Service, Repository 단에서 트랜잭션이 끝나도 영속 상태를 끝까지 유지한다. 그래서 데이터베이스 커넥션과 영속 컨텍스트는 컨트롤러 단에서 최종적으로 Response를 내보낼 때까지 살아있고 컨트롤러에서도 지연 로딩이 가능하다.
그러나 영속성 컨텍스트를 끝까지 유지한다는 것은 실시간 트래픽이 중요한 애플리케이션에서 커넥션이 모자라 서비스 장애의 원인이 될 수도 있다. 특히 컨트롤러에서 외부 API를 호출하면 외부 API의 대기 시간만큼 리소스를 반환하지 못하고 유지해 로딩이 지연될 수 있다.
OSIV가 꺼져 있는 경우
트랜잭션 종료 시 바로 영속성 컨텍스트를 닫고, 데이터베이스의 커넥션도 반환한다. 즉 영속성 컨텍스트의 생존 범위는 트랜잭션 안(Service와 Repository 단)으로 한정되기 때문에 커넥션 리소스를 낭비하지 않는다. 하지만 지연로딩을 모두 트랜잭션 안에서 처리해야 한다는 단점이 있다.
// OSIV OFF 인 경우
@RequiredArgsConstructor
class OrderService {
private final OrderRepository repository;
@Transactional
public ResponseDto createOrder(RequestDto requestDto) {
Order order = new Order(requestDto);
repository.save(order);
return new ResponseDto(order); // 영속성 컨텍스트 종료
}
...
}
참조:
반응형
'SPRING' 카테고리의 다른 글
[토비의 스프링] 오브젝트와 의존관계 (0) | 2022.10.25 |
---|---|
[SPRING] AWS RDS Connection timed out, unable to connect to localhost 연결 오류 해결 방법 (32) | 2022.09.05 |
[SPRING] JPA의 N+1 문제와 JPA의 조회 성능 최적화하기 (0) | 2022.07.31 |
[SPRING] JPA란 (0) | 2022.07.24 |
[SPRING] Dependency Lookup (DL) (0) | 2022.07.23 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- linuxgedit
- linuxawk
- cat
- 쇼미더코드
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- virtualbox
- OnActivityForResult
- awk프로그램
- cron시스템
- 버추억박스오류
- 백준27219
- whatis
- Baekjoon27219
- GitHubAPIforJava
- api문서
- 백준27211
- linux파일
- baekjoon
- 사용자ID
- E_FAIL
- 리눅스cron
- 백준
- Linux
- GithubAPI
- 코테
- atq
- 버추억박스에러
- 리눅스
- Baekjoon27211
- linuxtouch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함