뜌릅

HikariCP 본문

SPRING

HikariCP

TwoCastle9 2023. 6. 21. 16:01
반응형

HikariCP는 무엇일까?


Hikari(光) + ConnectionPool이 합쳐진 단어로 빛처럼 빠른 Connection Pool을 제공하는 JDBC CP라이브러리라고 볼 수 있다. ( HikariCP는 실제로 다른 Pooling Library보다 빠른데 그 이유는 바이트 코드와 FastList을 많이 사용해서라고 한다.)

Connection Pool은 무엇일까?


그렇다면 CP는 무엇일까?

WAS와 데이터베이스 사이의 연결에는 많은 비용이 든다.(사실 WAS와 DB간의 연결은 WAS내부에서 구동중인 Dispatcher Servlet이 연결을 해준다.) 실제로 WAS에서 DB에 쿼리를 날리려고 하는 상황에서 쿼리 전송 또는 쿼리 동작 시간보다 DB와 연결하는데에 많은 비용이 든다. 이를 보완하기 위해 나온 방법이 Connection Pool 방법이다.

이 방법은 DB와 연결된 Connection들을 미리 만들어 놓고 pool로 관리하는 것이다. 필요할 때마다 WAS가 풀의 Connection을 사용하고 반환하는 기법이다. 이는 빠른 DB연결을 가능하게 해준다.

그렇다면 Connection들은 어디에 저장될까?


Connection 또는 Connection과 관련된 정보를 저장하는 곳을 DataSource라고 한다. DB와 관계된 Connection 정보를 담고 있으며 빈으로 등록하여 인자로 넘겨준다. → 이 과정을 통해 Spring은 DataSource로 DB와의 연결을 획득한다.

DataSource는 데이터베이스에 연결하기 위한 팩토리이다. WAS의 Thread가 Connection을 요청했을 때 Idle Connection이 존재한다면 해당 커넥션을 반환해준다. 만약 Idle Connection이 존재하지 않는다면 다른 Thread가 Connection을 반환할때 까지 대기하게 된다.

Connection과정


DataSource Bean 객체

SecretManagerService에서 다음의 정보를 가져오게 됩니다. 이후 getSecretValue()을 통해 보안 암호값을 aws SecretManager로부터 가져옵니다.

그 뒤 datasource을 HikariDataSource Type으로 만든 뒤 LazyConnectionDataSourceProxy을 통해 필요한 시점에만 커넥션을 점유하게 한다.

 

위에서 설정한 datasource bean객체를 entity manager에 위와 같이 설정한뒤에

 

transactionManger을 bean객체로 위와같이 등록하면서. 트랜잭션이 발생할 때마다 설정한 datasource에서 connection을 가져와서 사용하게 한다.

반응형