클라이언트의 요청에 따라 각 어플리케이션의 thread 에서 데이터베이스에 접근하기 위해서는 연결 (Connection) 이 필요하다.
DB Connection Cycle
- 어플리케이션 데이터 층 (layer) 에서
DataSource에게 DB Connection 을 요청한다. DataSource는 DB 연결을 수립하기 위해 DB 드라이버를 사용한다.- DB 연결이 생성되고 TCP 소켓이 열린다. 이제 어플리케이션과 DB 는 연결되었다.
- 어플리케이션이 DB 에 읽고 쓰기를 반복한다.
- DB 연결이 더 이상 필요하지 않다면, 연결을 닫는다.
- 이후 소켓도 닫는다.
2. Connection Pool (연결 풀)
DB 로의 추가 요청이 필요할 때 연결을 재사용할 수 있도록 관리되는 DB 연결의 캐시
- DB 연결 정보를 캐시 (연결 풀) 에 저장 및 관리하여 application 단에서 DB 연결 정보가 필요할 때마다 Connection pool 에서 연결 정보를 가지고 와 사용하도록 한다.
- 쉽게 생각하면, 연결 풀이라는 캐시안에 여러개의 연결 자원이 있고, 사용자는 DB 에 연결하고 싶을 때마다 연결 자원을 풀에서 꺼내 사용하는 것으로 생각하면 된다.

2.1. 장점
각 사용자마다 DB 연결을 열고 유지보수하는데 비용이 많이 들고 자원을 낭비하므로, 연결이 수립된 이후 풀에 위치시키면, 새로운 연결을 수립할 필요가 없어진다.
Q. 어떤 방식으로 비용이 절약되는가?
A. DB 에 연결하기 위한 연결 정보 생성 시간을 절약할 수 있다.
2.2. 단점
Pool 에 연결을 DB 연결 요청보다 너무 많이 생성해 놓으면, 메모리 낭비가 발생할 수 있다.
2.3. Connection Pool Cycle
-
DB 와 연결된 연결 객체들을 미리 생성하여 pool 에 저장한다.
-
Application 이
DataSource에 DB 연결을 요청하면, pool 에서 Connection 객체를 가져와 DB 에 접근한다.- Pool 에 생성된 Connection 을 모두 사용했을 때 연결 요청이 들어온다면, 요청한 클라이언트는 대기 상태로 전환시키고 Pool 에 Connection 이 반환되면 대기 상태에 있는 클라이언트에게 순차적으로 제공된다.
-
처리가 끝나면 다시 pool 에 반환한다.

3. Thread Pool (스레드 풀)
작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고, 작업 큐 (Queue) 에 들어오는 작업들을 하나씩 스레드가 맡아 처리하는 것
3.1. 장점
스레드를 생성 및 수거하는데 드는 비용이 절약된다. 또한, 이러한 장점에 의해 작업 실행에 딜레이 발생 정도를 완화할 수 있다.
3.2. 단점
DB 연결 Pool 과 비슷하게, 스레드를 너무 많이 생성해 놓으면 메모리 낭비가 발생한다.