커넥션 풀과 데이터 소스의 등장배경
Connection con = DriverManager.getConnection(URL, USERNAME, PASSWORD);
다음과 같이 커넥션을 받아온다면 데이터베이스에 sql을 하나 보낼 때마다 커넥션을 새로 생성해서 받아와야 한다.
커넥션을 받아오는 과정은 매우 오래걸리는 과정이다.
클라이언트가 특정요청을 할 때마다 위의 과정을 매번 거쳐야 하는데 이렇게 되면 서비스의 사용성이 떨어질 것이다.
이러한 문제를 해결하는 것이 커넥션 풀과 데이터 소스이다.
커넥션 풀(Connection Pool)
커넥션 풀이란 이름에서도 알 수 있듯, 여러 개의 커넥션을 담고 있는 풀(Pool)이다.
클라이언트의 요청마다 매번 커넥션을 새로 만들어서 받아오는 것이 너무 비효율적이니 미리 커넥션을 여러 개 만들어서 한 곳에 담아 놓는다는 소리이다.
애플리케이션이 시작하는 시점에 미리 커넥션을 만들어 커넥션 풀에 담아놓는다. 이때 커넥션 풀에 들어가는 최대 커넥션은 개발자가 지정할 수 있으며 기본값은 보통 10개이다.
이후 클라이언트가 요청을 하면 그때 커넥션을 만드는 것이 아니라 그냥 커넥션 풀에서 커넥션 하나를 가져와 쓴다.
이후 사용이 끝나면 다시 커넥션 풀을 반환한다.
이러한 과정을 통해 더 효율적으로 데이터베이스에 접근할 수 있으며 서버당 최대 커넥션 수를 제한하는 효과도 있기 때문에 DB에 무한정 연결이 생성되는 것을 막을 수 있다.
대표적인 커넥션 풀 오픈소스는 commons-dbcp2 , tomcat-jdbc pool , HikariCP 등이 있다.
그중에서도 HikariCP를 제일 많이 사용한다.
데이터 소스(DataSource) 란?
DataSource란 커넥션을 획득하는 방법을 추상화한 자바 인터페이스 클래스이다.
DriverManager로 커넥션을 얻어오다가 HikariCP 커넥션 풀을 도입한다면 애플리케이션의 코드를 전부 다 교체해야한다.
이러한 점을 해결하기 위해 등장한 것이 DataSource이다.
애플리케이션 로직에서는 getConnection()를 통해 커넥션을 얻어오기만 하면 되고 DriverManager를 쓰다가 HikariCP로 변경하고 싶으면 그냥 구현체만 바꾸면 된다.
코드로 보기
DriverManagerDataSource
DriverManagerDataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD);
HikariDataSource
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
dataSource.setMaximumPoolSize(10);
dataSource.setPoolName("MyPool");
이후 커넥션을 생성할 때
Connection con = dataSource.getConnection();
애플리케이션 로직에선 DataSource를 주입받아 위와 같이 dataSource.getConnection()만 하면 커넥션을 받아올 수 있다.
출처: https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/dashboard
'Spring > Spring Data' 카테고리의 다른 글
[Spring Data] SQL Mapper VS ORM (0) | 2024.06.05 |
---|---|
[Spring Data] 예외로 인한 의존성과 스프링의 예외 추상화 (0) | 2024.04.30 |
[Spring Data] Spring Transaction을 통한 문제해결 (0) | 2024.04.29 |
[Spring Data] JDBC 트랜잭션 (0) | 2024.04.29 |
[Spring Data] JDBC 이해하기 (0) | 2024.04.29 |