Connection Pool (커넥션 풀) 이란?
커넥션 풀은 데이터베이스 연결을 효율적으로 관리하는 기술로, 미리 생성된 연결 객체를 풀에 보관하여 애플리케이션이 필요할 때 재사용함. 연결 생성 및 해제의 오버헤드를 줄이고 성능을 향상시킬 수 있음
커넥션 풀은 주로 웹 애플리케이션과 데이터베이스 간의 연결 관리에 사용되며, 멀티스레드 환경에서 안정적으로 동작함. 풀에는 미리 설정된 개수의 연결 객체가 유지되며, 애플리케이션은 필요한 연결을 풀에서 가져와 작업을 수행한 후 반환하는데, 이를 통해 데이터베이스 연결 관리의 성능과 확장성을 개선할 수 있다.
사용한 라이브러리
import pymysql
from sshtunnel import SSHTunnelForwarder
from dbutils.pooled_db import PooledDB
SSH 터널링
# SSH Tunneling
SSH_TUNNEL = {
'ssh_address_or_host': [SSH서버주소],
'ssh_username': [SSH서버아이디],
'ssh_pkey': [SSHprivate키파일],
'remote_bind_address': ([DB서버주소], [DB포트번호]),
}
tunnel = SSHTunnelForwarder(**SSH_TUNNEL)
tunnel.start()
커넥션 풀 생성
# DB 접속 정보
DB_CONFIG = {
"host": "127.0.0.1",
"database": [DB명],
"user": [DB아이디],
"password": [DB비밀번호],
"charset": 'utf8',
"maxconnections": 5 # 유지할 커넥션 수
}
pool = PooledDB(
creator=pymysql,
**DB_CONFIG,
autocommit=True,
port=tunnel.local_bind_port,
cursorclass=pymysql.cursors.DictCursor,
blocking=True,
)
커넥션 생성 & DB 접속 & 커넥션 반환
# 커넥션 생성
connection = pool.connection()
cursor = self.connection.cursor()
# DB 접속하여 결과 반환
query = "SELECT * FROM employees WHERE emp_no = %(emp_no)s"
data = { 'emp_no': 2 }
cursor.execute(query, data)
result = cursor.fetchall()
# 반환
connection.close()
cursor.close()
반응형
'CS' 카테고리의 다른 글
docker sudo 없이 실행하기 (docker group 지정) (0) | 2023.07.13 |
---|---|
파이썬 bson 파일 열기 (0) | 2023.07.11 |
vimrc 설정하기 (0) | 2023.07.05 |
bipartite 그래프 간단하게 시각화하기 (0) | 2023.06.30 |
Git 기존 브랜치 가져와서 새로운 브랜치 생성하기 (0) | 2023.06.05 |