728x90

들어가며,

2024.01.13 - [Spring Framework/JDBC, Mybatis,JPA, Querydsl] - JDBC의 이해, JDBC란? 개념

 

JDBC의 이해, JDBC란? 개념

JDBC란? JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다. SQL Command를 보내면 Result Set 응답을 받는 식으로 동작하고 있다. 그러나 JDBC를 통해 데이터베이스에 접속할 수는 있지만,

wooltech.tistory.com

 

JDBC를 통해 DB에 접근하면서 Conntection -> Statement -> ResultSet으로 동작하는 것에 대해 공부했습니다.

DB에 접근할 때마다 Connection을 생성해 연결하고, 연결을 종료하는 과정을 거쳐야 했습니다.

그러나, 이러한 방식은 DB에 자주 접근하는 경우에 리소스 사용과 관련해 많은 단점이 있습니다.

 

이번 편에서는 위 문제를 해결하기 위한 Connectio Pool이라는 개념에 대해 정리하려고 합니다.

 

Connection Pool 이란?

 

Connectio Pool이란 미리 Pool에 Connection을 생성해두고 필요한 경우에 꺼내 사용하는 것을 말합니다.

이 Connection들은 이미 DB와 연결이 되어 있기 때문에, Driver를 통해 꺼내서 SQL를 전달할 수 있습니다.

사용이 완료된 후에도 이전처럼 연결을 종료하는 것이 아닌 그대로 Pool에 반환하게 됩니다.

이로써 연결된 Connection들을 지속적으로 사용할 수 있습니다.

 

Spring Boot에서는 기본적으로 HikariCP를 통해 Connection Pool을 관리하고 있습니다.

 

Data Source란?

 

Data Source는 Connection을 조회하는 역할을 합니다.

하단의 검은색 박스처럼 Connection을 획득하는데는 다양한 방법이 있습니다. 

항상 JAVA에서는 이런 여러 방식의 사용에 유연함을 주기 위해 추상화를 통해 해결하고 있습니다.

 

Driver Manager와 Data Source 사용 비교

@Slf4j
public class ConnectionTest {
    @Test
    void driverManager() throws SQLException {
        Connection con1 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        Connection con2 = DriverManager.getConnection(URL, USERNAME, PASSWORD);
        log.info("connection={}, class={}", con1, con1.getClass());
        log.info("connection={}, class={}", con2, con2.getClass());
    }
    @Test
    void dataSourceDriverManager() throws SQLException {

	DriverManagerDataSource dataSource = new DriverManagerDataSource(URL,
        USERNAME, PASSWORD);
        useDataSource(dataSource);
    }
    private void useDataSource(DataSource dataSource) throws SQLException {
        Connection con1 = dataSource.getConnection();
        Connection con2 = dataSource.getConnection();
        log.info("connection={}, class={}", con1, con1.getClass());
        log.info("connection={}, class={}", con2, con2.getClass());
    }
}

 

Driver Manager는 항상 URL, USERNAME, PASSWORD를 입력하여 커넥션을 획득하지만, 
Data Source는 처음에 Driver Manager Data Source 객체를 생성할때만 파라미터를 넘겨주고나면 커넥션은 get메서드를 통해 호출할 수 있다.

 

 

 

+ Recent posts