일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Algorithm
- mongoDB
- Data Structure
- 운영체제
- c언어
- Kafka
- react
- 자료구조
- MSA
- 백준
- 자바
- JavaScript
- Galera Cluster
- Spring
- 네트워크
- design pattern
- OS
- Java
- 디자인 패턴
- IT
- spring webflux
- Heap
- Proxy
- redis
- C
- MySQL
- 컴퓨터구조
- 알고리즘
- 파이썬
- JPA
Archives
- Today
- Total
시냅스
Java 커넥션 풀과 데이터 소스 본문
커넥션 풀, Connection Pool
- 데이터베이스 커넥션을 획득할 때마다 tcp/ip 커넥션 (3 way handshake)을 연결하는 네트워크 동작이 발생되어 커넥션을 생성하기 위한 리소스를 매번 사용해야 한다.
- 커넥션을 매번 새로 만드는 시간이 추가되기 때문에 결과적으로 응답 속도에 영향을 준다.
- 이런 것을 해결하기 위해 커넥션을 미리 생성해두고 사용하는 커넥션 풀을 사용한다.
- 애플리케이션을 시작하는 시점에 커넥션을 미리 확보한다. 보통 10개이다.
- 커넥션 풀에 들어있는 커넥션은 TCP/IP로 DB와 커넥션이 연결되어 있는 상태이기 때문에 언제든지 DB에 SQL을 전달할 수 있다.
- 이렇게 이미 생성되어 있는 커넥션을 가져다 쓴 후 커넥션을 다시 풀에 반환한다.
- 커넥션 풀 숫자는 서비스의 특징과 서버 스펙, DB 스펙에 따라 다를 수 있다.
데이터 소스 Data Source
- 커넥션을 획득하는 여러가지 방법에 대응하기 위한 인터페이스이다.
- 커넥션을 획득하는 방법을 추상화 하는 인터페이스이다.
- javax.sql.DataSource 인터페이스로 제공된다.
- 다만, DriverManager의 경우 DataSource에서 제공하지 않는데, 이 경우 DriverManagerDataSource라는 클래스에서 제공한다.
구현 예시
DriverManagerDataSource dataSource = new DriverManagerDataSource(URL, USERNAME, PASSWORD);
Connection connection = dataSource.getConnection(); // 커넥션 획득
// connection pool
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(URL);
dataSource.setUsername(USERNAME);
dataSource.setPassword(PASSWORD);
dataSource.setMaximumPoolSize(10);
dataSource.setPoolName("MyPool");
Connection connection = dataSource.getConnection(); // 커넥션 획득
- 각각 DriverManager와 connection pool 을 위한 hikari datasource 이다.
- 위 두 구현체는 DataSource 인터페이스를 상속하므로 ocp를 지키기에 용이하다.
'Java, Spring' 카테고리의 다른 글
Java 예외 관련 정리 (0) | 2022.08.25 |
---|---|
Java 트랜잭션 관련 정리 (0) | 2022.08.25 |
Java - JDBC 정리 (2) | 2022.08.24 |
Spring MVC 구조 : 핸들러어댑터 ,핸들러 매핑, 메세지 컨버터 handler mapping handler adapter, message converter (0) | 2022.08.02 |
[JAVA] 서블릿 (servlet) 이란? (0) | 2022.08.02 |
Comments