연결 풀링
연결 풀을 사용하면 연결 관리 오버헤드를 경감하고 데이터 액세스를 위한 개발 태스크를 줄일 수 있습니다.
애플리케이션이 백엔드 저장(예: 데이터베이스)에 액세스할 때마다 해당 데이터 저장소에 대한 연결을 작성, 유지보수 및 해제하기 위한 자원이 필요합니다. 이 프로세스가 전체 애플리케이션 자원에 미칠 수 있는 부담을 완하하기 위해 Application Server는 애플리케이션 서버에서 애플리케이션이 공유할 수 있는 백엔드 연결의 풀을 관리자가 설정할 수 있게 합니다. 연결 풀링은 연결 오버헤드를 여러 사용자 요청에 분산시켜 이후 요청에 사용할 수 있도록 애플리케이션 자원을 보존합니다.
애플리케이션 서버는 연결 풀링 및 연결 재사용을 위한 JDBC 4.0 API를 지원합니다. 연결 풀은 데이터베이스를 사용하는 엔터프라이즈 Bean뿐만 아니라, 애플리케이션 내에서의 직접 JDBC 호출에도 사용됩니다.
연결 풀링의 이점
연결 풀링은 연결, 특히 웹 기반의 애플리케이션을 요구하는 애플리케이션의 응답 시간을 향상시킵니다. 사용자가 웹을 통해 자원에 요청을 수행할 경우 자원이 데이터 소스에 액세스합니다. 사용자는 인터넷에서 애플리케이션으로 빈번하게 연결하고 연결을 끊기 때문에 데이터 액세스를 위한 애플리케이션 요청이 상당한 볼륨을 차지할 수 있습니다. 결과적으로 웹 기반 애플리케이션의 경우 전체 데이터 저장소 오버헤드가 빠르게 증가하게 되고 성능은 저하됩니다. 그러나 연결 풀링 기능을 사용하면 웹 애플리케이션이 정상적인 결과와 비교할 때 20배 정도 성능을 향상시킬 수 있습니다.
연결 풀링 상태에서 데이터 소스가 연결 풀에서 기존 연결을 찾아 사용하기 때문에 대부분의 사용자 요청은 연결을 새로 작성할 때 오버헤드를 발생시키지 않습니다. 요청이 처리되어 사용자에게 응답이 리턴되면, 자원은 연결을 연결 풀로 리턴하여 다시 사용합니다. 연결을 끊을 경우 발생하는 오버헤드는 방지됩니다. 각 사용자 요청에는 연결 또는 연결 해제 비용이 따릅니다. 초기 자원이 사용되어 풀에서 연결을 생성한 후에, 기존 연결이 다시 사용되므로 추가 오버헤드는 중요하지 않습니다.
연결 풀링의 사용 시기
연결 풀링은 다음의 기준을 충족하는 애플리케이션에서 사용하십시오.
- WebSphere는 연결을 사용할 때마다 연결 확보 및 릴리스 시 발생하는 오버헤드를 허용할 수 없습니다.
- Application Server 내에서 JTA(Java™ Transaction API) 트랜잭션을 필요로 합니다.
- 동일한 트랜잭션 내의 복수 사용자 간에 연결을 공유할 수 있습니다.
- 애플리케이션 서버 내의 로컬 트랜잭션 관리를 위해 제품의 기능을 이용해야 합니다.
- 고유의 연결 풀을 관리하지 않습니다.
- 고유의 연결 작성( 데이터베이스 이름, 사용자 이름 또는 비밀번호)을 관리하지 않습니다.

연결을 함께 풀링하는 방법
고유한 데이터 소스 또는 연결 팩토리를 구성할 때 고유 JNDI(Java Naming and Directory Interface) 이름을 부여해야 합니다. 이 JNDI 이름은 구성 정보와 함께 연결 풀을 작성하는 데 사용됩니다. 구성된 각 데이터 소스 또는 연결 팩토리에 대해 별도의 연결 풀이 있습니다.
모든 서버가 myDataSource를 사용하는 세 개의 서버 클러스터를 실행하고 myDataSource의 최대 연결 설정이 10이면, 최대 30개의 연결(세 개의 서버 x 10개의 연결)을 생성할 수 있습니다.
클러스터 내에서, 세 개의 z/OS® 제어기는 각각 myDataSource를 사용하는 세 개의 하위(servant)를 포함하며, Application Server가 모든 myDataSource 인스턴스에 대해 작성하는 연결 풀의 경우에는 최대 연결 값을 10으로 설정합니다. 따라서 최대 90개의 연결을 생성할 수 있습니다(9개의 하위(servant) x 10개의 연결).
이 동작이 사용자의 백엔드 자원이 지원할 수 있는 연결 수에 잠재적으로 어떤 영향을 주는지 고려해 보십시오. 자세한 정보는 연결 풀 설정 주제를 참조하십시오.
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
- 각 엔티티 Bean 트랜잭션은 트랜잭션 핸들 전용 추가 데이터베이스 연결을 필요로 합니다.
- 복제가 사용되는 경우 각 복제본에 대해 하나의 데이터 풀이 존재합니다.
지원되는 UNIX 시스템에서는 별도의 DB2® 프로세스가 각 연결마다 작성되고 이러한 프로세스는 낮은 메모리로 시스템의 성능에 빠르게 영향을 미치며 오류를 유발합니다.
연결 공유를 사용할 때 동일한 연결 풀에서 확보되는 연결만을 공유할 수 있습니다.