-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: [DB] DB Connection Pool #22
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
개인적으로 더 공부해보고 싶은 주제였는데 자세하게 다뤄주셔서 흥미가 더 생기네요 :) 수고하셨습니다 ~~
|
||
### Hikari CP의 동작 방식 | ||
1. Thread가 Connection을 요청하면 Connection Pool의 각자의 방식에 따라 유휴 Connection을 찾아서 반환한다 | ||
- Hikari CP의 경우, 이전에 사용했던 Connection이 존재하는지 확인하고, 이를 우선적으로 반환한다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
각 요청마다 사용했던 connection에 대한 로그가 남는건가요 ??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍👍
|
||
- 자바: 기본적으로 `DataSource` 인터페이스를 사용하여 커넥션 풀을 관리한다 | ||
- 스프링: SpringBoot 2.0 이전에는 tomcat-jdbc를 사용하다가 2.0 이후 부터는 Hikari CP를 기본 옵션으로 채택한다 | ||
- Hikari CP 성능이 월등히 좋다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
무슨 차이 때문에 성능이 훨씬 좋은지 궁금하네요
![image](https://github.com/user-attachments/assets/51b8f94a-bb0c-416c-b837-a8657dc14168) | ||
|
||
## 데드락 피하기 | ||
- 커넥션 풀을 크게 설정하면? → 메모리 소모가 큰 대신 많은 사람의 대기시간이 줄어 든다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
역시 메모리는 다다익선..
|
||
### 커넥션 풀의 장점 | ||
- 커넥션 객체를 미리 만들어 연결하여 메모리 상에 등록해두기 때문에 클라이언트가 빠르게 DB에 접속할 수 있다 | ||
- DB 커넥션 수를 제한함으로써 과도한 접속을 방지할 수 있다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
만약에 커넥션 풀에 못들어가면 어떻게 되는건가요?_?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
슬퍼요
validation-timeout: 3000 | ||
minimum-idle: 5 | ||
max-lifetime: 240000 | ||
maximum-pool-size: 20 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
보통 배포했을때도 풀 사이즈를 하드코딩하나요? 앞에서 보여주셨던 PoolSize = Tn × ( Cm - 1 ) + ( Tn / 2 ) --> 이 수식에 근거한 코딩을 사용하기도 하나요?!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
얼마전에 스레드풀에 대한 글을 읽다가 커넥션 풀에 대한 글을 맛보기로 봤는데 바로 이런 유익한 글을 올려주시다니..! 재밌게 봤습니당 😆
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
앞으로 property 정의를 할 때 도움이 많이 될 것 같습니다! 수고하셨습니다!!
|
||
### Hikari CP의 동작 방식 | ||
1. Thread가 Connection을 요청하면 Connection Pool의 각자의 방식에 따라 유휴 Connection을 찾아서 반환한다 | ||
- Hikari CP의 경우, 이전에 사용했던 Connection이 존재하는지 확인하고, 이를 우선적으로 반환한다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이전에 사용했던 connection을 우선적으로 반환하는 것 또한 시간 절약이나 성능 향상을 위함인가요?!
|
||
![image](https://github.com/user-attachments/assets/3ccc54a0-de34-4bb1-a375-bd8bc8508972) | ||
|
||
2. 가능한 Connection이 존재하지 않으면, HandOffQueue를 Polling하면서 다른 Thread가 Connection을 반납하기를 기다린다. 만약 TimeOut 시간이 만료되면 예외를 던진다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
timeout이 된다면 최종적으로 해당 요청은 DB에 연결되지 못하는 걸까요?? timeout 이후 재시도와 같은 추가적인 동작은 없는건지 궁금합니다!
### 데이터베이스 커넥션 풀의 동작 방식 | ||
1. 애플리케이션 서버가 시작될 때 일정 수의 커넥션을 미리 생성한다 | ||
2. 애플리케이션 요청에 따라 생성된 커넥션 객체를 전달한다 | ||
3. 일정 수 이상의 커넥션이 사용되면 새로운 커넥션을 만든다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
커넥션 풀의 커넥션 수는 상수 값이 아니라 서버 상황에 맞춰서 동적으로 변경 되는건가요?
|
||
### 커넥션 풀의 장점 | ||
- 커넥션 객체를 미리 만들어 연결하여 메모리 상에 등록해두기 때문에 클라이언트가 빠르게 DB에 접속할 수 있다 | ||
- DB 커넥션 수를 제한함으로써 과도한 접속을 방지할 수 있다 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
슬퍼요
개요
백엔드 개발을 하다보면 DB Connection Pool이 고갈되는 문제가 종종 발생하곤 합니다. DB Connection Pool의 개념과 동작방식에 대해 학습했습니다.
체크리스트