CS/SQL

[MySQL] Connection Pool을 사용하는 이유

2021. 4. 16. 10:30
목차
  1. 1. Connection이란?
  2. 2. Connection Pool이란?
  3. 3. MySQL에서 Connection Pool을 사용할 때 장점
  4. 4. Node.js에서 Connection Pool 구현

1. Connection이란?

클라이언트(애플리케이션)측에서 데이터베이스에 접속해서 질의를 수행한 후, 결과를 받고 접속을 종료하는 일련의 과정을 의미한다.

mysql.createConnection() -> connection.connect() -> connection.query() -> connection.end()

 

2. Connection Pool이란?

사용자의 요청에 따라 Connection을 생성하다 보면 많은 수의 연결이 발생했을 때 서버에 과부하가 걸리게 된다. 이러한 상황을 방지하기 위해 미리 일정수의 Connection을 만들어 Pool에 담아뒀다가 사용자의 요청이 발생하면 연결을 해주고 연결 종료 시 Pool에 다시 반환하여 보관하는 것이 바로 Connection Pool이다. 이러한 Connection Pool은 Connection을 미리 생성해두고 관리함으로써 데이터베이스에 과부하를 방지하고 유동적으로 Connection을 관리할 수 있다는 장점이 있다.

 

다음 두 개의 그림을 보면 이해가 수월할 것이다.

 

https://brownbears.tistory.com/289
https://medium.com/@k.wahome/database-connections-less-is-more-86c406b6fad

 

3. MySQL에서 Connection Pool을 사용할 때 장점

MS SQL(SQL Server)나 Oracle과 같은 유료 DBMS는 타임아웃이란 개념이 존재한다. 단순하게 말하자면 이러한 타임아웃은 Connection을 자동으로 release(접속종료)해주는 것을 의미하는데, 무료 DBMS인 MySQL은 기본적으로 이러한 Connection을 자동으로 release 해주지 않는다. 하지만 MySQL에서 Connection Pool을 사용하면 다음과 같은 형태로 Auto Release를 지원한다. 

pool.query() = pool.getConnection() + connection.query() + connection.release()

 

4. Node.js에서 Connection Pool 구현

다음은 공식문서에서 발췌한 Connection Pool 구현 예제이다.

const mysql = require('mysql2');
 
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  database: 'test',
  waitForConnections: true,
  connectionLimit: 10,
  queueLimit: 0
});

pool.query("SELECT field FROM atable", function(err, rows, fields) {
   // Connection is automatically released when query resolves
})

pool.getConnection(function(err, conn) {
   // Do something with the connection
   conn.query(/* ... */);
   // Don't forget to release the connection when finished!
   pool.releaseConnection(conn);
})

 

 

 


Reference

www.kdata.or.kr/info/info_04.html

effectivesquid.tistory.com/entry/Timeout%EC%97%90-%EA%B4%80%ED%95%9C-%EC%A0%95%EB%A6%AC

medium.com/@k.wahome/database-connections-less-is-more-86c406b6fad

brownbears.tistory.com/289

github.com/mysqljs/mysql/issues/1202

저작자표시 비영리 (새창열림)

'CS > SQL' 카테고리의 다른 글

[MySQL] 하나의 글과 연관된 여러 개의 이미지 추출하는 쿼리 작성하기 (feat. GROUP_CONCAT)  (0) 2021.06.10
[SQLD] SQLD 합격 후기 및 공부 방법  (6) 2021.04.18
[SQLD] Join 연산 정리  (0) 2021.03.18
[MySQL] MySQL에서 CSV파일 Import하기  (5) 2021.02.10
[MySQL] DB 생성 및 접속  (0) 2021.01.02
  1. 1. Connection이란?
  2. 2. Connection Pool이란?
  3. 3. MySQL에서 Connection Pool을 사용할 때 장점
  4. 4. Node.js에서 Connection Pool 구현
'CS/SQL' 카테고리의 다른 글
  • [MySQL] 하나의 글과 연관된 여러 개의 이미지 추출하는 쿼리 작성하기 (feat. GROUP_CONCAT)
  • [SQLD] SQLD 합격 후기 및 공부 방법
  • [SQLD] Join 연산 정리
  • [MySQL] MySQL에서 CSV파일 Import하기
코택
코택
코택
TaxFree
코택
전체
오늘
어제
  • 분류 전체보기 (369)
    • Spring (29)
      • Spring (18)
      • 스프링 핵심 원리 - 고급편 (11)
    • Spring Batch (4)
    • JPA (4)
    • CS (89)
      • 자료구조 (2)
      • 네트워크 (5)
      • 운영체제 (1)
      • 데이터베이스 (4)
      • SQL (7)
      • 알고리즘 이론 (4)
      • 알고리즘 문제 풀이 (66)
    • 웹 (28)
      • React.js (4)
      • Next.js (1)
      • Node.js (14)
      • FastAPI (4)
      • Django (5)
    • 프로그래밍 언어 (45)
      • Python (5)
      • Java + Kotlin (29)
      • JavaScript + TypeScript (11)
    • 테스트코드 (26)
      • ATDD, 클린 코드 with Spring (4)
      • 이규원의 현실 세상의 TDD: 안정감을 주는 코드.. (20)
    • 인프라 (6)
      • AWS (2)
      • Kubernetes (4)
    • 트러블슈팅 (25)
    • 책 (89)
      • Effective Java (54)
      • Effective Kotlin (14)
      • 도메인 주도 개발 시작하기: DDD 핵심 개념 정.. (11)
      • 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술 (6)
      • 도메인 주도 설계 첫걸음 (4)
    • Git (10)
    • 회고 (5)
    • etc (8)

블로그 메뉴

  • 홈
  • 방명록
  • 관리
  • GitHub
  • LinkedIn

공지사항

  • 스킨 관련

인기 글

태그

  • fastapi
  • 그래프 탐색
  • 파이썬
  • mysql
  • atdd
  • 깊이 우선 탐색
  • dp
  • BOJ
  • 그래프
  • 장고
  • Shortest Path
  • Git
  • 백준
  • http
  • 브루트포스

최근 댓글

최근 글

hELLO · Designed By 정상우.
코택
[MySQL] Connection Pool을 사용하는 이유
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.