LazyConnectionDataSourceProxy
Spring은 트랜잭션에 진입하면 즉시 미리 DataSource의 커넥션을 가져온다. 가령 ServiceLayer Method에 @Transactional이 걸려있다고 가정하자. 쿼리를 날리기 전에 여러가지 복잡한 작업이 있을 수 있다. 그런데 Spring에서는 @Transactional에 진입한 순간 바로 커넥션을 걸어버린다.
이런 방식은 여러 단점이 있다.
- Ehcache같은 캐시를 사용하는 경우 실제 DB에 접근하지 않지만 불필요한 커넥션을 점유
- JPA의 영속성 컨텍스트에서 엔터티가 존재함에도 불필요한 커넥션을 점유
- Dynamic DataSource 환경에서 DataSource도 정해지지 않았는데 트랜잭션에 진입하면서 에러 터짐
- 커넥션 점유시간이 길다. (커넥션 풀이 부족할 수 있다.)
LazyConnectionDataSourceProxy를 사용하면 위의 단점들을 해결할 수 있다.
LazyConnectionDataSourceProxy는 실제로 쿼리를 날리기 위해 커넥션이 필요한 시점에 커넥션을 점유한다.
사용 방법
LazyConnectionDataSourceProxy를 사용하는 방법은 매우 간단하다. 그냥 생성자에 dataSource를 넘기면 된다.
Datasource LazyDataSource = new LazyConnectionDataSourceProxy(dataSource);
Reference
'Server > Spring JPA' 카테고리의 다른 글
Spring Boot - 커넥션 풀 상태 확인하기! (0) | 2022.06.11 |
---|---|
QueryDSL - Select 성능 개선하는 방법들! (+ JPQL 관련 이슈) (0) | 2022.05.29 |
QueryDSL - 벌크(Bulk) 연산 시 주의할 점! (0) | 2022.05.08 |
Querydsl - 동적 쿼리(Dynamic SQL) 사용하기 ! (0) | 2022.05.07 |
Spring - 샤딩 모듈 개발 이야기 (feat. AbstractRoutingDataSource) (10) | 2022.05.05 |