본문 바로가기
CS

파이썬에서 SSH 터널링과 mysql 커넥션 풀을 통해 DB 접속하기

by judy@ 2023. 7. 10.

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()

 

반응형