: Thread pool과 같은 맥락. 디비 커넥션을 pool에 미리 만들어두고 재사용하기 위한 방법
- 커넥션을 관리하는 캐시 or 기법
- 매 요청마다 쓰레드를 생성 삭제하면 비용이므로 WAS(tomcat)에 thread pool을 두고 재사용하는 방법과 같음
- 마찬가지로 DB connection이 있을때마다 커넥션 객체를 생성 삭제하면 비용이 될 수있음
- 일반적으로 Thread 수 > DB connection 수 가 좋다고 함. 모든 요청에 항상 DB를 호출할 필요는 없기 때문
- 이 두 곳에서 유지하는 커넥션 / 쓰레드 수는 메모리와 직관됨. 많을수록 메모리를 사용하고, 적을 수록 클라이언트 대기가 증가하게 됨
- WAS에서 설정할 값이고, 실 서버 테스트 후 수를 정하는게 바람직해보임
커넥션이 부족한 경우(모두 사용중일 때)
: 클라이언트가 대기상태가 되고, 커넥션이 풀 반환되면 순차 제공
- OOM(out of memory) 발생. 이 경우 보통 Thread 개수나 DB connection 조정
과정
- 웹 컨테이너가 실행되면서 적절한 수의 DB 커넥션 객체들을 생성해 pool에 저장해놓음
- DB에 통신(DB 요청) 시 풀에서 커넥션을 가져 DB 접근에 사용 후, 다시 pool에 반환
DB와의 통신은 무슨 프로토콜??
- 기본적으로 신뢰성 바탕의 TCP/IP 통신 위에서 감싸진 형태로 DB마다 존재
- MariaDB(mysql과 같음) - mysql client/server protocol
- MongoDB - mongoDB wire protocol
- Redis - RESP(Redis Serialization Protocol)
Reference)
https://www.holaxprogramming.com/2013/01/10/devops-how-to-manage-dbcp/
https://delf-lee.github.io/post/connection-pool/