Connection Pool vs Single Connection
Single Connection
- query를 실행하기 위해 공유된 하나의 connection만을 사용하는 것 ← application의 유저 수가 제한되어 있고 쿼리가 간단할 때 사용
- 쿼리가 실행되고 난 후 커넥션이 종료가 됨. 그리고 새로운 쿼리를 실행하기 위해 새 커넥션을 만들어야 하는데 이러한 커넥션을 열고 닫고 하는 과정은 application의 성능을 안좋게 할 수 있음
- Single Connection의 가장 큰 이슈는 커넥션이 갑자기 닫혔는데 application에서 이를 모르고 있을 때임
Connection Pooling
- Connection Pooling은 쿼리 실행의 성능을 향상시키기 위해 사용됨 (커넥션을 자주 열고 닫고 하는 것을 방지함으로써. 그리고 새 커넥션의 수를 줄임으로써)
- Connection Pooling에서는 active connection(사용중)과 available connection(대기 중)이 가능함
- 미리 connection을 만들어 놓음으로 유저가 새로운 커넥션을 만들기 위해 대기하는 시간을 줄일 수 있는 것임!

결론
- 아래 3가지 사항에 따라 Connection Pooling이 나을 수도, Single Connection이 나을 수도 있음
- application의 타입
- 동시 접속 user 수
- query의 복잡도
Connection Pool을 이용하지 않을 때 생기는 단점
네트워크 관점
- DBMS와의 통신은 TCP/IP로 이루어지고 매 Connection마다 TCP/IP의 3-way handshake(연결 맺기)와 4-way handshake(연결 끊기)를 반복하게 됨
- 위의 모든 요청은 실제 물리적 회선을 거쳐 이루어지기에 계속 반복하면 비효율적
DBMS 관점(오라클)
- 오라클과 클라이언트의 연결 과정
- 오라클 리스너 시작(
LISTEN
상태) - 애플리케이션에서 커넥션 시도
- 리스너와 클라이언트 사이에 소켓 생성
- 서버 프로세스의 생성
- 서버 프로세스를 생성하여 SQL 처리를 즉시 인계
- 연결마다 서버 프로세스를 생성하기 때문에 Connection을 연결하고 버리고 연결하고 버리고 하면 프로세스 생성, 종료를 반복하는 것이기 때문에 무거움
요약
- handshake 비용
- 프로세스나 스레드 생성/삭제 비용