← 질문 목록
#208깊이 0
커넥션 풀을 사용하는 이유는 무엇인가?
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
커넥션 풀은 연결을 재사용하고 데이터베이스로 들어가는 동시 작업 수를 제한한다. 연결 비용을 줄이는 것과 과부하를 막는 것 모두가 목적이다.
요청→커넥션 풀
남은 시간 안에서 연결을 빌린다
커넥션 풀→데이터베이스
정해 둔 수만 동시에 보낸다
데이터베이스→요청
트랜잭션을 끝내고 연결을 반납한다
커넥션 풀→빠른 실패
대기 제한을 넘으면 오류를 돌려준다
연결마다 TCP·TLS, 인증과 세션 설정 비용이 들 수 있다. 살아 있는 연결을 빌리면 이 과정을 반복하지 않는다. 다만 풀에 연결이 있다는 이유만으로 느린 질의가 빨라지지는 않는다.
풀을 크게 하면 처리량이 계속 오른다는 보장은 없다. 데이터베이스가 감당할 동시 실행 수를 넘으면 CPU·메모리·잠금과 I/O 경합이 커진다. PostgreSQL도 max_connections를 올릴수록 일부 자원을 더 할당한다.
한 애플리케이션의 크기만 보면 안 된다. 인스턴스 수, 배포 중 겹쳐 뜨는 수, 배치와 운영 도구의 연결까지 더한 최댓값이 데이터베이스 예산 안에 들어가야 한다. 운영자용 예비 연결도 남긴다.
풀 대기 제한은 사용자 요청의 남은 시간보다 짧게 둔다. 오래 기다린 뒤 질의를 시작하면 이미 응답할 시간이 없다. 사용 중·유휴·대기 연결 수, 빌리는 시간과 보유 시간을 보며 부하 시험으로 조정한다.
반납도 계약이다. 트랜잭션을 끝내고 세션 상태를 초기화해야 다음 요청에 설정이나 잠금이 새지 않는다. 누수, 네트워크에서 끊긴 연결과 데이터베이스의 수명 제한도 감지해 교체한다.
추천 꼬리질문
관련 질문
- DB 커넥션을 매번 새로 맺는 비용이 큰 이유는?데이터베이스DB 커넥션 생성 비용이 크다는 점을 이해해야 커넥션 풀의 필요성을 이해할 수 있다.
- 스레드 풀을 사용하는 주된 이유는 무엇인가?운영체제스레드 풀과 커넥션 풀 모두 리소스 생성 및 파괴 비용을 줄이기 위해 미리 객체를 생성해두고 재사용하는 풀링(Pooling) 개념을 공유한다.
- ORM을 사용하는 이유는 무엇인가?프레임워크ORM은 데이터베이스 연결 효율을 높이기 위해 내부적으로 커넥션 풀을 활용하여 쿼리를 실행한다.
- 커넥션 풀 크기를 CPU 코어 수로 잡는 이유는?데이터베이스커넥션 풀의 존재 이유를 알아야 적정 크기 산정 논의가 읽힌다
- TCP 연결을 끊을 때 TIME_WAIT 상태가 필요한 이유는?네트워크