본문 바로가기
Spring Study/DataBase

[DataBase] Connection Pool / DataSource

by 정재인 2023. 9. 14.

커넥션 풀(Connection Pool)이란?

데이터베이스 커넥션을 획득할 때 과정

1. 애플리케이션 로직이 DB 드라이버를 통해 커넥션 조회

2. DB 드라이버가 DB와 TCP/IP 커넥션 연결

3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW등 기타 부가정보 DB에 전달

4. DB는 ID, PW를 통해 내부 인증 후, 내부에 DB 세션 생성

5. DB는 커넥션 생성이 완료되었다는 응답 전송

6. DB 드라이버는 커넥션 객체를 생성 후 클라이언트에 반환

 

이러한 방법은 과정도 복잡하고, 시간도 많이 소모된다. 이를 해결하기 위한 아이디어가 바로 커넥션을 미리 생성해두고 사용하는 커넥션 풀 이라는 방법이다.

 

커넥션 풀 동작 방식

어플리케이션을 시작하는 시점에 커넥션 풀은 필요한만큼 커넥션을 미리 확보해 풀에 보관한다. 보통 저장하는 양은 서비스의 특징과 서버 스펙에 따라 다르지만 기본값은 보통 10개이다.

 

커넥션 풀에 들어있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 즉시 SQL을 DB에 전달할 수 있다.

 

· 커넥션 풀을 통해 이미 생성되어 있는 커넥션을 객체 참조로 가져다 사용한다.

· 커넥션 풀에 커넥션을 요청하면 커넥션 풀은 자신이 가지고 있는 커넥션 중 하나를 반환한다.

· 애플리케이션 로직은 커넥션 풀에서 받은 커넥션을 사용해 SQL을 데이터베이스에 전달하고, 그 결과를 받아 처리한다.

· 커넥션을 모두 사용하면 커넥션을 종료하는 것이 아니라, 다음에 다시 사용할 수 있도록 해당 커넥션을 그대로 커넥션 풀에 반환한다.

 


데이터소스(DataSource)란?

애플리케이션 로직에서 DriverManager를 사용해서 커넥션을 획득하다가 HikariCP같은 커넥션 풀을 사용하도록 변경하면 커넥션을 획득하는 애플리케이션 코드도 함께 변경해야 한다.

이러한 문제를 해결하기 위해 자바는 javax.sql.DataSource라는 인터페이스를 제공하고, DataSource는 커넥션을 획득하는 방법을 추상화 하는 인터페이스이다.

 

public interface DataSource{
    Connection getConnection() throws SQLException;
}

DriverManager는 커넥션을 획득할 때마다 파라미터를 계속 전달해야 했던 반면, DataSource는 처음 객체를 생성할 때만 필요한 파라미터를 넘겨두고, 커넥션을 획득할 때는 단순히 dataSource.getConnection()만 호출하면 된다.

'Spring Study > DataBase' 카테고리의 다른 글

[DataBase] 예외 처리  (0) 2023.09.21
[DataBase] 자바 예외 (Exception)  (0) 2023.09.20
[DataBase] 트랜잭션 (Transaction)2  (0) 2023.09.19
[DataBase] 트랜잭션 (Transaction)  (5) 2023.09.18
[DataBase] JDBC란?  (0) 2023.09.13

댓글