어 나 갱수.

[DB] DBCP 이란? 🫶 본문

DB

[DB] DBCP 이란? 🫶

김경수 2024. 1. 28. 14:07
728x90

안녕하세요, 오늘은 DBCP(데이터베이스 커넥션 풀)에 대해 알아보겠습니다. 

 

Client로부터 웹 애플리케이션에 요청이 들어올 때마다 데이터베이스 연결을 수립하고, 해재하는 것은 굉장히 비효율적이라고 생각합니다.

여러 개의 DB Connection을 미리 생성해 놓고, 필요할 때마다 DB Connection을 가져다가 사용하는 방식을 사용한다면 더 효율적인 방식이라고 생각합니다. 

 

WAS는 기본적으로 DB Connection이 필요할때 DB Connection을 직접 생성하지 않고 DB Connection Pool에 있는 Connection 객체를 가져다가 사용하고, 다 사용한 Connection 객체는 반환합니다.

 

 

connection Pool에 대해 다시 정리해 보겠습니다.

 

  1. Connection Pool에 사용할 DB Connection들을 미리 생성해 놓습니다.
  2. DB Connection이 필요할 때 Connection Pool에서 미리 만들어 놓은 DB Connection을 가져옵니다.
  3. DB Connection 객체를 통해 작업을 수행합니다.
  4. 다 사용한 DB Connection을 Connection Pool로 다시 반환합니다.

 

위에서 말했다시피 기본적으로 jdbc는 Connection 객체를 생성하고, 미리 Pool에 저장해놓는다고 한다.

Connection 객체는 DB에 연결하는데 필요한 정보들을 Connection에 담는다.

DB의 주소나, username, password 들을 사용해서 Connection 객체를 생성한다.

 

Connection Pool에 저장해 놓는다는 거는 어떤 뜻일까?

DB는 기본적으로 TCP/IP 통신을 통해 이뤄진다. TCP는 연결을 한번 맺고 나면 따로 끊기 전까지는 연결을 끊지 않는다.

연결상태를 계속 유지하고 있기 때문에  Connection Pool에 Connection 10개의 객체를 저장해 놓는다는 말은 Connection과 10번의 TCP연결을 해놓고 연결이 유지된 상태로 Connection Pool에 저장해서 나중에 언제든지 Client와 통신할 수 있도록 해놓겠다는 의미입니다. 

 

왜 사용하나요?

웹 애플리케이션은 보통 CRUD작업을 할 때 데이터베이스를 사용합니다.

데이터베이스와 커넥션을 맺는 작업은 매우 느리며 비용이 많이 드는 작업입니다.

만약에 다수의 사용자가 동시에 웹 서버에 DB Connection 요청을 하게 된다면 최악의 경우 서버가 다운될 수도 있습니다.

이러한 상황을 방지하고자 DBCP를 사용합니다.

 

 

위 사진과 같이 Connection Pool에 Connection 객체를 만들어 놓고 Client와 통신을 할 때마다 하나씩 빌려줍니다.

Client와 통신이 끝나고 다 사용한 Connection을 다시 Connection Pool에 반납하기 때문에 Connection Pool에서는 Connection을 만들 필요가 없습니다.

 

만약 Connection Pool에 있는 Connection을 다 빌려주어서 더 이상 빌려줄 Connection 객체가 없을 때 Client로부터 요청이 오면 

Client는 대기상태가 되고 다른 Client가 Connection을 반환하면 그때 Connection을 사용하는 구조입니다.

728x90

'DB' 카테고리의 다른 글

[DB] 정규화란 ? 🐼  (1) 2024.02.04
[DB] 인덱스(Index)란? 😛  (1) 2024.01.31
[DB] 이상 현상이란 ??👍🏿  (0) 2024.01.25
[DB] Redis를 왜 사용할까 ?? 🥱  (0) 2023.11.29
[DateBase] Redis란? 🙏🏾  (0) 2023.09.28