Spring

DB / Connection Pool, DataSource

Dear-J 2025. 4. 20. 19:33

Connection Pool

데이터베이스 커넥션 획득

커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모

DB는 물론이고 애플리케이션 서버에서도 TCP/IP 커넥션을 새로 생성하기 위한 리소스를 매번 사용해야 함

>> 응답 속도에 영향

>> 해결을 위해 커넥션을 미리 생성해두고 사용

 

커넥션 풀 초기화

애플리케이션을 시작하는 시점에 커넥션 풀은 필요한 만큼 커넥션을 미리 확보해 풀에 보관

>> 기본값 보통 10개

>> 커넥션 풀에 들어있는 커넥션은 TCP/IP로 DB와 연결되어 있는 상태여서 즉시 SQL을 DB에 전달 가능

 

커넥션 풀 사용

애플리케이션 로직에서 DB 드라이버를 통해 커넥션을 획득 x

이미 생성되어 있는 커넥션을 객체 참조로 가져다 씀

받은 커넥션을 사용해 SQL을 데이터베이스에 전달하고 결과를 받아 처리

커넥션을 사용하고 나면 커넥션 종료 x

>> 다시 사용하게 해당 커넥션을 그대로 커넥션 풀에 반환(살아있는 상태로)

 

적절한 커넥션 풀 숫자

>> 서비스 특징과 서버 스펙에 따라 다르므로 성능 테스트를 통해 결정

 

서버당 최대 커넥션 수 제한 가능

>> 무한히 생성되는 것을 막음

 

사용이 편리하고 성능도 뛰어난 오픈소스 커넥션 풀 사용

>> hikariCP

 

DataSource

커넥션을 얻는 다양한 방법이 있음

>> 커넥션을 얻는 방법을 기존에서 변경 시에 발생하는 문제

>> 의존 관계가 변경되기 때문에 애플리케이션 코드가 함께 변경

 

추상화

자바에서 javax.sql.DataSource 인터페이스 제공

>> 커넥션을 획득하는 방법을 추상화하는 인터페이스

>> 핵심 기능 : 커넥션 조회

 

애플리케이션 로직은 DataSource 인터페이스에만 의존

 

커넥션 풀에 커넥션 채울 때 왜 별도의 쓰레드 사용?

커넥션 풀에 커넥션을 채우는 것은 상대적으로 오래 걸리는 일

>> 애플리케이션을 실행할 때 커넥션 풀을 기다리면 애플리케이션 실행 시간 늦어짐

 

 

 

 

 

 

 

 

 

 

 

 

 

출처 : 김영한, 스프링 DB 1편, 데이터 접근 핵심 원리

'Spring' 카테고리의 다른 글

DB / 스프링과 문제 해결 - Transaction  (0) 2025.04.22
DB / Transaction  (0) 2025.04.21
DB / JDBC  (0) 2025.04.19
MVC / 파일 업로드  (0) 2025.04.18
MVC / 스프링 타입 컨버터  (0) 2025.04.16