DB 드라이버가 커넥션을 생성하는 과정
- 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회
- DB 드라이버는 DB와 TCP/IP 커넥션을 연결
- DB드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 정보를 DB에 전달
- DB는 DB 드라이버로부터 받은 정보를 통해 인증을 완료하고, 내부에 DB 세션 생성
- DB는 커넥션 생성이 완료되었다는 응답을 보냄
- DB 드라이버는 커넥션 객체를 생성하여 클라이언트에 반환

매번 새로운 커넥션을 생성하는 것의 문제점
- 커넥션을 생성할 떄마다 DB 서버는 물론이고 애플리케이션 서버도 TCP/IP 연결을 위한 리소스를 사용
- SQL 실행 시간에 더하여 커넥션 생성 시간이 추가되어 응답 속도에 악영향
- 커넥션을 여러 개 미리 생성해두고 사용하는 방법으로 이러한 문제를 해결
Connection Pool
- 커넥션 여러 개를 미리 생성해두고 클라이언트는 커넥션 사용 후 반납하는 방법
- 애플리케이션 실행 시점에 커넥션 풀은 커넥션일 미리 확보하여 풀에 보관
- 커넥션 풀에 있는 커넥션은 이미 DB와 TCP/IP로 연결되어 있는 상태이기 때문에 즉시 SQL 실행 가능
- 애플리케이션 로직에서는 DB 드라이버를 통해 새로운 커넥션을 획득하는 것이 아니라 이미 생성된 커넥션을 커넥션 풀로부터 반환받아 사용
- 커넥션 사용을 마치면 커넥션을 종료하는 것이 아니라 TCP/IP 연결이 유지된 상태로 커넥션 풀에 '반환'




커넥션을 얻는 여러가지 방법

DriverManager또는 커넥션 풀을 통해 획득- 커넥션 획득 방법을 변경해야 할 때 애플리케이션 로직도 수정해야 함
- 이를 위해
DataSource를 통해 커넥션 획득 방법을 추상화- 마치 JDBC를 통해 DB 접근 방법을 추상화한 것과 같은 맥락
DataSource
- 커넥션 획득 방법을 추상화한 인터페이스
- Java에서 제공
javax.sql.DataSource
public interface DataSource {
Connection getConnection() throws SQLException;
}
JDBC와 DataSoruce의 차이
JDBC
- 기본적인 데이터베이스 접근 방법을 추상화
- 설정과 사용이 결합되어 있음
Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
DataSoruce
- 데이터베이스 접근 방법 뿐만 아니라 커넥션을 획득하는 방법도 추상화함 (단일 커넥션 또는 커넥션 풀에서 획득)
- 설정과 사용이 분리되어 있어 설정 변경 시 클라이언트 코드를 수정할 필요가 없음
dataSource.setJdbcUrl(URL);Connection conn = dataSource.getConnection();
'Spring' 카테고리의 다른 글
| [Spring] Spring DB : 데이터베이스 연결 구조와 DB 세션 (0) | 2024.08.05 |
|---|---|
| [Spring] Spring DB : 트랜잭션 이해 (0) | 2024.08.05 |
| [Spring] Spring DB : JDBC를 사용한 데이터베이스 연결 (0) | 2024.07.30 |
| [Spring] Spring DB : JDBC의 이해 (0) | 2024.07.28 |
| [Spring] Spring MVC : MVC 프레임워크 구현 - 유연한 컨트롤러 (1) | 2024.01.23 |