OSIV feat. 성능 최적화

최지혜·2022년 10월 8일
0

spring

목록 보기
2/4

완전히 요청에 응답하기 전까지는 계속 DB와 커넥션을 유지하다가 다 돌려주고 나서 데이터 response가 다 나가면 그 때, 데이터베이스 커넥션을 돌려주고 영속성 컨텍스트도 같이 사라짐.(spring.jpa.open-in-view:true 가 기본값으로 설정되어 있기 때문에 ) -> 그래서, 지금까지 View Template이나 API Controller에서 지연 로딩이 가능했던 것!

OSIV 전략: 트랜잭션 시작처럼 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지

지연 로딩은 영속성 컨텍스트가 살아있어야 하고, 영속성 컨텍스트는 기본적으로 데이터베이스 커넥션을 유지함.

컨트롤러, 뷰템플릿 - 지연로딩

치명적 단점: 너무 오랫동안 물고 있음.
커넥션이 말라버림.
컨트롤러에서 외부 API를 호출하면 외부API가 3초 걸리면, 데이터베이스커넥션도 그 때 동안 반환 못 하고 있는 것. 그동안 고객한테 응답 못 줌.
외부 API가 블록킹 걸리면, 데이터베이스 커넥션
쓰레드풀 다 차버릴 때까지 데이터베이스 커넥션을 다 먹어버림.

단점: 너무 오랫동안 데이터베이스 커넥션 리소스 사용.
-> 실시간 트래픽이 중요한 앱에서는, 커넥션이 모자람.(장애)
ex. 컨트롤러에서 외부 API 호출 -> 외부 API 대기 시간만큼 커넥션 리소스 반환하지 못하고 유지

profile
매일 성장하는 개발자

0개의 댓글