← 질문 목록
#1깊이 0
DB 커넥션을 매번 새로 맺는 비용이 큰 이유는?
커넥션 생성은 객체 하나를 만드는 일이 아니다. 네트워크 연결부터 세션 준비까지 여러 단계를 매번 다시 밟는다.
한 번 맺을 때 실제로 오가는 것은 이렇다. 단계마다 왕복이 끼어 있어 밀리초가 쌓인다.
- 1. 앱에서 DB로: TCP 연결 요청. 3-way handshake가 먼저 돈다
- 2. 앱에서 DB로: 인증 정보 전달. 계정과 권한을 확인한다
- 3. DB에서 앱으로: 세션 준비 완료. 내부 자원을 할당한 뒤 응답한다
요청마다 맺고 닫으면 이 비용이 응답 시간에 그대로 실린다. 동시 요청이 몰리면 문제가 커진다. DB가 질의 처리 대신 커넥션 생성과 해제에 CPU와 메모리를 쓰기 때문이다.
connection pool은 두 가지를 한다. 미리 만들어 둔 커넥션을 재사용해 생성 비용을 없앤다. 동시에 DB로 나가는 커넥션 수에 상한을 둬 DB를 보호한다. 뒤쪽이 더 중요하다.
풀 크기는 DB가 감당할 연결 수와 애플리케이션 대기를 함께 보고 정한다. 크게 잡으면 DB 자원을 과점유하고 작게 잡으면 애플리케이션 쪽 대기가 늘어난다는 양면을 함께 말할 수 있어야 한다.