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 |