본문 바로가기

강의 내용 정리/Spring DB 1

2-4. DataSource 예제2 - 커넥션 풀

이제 커넥션 풀에서 가져오자. Hikari

이건 com.zaxxer.hikari package에 있다.

 

Spring Data jdbc 스타터 추가 시 자동으로 HikariCP 사용

 

 

당연히 DataSource를 구현한다.

 

 

 

 

 

커넥션 풀 사용하여 커넥션 획득하기

 

 

커넥션 생성 작업은 다른 스레드에서 작동하는데 이게 useDataSource 메서드를 통해 로그를 찍는 시간 보다 더 느리기 때문에 커넥션 풀이 생성되기 전에 로그가 찍힐 수 있다. -> 1초 쉬어주자.

 

커넥션 풀을 최대한 채운다. -> 여기서도 MaximumPoolSize 를 10으로 하여 total 값이 10임을 볼 수 있다. (디폴트값 = 10)

 

활성화면 커넥션 풀(active) 가 왜 2개 인가?

->

여기서 두개 열어두고 닫지 않아서다. -> 꼭 close 해줘야하는 이유.

 

 

닫아주니 정상적으로 반환 되었다.!

 

 

애플리케이션 실행시점에 커넥션 풀을 채우지 않고 별도의 쓰레드에서 커넥션 풀을 채우는 이유

-> 커넥션 풀에 커넥션을 채우는 것을 아주 오래 걸리는 일이다. (TCP/IP 접속 필요) 커넥션 풀을 채울 때 까지 애플리케이션 실행시작을 대기 하고 있으면 실행 시간이 느려진다. 

-> 별도의 쓰레드를 사용하여 커넥션 풀을 채워야 애플리케이션 실행 시간에 영향을 주지 않는다.

 

 

 

 

HikariCP

HikariProxyConnection 이  두 개 생성 된 것을 알 수 있는데,

이게 바로 Hikari가 Connection Pool 에서 관리하는 커넥션

 

-> HikariProxyConnection 안에 실제 JDBC 커넥션이 wrapping 되어있다.

 

 

 

 

 

 

커넥션 풀에 커넥션이 다 차기 전에 커넥션을 획득하면 어떻게 하나요?

-> 커넥션 풀이 내부적으로 기다리게함.

-> 1개 만들어질 때마다 반환.

(만약 Pool에 1개의 커넥션이 있는데 두개의 요청이 들어오면 하나는 반환해주고 다른 하나는 만들어질때까지 대기하다가 만들어지면 바로 반환해준다.)

 

 

 

 

 

 

10개 넘는 getConnection 요청이 오면 어떻게 하나요?

 

커넥션 풀에 커넥션 확보 될 때까지 block이 된다. 11번째 getConnection에서 멈춰서 대기하게 된다.

몇 초 대기 할 건진 설정가능

짧게 가져가는 게 좋다. 너무 길면 클라이언트가 너무 기다린다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

# 본 게시글은 인프런 김영한님의 강의를 수강 후 반복학습을 위해 정리한 내용입니다.

 

 

꾸준히 다시보자.

 

1. 221014

2. 221031

Recent Posts
Popular Posts
Recent Comments