시냅스

Java 커넥션 풀과 데이터 소스 본문

Java, Spring

Java 커넥션 풀과 데이터 소스

ted k 2022. 8. 25. 15:49

커넥션 풀, Connection Pool

  • 데이터베이스 커넥션을 획득할 때마다 tcp/ip 커넥션 (3 way handshake)을 연결하는 네트워크 동작이 발생되어 커넥션을 생성하기 위한 리소스를 매번 사용해야 한다.
  • 커넥션을 매번 새로 만드는 시간이 추가되기 때문에 결과적으로 응답 속도에 영향을 준다.
  • 이런 것을 해결하기 위해 커넥션을 미리 생성해두고 사용하는 커넥션 풀을 사용한다.
  • 애플리케이션을 시작하는 시점에 커넥션을 미리 확보한다. 보통 10개이다.
  • 커넥션 풀에 들어있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 DB에 SQL을 전달할 수 있다.

 

  • 이렇게 이미 생성되어 있는 커넥션을 가져다 쓴 후 커넥션을 다시 풀에 반환한다.
  • 커넥션 풀 숫자는 서비스의 특징과 서버 스펙, DB 스펙에 따라 다를 수 있다.

 

데이터 소스 Data Source

  • 커넥션을 획득하는 여러가지 방법에 대응하기 위한 인터페이스이다.
    • 커넥션을 획득하는 방법을 추상화 하는 인터페이스이다.
  • javax.sql.DataSource 인터페이스로 제공된다.
  • 다만, DriverManager의 경우 DataSource에서 제공하지 않는데, 이 경우 DriverManagerDataSource라는 클래스에서 제공한다.

 

구현 예시

DriverManagerDataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD);
Connection connection = dataSource.getConnection(); // 커넥션 획득

// connection pool
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
dataSource.setMaximumPoolSize(10);
dataSource.setPoolName("MyPool");

Connection connection = dataSource.getConnection(); // 커넥션 획득
  • 각각 DriverManager와 connection pool 을 위한 hikari datasource 이다.
  • 위 두 구현체는 DataSource 인터페이스를 상속하므로 ocp를 지키기에 용이하다.

 

 

Comments