Connection Pool

wkdwoo·2022년 6월 22일
0

DB

목록 보기
2/4

개발자로서 데이터베이스 연결을 대수롭지 않게 여겼을 수 있다. 단일 데이터베이스 connection은 비용이 많이 들지 않지만, 규모가 확장됨에 따라 문제가 발생할 수 있다. connection pooling을 이해하며 규모에 맞게 효율적인 애플리케이션 구축에 대해 알아보자.

데이터베이스 connection pooling은 다른 사용자가 데이터베이스 연결을 열린 상태로 유지하는 데 사용되는 방법이다.

pooling을 이야기하기 전에 데이터베이스 작업을 수행하기 위해 애플리케이션이 데이터베이스를 연결할 때 어떤 일이 일어나는지 잠깐 살펴보자.

  1. connection을 생성하기 위해 애플리케이션이 데이터베이스 드라이버를 사용한다.
  2. 애플리케이션과 데이터베이스를 연결하기 위해 TCP socket을 연다.
  3. 3-way handshake를 통해 사용자를 인가하고 TCP socket 너머로 데이터를 읽고 쓴다.
  4. 작업이 완료되고 connection을 닫는다.
  5. TCP socket을 닫힌다.

위에서 보았듯이 connection과 네트워크의 개폐는 TCP protocol을 통해 computing resource가 필요한 multi-step process이다.



https://hyuntaeknote.tistory.com/12

아래의 내용은 MySQL 8.0 기준으로 INSERT 문을 수행하는 과정을 나타낸다. 괄호 안의 숫자는 각 과정을 수행하는데 필요한 비용의 비율을 의미한다( x out of ten)


애플리케이션(서버)이 DB에 접근하기 위해 Connection을 생성하는 작업이 가장 큰 비용을 차지하는 것을 볼 수 있다. 즉, Connection을 반복적으로 생성하는 것은 큰 비용이 드는 작업임을 알 수 있다.

이를 해결하기 위해 사용하는 것이 Connection Pooling이다.


Connection Pooling은 매번 소켓을 생성하는 것이 아니라 미리 정해진 개수의 Connection을 생성해서 Pool에 보관하다 재사용하여 데이터를 교환하는 방식이다. pooling은 connection을 활성 상태를 유지하고 있어서, 이후 connection 연결이 요청될 때 다른 connection을 만드는 것 보다 활성 상태의 conection이 우선된다.

이렇게 connection pooling을 하면 TCP protocol을 위해 3-way handshaking 과정을 제거할 수 있으므로 훨씬 더 빠르게 통신할 수 있다.

글보다는 그림이 조금 더 직관적이다. 아래의 그림을 들여다보고 이해도를 높여보자.



https://ejbvn.wordpress.com/category/week-2-entity-beans-and-message-driven-beans/day-09-using-jdbc-to-connect-to-a-database/




REFERENCE

Day 09. Using JDBC to Connect to a Database | EJB In 21 Days ? (wordpress.com)
What is Connection Pooling, and Why Should You Care (cockroachlabs.com)
A Simple Guide to Connection Pooling in Java | Baeldung
What is database pooling? - Stack Overflow
내가 만든 서비스는 얼마나 많은 사용자가 이용할 수 있을까? - 3편(DB Connection Pool) (tistory.com)

profile
그때는맞고지금은틀리다

0개의 댓글