[Spring DB] 커넥션 풀

easyone·2024년 9월 10일
0

Spring

목록 보기
1/11

커넥션 풀 이해

데이터베이스 커넥션 획득 과정

사용자 요청 -> 커넥션 조회 -> 드라이버 매니저 내부에서 db와 tcp/ip 커넥션 연결 -> 기타 부가정보를 DB에 전달 -> 아이디, 비밀번호를 통해 내부 인증 완료하고 DB 세션 생성 -> DB 드라이버가 커넥션 객체 생성해서 반환
특징: 데이터베이스 커넥션 생성 시간이 오래걸릴 수도 있고, 과정이 복잡하며 TCP/IP 커넥션 생성을 위해 리소스 소모

커넥션 풀

  • 커넥션을 미리 생성하여 관리하는 방식
  • 커넥션 풀 초기화: 기본값은 10개이고 애플리케이션 시작 시점에 커넥션 미리 생성해서 풀에 보관
  • 커넥션은 TCP/IP로 DB와 연결이 되어 있는 상태이므로 항상 SQL을 DB와 연결 가능한 상태
  • 기존의 매번 커넥션을 획득하는 방식의 문제점 해결 -> 커넥션 풀에서 커넥션 객체 참조로 가져다 쓰기
  • 커넥션을 사용한 후에는 종료하는 것이 아니라 커넥션이 살아있는 상태로 커넥션 풀에 반환해야 함
  • 실무에서 항상 기본으로 사용, 보통 오픈소스를 사용
  • 커넥션 풀 오픈소스 : commons-dbcp2, tomcat-jdbc pool, HikariCP
  • HicariCP를 스프링부트 2.0부터 기본 커넥션 풀로 사용

DataSource 이해

DataSource

  • driverManger를 통해 커넥션 획득하는 방식에서 커넥션 풀로 변경시 문제 발생: 애플리케이션 코드도 변경해야 함
  • 커넥션 획득 방법 추상화: javax.sql.DataSource라는 인터페이스를 자바에서 제공, 커넥션 조회 기능
  • 사용 시 DataSource 인터페이스만 의존하면 되며 커넥션 풀을 사용하도록 코드 변경 시 애플리케이션 로직을 변경할 필요 없음

DriverManager와의 차이

  • 스프링에서 제공하는 DataSource 사용 시 dataSource 인터페이스를 통해 커넥션을 가져옴
  • 설정과 사용의 분리 가능: 커넥션 호출 할때마다 URL, USERNAME, PASSWORD 와 같은 파라미터를 전달하지 않아도 됨 -> DataSource만 호출받아서 getConnection()만 호출하면 됨
  • DirverManagerDataSource 사용 시 항상 새로운 커넥션이 생성되는데 HikariDataSource는 커넥션을 재사용하고, 동시에 여러 요청이 들어올 시 여러 스레드에서 커넥션 풀의 커넥션을 가져가서 사용
profile
백엔드 개발자 지망 대학생

0개의 댓글