Connection Pool

Connection을 미리 생성하두고 재사용하는 기술

Untitled

사용자 요청시 애플리케이션 로직에서는 DB 드라이버를 통해 새로운 커낵션을 획득하는 것이 아니라, 커넥션 풀을 통해 이미 생성되어 있는 커넥션을 객체 참조로 가져와 사용하게 된다

Untitled

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

-그리고 커낵션을 모두 사용하고 나면 커넥션을 종료하는 것이 아니라, 재사용할 수 있도록 커낵션 풀에 반환하게 된다

<aside> 💡 이때 주의할 점은 커넥션을 종료하는 것이 아니라 커넥션이 살아있는 상태로 커넥션 풀에 반환해야 한다는 것이다

</aside>

-대표적인 커넥션 풀 오픈소스는 commons-dbcp2, tomcat-jdbc pool, HikariCP 등이 있다

DataSource 이해

Connection 획득 방법에 대해 추상화 하는 인터페이스

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

Untitled

-개발자는 DataSource 인터페이스 의존하는 애플리케이션 로직을 작성하면 된다

-DataSource 인터페이스를 의존하고 있기 때문에 커넥션 풀 구현 기술을 변경하고 싶으면 구현체만 갈아 끼우면 된다

DriverManagerDataSource 경우 스프링에서 지원하는 DataSource 구현체이고, 커넥션 풀을 지원하지 않고 매번 신규 커넥션을 생성하여 반환한다