#. 전통적 JDBC DriverManager
기존 DriverManager는 Connection이 필요할 때마다 새롭게 생성하고 작업이 끝나면 해제하는 작업을 반복했다. Connection을 연결하고 종료하는 작업이 가볍지 않기 때문에 매 요청마다 Connection을 만드는 것은 리소스가 많이 필요하고 시간이 걸리는 작업이라는 한계가 있다.
∴ Connection Pool이 등장하였다.
#. Connection
DB Connection은 데이터베이스와의 연결을 뜻한다.
여느 언어나 프레임워크가 그렇듯, DB와 상호작용 하기 위해서는 연결이 되어있어야 하는데, 이게 바로 Connection.
Java에는 DB Connection을 지원하는 JDBC라는 호환성이 뛰어나고 편리한 API가 있다.
Hibernate, JPA, iBatis 등의 Data Access API들은 이 JDBC API를 사용해 DB에 접근하는 것이다.
이 JDBC라는 편리한 APU는 DB에 접근하기 위해 Connection Object를 사용한다.

#. Connection Pool
디자인 패턴에는 싱글톤(Singleton) 패턴이 있다. 싱글톤 패턴은 객체를 오직 1개만 생성하고, 이를 재활용하는 것을 의미한다. 객체의 개수는 여러 개로 지정할 수 있지만 싱글톤의 핵심은 instance를 미리 생성해서 그걸 가져다 사용하고, 반납하는 방식으로 사용하는 것이다. 이미 생성된 인스턴스를 사용하기 때문에 메모리도 효율적으로 쓸 수 있고, 속도도 더 빨라지게 된다.
이처럼 DB Connection에도 이런 싱글톤의 미학을 적용해서 미리 Connection Instance를 생성해서 저장해두고, 이를 대여해서 Connection을 사용하고, 다시 반납하는 방식으로 Connection을 관리하고자 하는 요구사항이 생겨났고, Connection Pool이 탄생하게 된다.
Connection Pool (CP)
DB Connection을 미리 만들고, 해당 Connection을 관리한다.
(미리 커넥션을 풀에 담아두어서 커넥션이 필요할때마다 꺼내어주는 장소)
CP는 그 이름에서 짐작할 수 있듯, 저장해둔 Connection들을 모아두고 관리하는 Pool Instance이다. Connection Pool은 보통 createConnection, getConnection, evictConnection(returnConnection) 등의 Connection을 생성하고 대여하고, 반납하는 등의 메소드들을 포함한다. 일반적으로 CP instance의 생성자에 Connection을 생성하는 코드가 포함되어 있어, 생성과 동시에 DB Connection을 만들게 된다.
CP를 사용한다면 DB 연결 시간이 획기적으로 줄어드는 것을 확인할 수 있다. (CP를 사용하지 않는 DataSource도 있다.)
매번 커넥션을 생성하고 종료시켰던 직접적인 jdbc DriverManger 연결과 달리 커넥션 풀은 애플리케이션을 시작하는 시점에서 필요한만큼 커넥션을 확보한다. 따라서 초기화 이후 애플리케이션 서버 내부에서 커넥션 획득이 가능하며, 사용이 끝나면 커넥션을 종료하는게 아니라 다시 커넥션 풀에 반납해서 다음 번 요청 시 사용할 수 있도록 한다.

Connection Pool 안에서 Connection들은 DB와 미리 TCP/IP로 연결이 되어있기 때문에, 언제든지 DB로 SQL을 전달할 수 있다.


이제 더이상 DriverManager를 통해서 Connection을 획득하지 않는다. 이미 Connection Pool에 생성된 Connection 객체 참조로 가져다가 쓴다. 사용하고 나면 Connection을 종료하지 않고 Connection Pool에 다시 반납한다.
#. DataSource
사용자의 요청이 빈번하게 일어나는 서비스에서는 사용자의 요청 마다 Connection 객체를 사용한다. Java에서 DB 접근은 효율성을 고려해서 Connection을 미리 생성해 Connection Pool에 저장해두고, 이를 재사용하는 형식으로 DB Connection을 구현됐다. 이 때 DB 연결 정보를 저장하고, Connection을 생성하고, Connection Pool에 등록하고, 관리하는 역할을 하는 것이 바로 DataSource이다.
DataSource
DB와의 연결을 미리 생성하고, 그것을 관리하는 역할을 하는 오브젝트.
간단히 DataSource는 DB Connection을 관리하는 인터페이스라고 생각하면 된다. 보통 getConnection() 등의 메소드를 지원하며, JPA 등 DB에 접근하고자 하는 툴들은 해당 메소드들을 통해서 DB Connection을 가져와 사용하고, 반납한다. 중요한 것이 getConnection파트이기 때문에 DataSource를 공부한다면, getConnection 메소드만 고려하면 된다고 한다.
'Middleware(WAS) > Java' 카테고리의 다른 글
| JSP Cache (0) | 2026.04.16 |
|---|---|
| Server Performance Stats (0) | 2026.02.23 |
| WAR vs JAR (0) | 2026.02.20 |
| Thread 및 Thread Dump (0) | 2023.08.29 |