DB-커넥션풀/데이터소스

Shaun·2022년 8월 24일
1

DB

목록 보기
2/5
post-thumbnail

커넥션 풀

일반적인 DB 연결 방법

  1. 애플리케이션 로직이 DriverManager는 Driver로 TCP/IP 방식을 통해 DB의 connection을 얻는다.
  2. connection 이 연결되면 USERNAME,PASSWORD를 보낸다.
  3. DB 에서는 해당 정보를 확인하고 내부에 DB세션을 생성한다
  4. 커넥션이 됐다는 응답을 보낸다(클라)

-> 커넥션을 한번 연결하는데만 이렇게 많은 과정이 필요하며 TCP/IP를 통한 방법이기 때문에 리소스도 매번 사용 해야 한다.

이 문제를 해결하기 위해 나온 방법이 커넥션 풀 방법이다

-> 미리 커넥션을 만들어놓고 필요할때 쓰고 반납하는 방식이다.
->애플리케이션을 시작하는 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해서 풀에 보관
->커넥션 풀에 들어 있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 즉시 SQL을 DB에 전달할 수 있다.

대표적인 커넥션 풀로는 HikariCP 가 있다.

DataSoruce 등장배경

  • 커넥션을 얻는 방법은 크게 두가지가 있다.
  1. JDBC-DriverManger
  2. 커넥션풀 (Springboot - HikariCP)

만약 우리가 1번에서 2번방법으로 바꾸게 된다면 어떻게될까?? 해당하는 코드들을 모두 변경해야 하는 문제점이 발생한다. 이를 해결하기위해 커넥션을 획득하는 방법을 추상화 해보자

DataSoruce

  • 커넥션을 얻는 방법을 추상화하는 인터페이스

  • 대부분의 커넥션 풀은 DataSource를 이미 구현 해뒀다.

  • DriverManager 는 DataSource 인터페이스를 구현해놓은 DriverManagerDataSource 클래스를 사용해야한다.

=> 이로 인해 DriverManger를 사용하다 커넥션 풀로 바꿔도 코드 변경없이 갈아 껴주기만 하면 됀다.

커넥션 풀/데이터소스 활용

데이터소스 활용

  • DriverManagerDataSource는 풀을 사용하는게 아니기 때문에 항상 새로운 커넥션을 획득한다.

  • DataSoruce를 통해서도 커넥션 획득 가능

DriverManger 를 통한 커넥션획득 VS DataSource를 통한 커넥션 획득

  • 기존 DriverManager을 통한 획득한 할때마다 URL,USERNAME,PASSWORD 를 입력해줘야하지만 DataSource를 통한 커넥션 획득은 최초에 한번만 입력해 주면 된다.

  • 여기서 가장 큰차이점은 설정과 사용의 분리이다. 관련된 속성들을 한곳에 모아 향후 변경에 더욱더 유리하며 또한 서로 의존관계가 낮아짐으로 독립성도 확보된다.

커넥션풀 활용

  • 풀안의 커넥션 갯수도 조정할수 있다.

  • 풀안의 커넥션을 만드는작업은 애플리케이션 속도에 영향을 주지 않기위해 별도의 쓰레드에서 동작한다. 별도의 쓰레드에서 동작하기때문에 테스트가 먼저끝나버린다. sleep 을 추가해서 로그를 확인해주자.

애플리케이션 DataSource적용

  • 첫번쨰 사진은 DriverManagerDataSource 를 이용해 커넥션을 얻는 방법이다. 아무래도 연결하떄마다 하나하나 커넥션을 획득하니 속도도 느리고 좋지 않다. 그래서 DataSource 를 구현한 HikariCP를 사용했다. (커넥션 풀)

  • 보시다시피 커넥션 얻는 방법을 변경해도 다른코드들은 전혀 변경할 필요가 없다.

profile
호주쉐프에서 개발자까지..

0개의 댓글