Server/Spring JPA

Java - LazyConnectionDataSourceProxy란? (+Dynamic DataSource)

JaeHoney 2022. 5. 21. 22:27

LazyConnectionDataSourceProxy

Spring은 트랜잭션에 진입하면 즉시 미리 DataSource의 커넥션을 가져온다. 가령 ServiceLayer Method에 @Transactional이 걸려있다고 가정하자. 쿼리를 날리기 전에 여러가지 복잡한 작업이 있을 수 있다. 그런데 Spring에서는 @Transactional에 진입한 순간 바로 커넥션을 걸어버린다.

 

이런 방식은 여러 단점이 있다.

  • Ehcache같은 캐시를 사용하는 경우 실제 DB에 접근하지 않지만 불필요한 커넥션을 점유
  • JPA의 영속성 컨텍스트에서 엔터티가 존재함에도 불필요한 커넥션을 점유
  • Dynamic DataSource 환경에서 DataSource도 정해지지 않았는데 트랜잭션에 진입하면서 에러 터짐
  • 커넥션 점유시간이 길다. (커넥션 풀이 부족할 수 있다.)

 

LazyConnectionDataSourceProxy를 사용하면 위의 단점들을 해결할 수 있다.

 

LazyConnectionDataSourceProxy는 실제로 쿼리를 날리기 위해 커넥션이 필요한 시점에 커넥션을 점유한다.

 

사용 방법

LazyConnectionDataSourceProxy를 사용하는 방법은 매우 간단하다. 그냥 생성자에 dataSource를 넘기면 된다.

Datasource LazyDataSource = new LazyConnectionDataSourceProxy(dataSource);

 


Reference