jingyulog

Connection Pool 본문

Tech/스프링

Connection Pool

jingyulog 2023. 2. 20. 22:48
  • DB Connection 획득 과정
    • 애플리케이션 로직에서 DB 드라이버를 통해 커넥션 조회
    • DB 드라이버가 DB와 TCP/IP Connection 연결
    • DB 드라이버가 IP, PW 등 기타 부가정보를 DB에 전달
    • DB는 ID, PW 를 통해 내부 인증 후 내부에 DB Session 생성
    • DB는 Connection 생성 완료 응답을 보냄
    • DB 드라이버는 Connection 객체를 생성해서 클라이언트에 반환
  • 단점
    • DB, 애플리케이션 서버에서 Connection 을 새로 생성하기 위해 Resource 를 매번 사용해야 한다.
    • 고객이 애플리케이션을 사용할 때, SQL 을 실행하는 시간 + Connection 을 새로 만드는 시간이 추가되어 결과적으로 응답 속도에 영향을 미친다.

Connection Pool

  • 애플리케이션을 시작하는 시점에 Connection 을 미리 생성해두고 사용한다.
  • Connection Pool 에 들어있는 Connection 은 TCP/IP 로 DB 와 Connection 이 연결되어 있는 상태이기 때문에 언제든지 즉시 SQL을 DB에 전달할 수 있다.
  • 애플리케이션 로직에서 이제는 Connection Pool 을 통해 이미 생성되어 있는 Connection 을 객체 참조로 가져다가 쓰면 된다.
  • 애플리케이션 로직은 Connection Pool 에서 받은 Connection 을 사용해서 SQL 을 DB에 전달하고, 그 결과를 받아서 처리한다.
  • 사용이 끝나면 살아있는 상태로 커넥션 풀에 반환한다.
  • 대표적으로 hikariCp 를 사용한다. 
#커넥션 풀 초기화 정보 출력
HikariConfig - MyPool - configuration:
HikariConfig - maximumPoolSize................................10 HikariConfig - poolName................................"MyPool"

#커넥션 풀 전용 쓰레드가 커넥션 풀에 커넥션을 10개 채움
[MyPool connection adder] MyPool - Added connection conn0: url=jdbc:h2:.. user=SA
[MyPool connection adder] MyPool - Added connection conn1: url=jdbc:h2:.. user=SA
[MyPool connection adder] MyPool - Added connection conn2: url=jdbc:h2:.. user=SA
[MyPool connection adder] MyPool - Added connection conn3: url=jdbc:h2:.. user=SA
[MyPool connection adder] MyPool - Added connection conn4: url=jdbc:h2:.. user=SA
  ...
[MyPool connection adder] MyPool - Added connection conn9: url=jdbc:h2:.. user=SA

#커넥션 풀에서 커넥션 획득1
ConnectionTest - connection=HikariProxyConnection@446445803 wrapping conn0: url=jdbc:h2:tcp://localhost/~/test user=SA, class=class com.zaxxer.hikari.pool.HikariProxyConnection

#커넥션 풀에서 커넥션 획득2
ConnectionTest - connection=HikariProxyConnection@832292933 wrapping conn1: url=jdbc:h2:tcp://localhost/~/test user=SA, class=class com.zaxxer.hikari.pool.HikariProxyConnection
  
MyPool - After adding stats (total=10, active=2, idle=8, waiting=0)

'Tech > 스프링' 카테고리의 다른 글

DB 락 ( Lock )  (0) 2023.02.21
Datasource  (0) 2023.02.20
DriverManager  (0) 2023.02.20
데이터베이스 연결  (0) 2023.02.19
JDBC와 최신 데이터 접근 기술  (0) 2023.02.19