Files
Aislo/config/config_db.py
T

61 lines
1.5 KiB
Python

"""
config_db.py
데이터베이스 연결 설정 (MariaDB + aiomysql)
비동기 연결 풀 생성 및 관리.
"""
from typing import Optional
import aiomysql
from .config_system import (
DB_HOST,
DB_NAME,
DB_PASSWORD,
DB_POOL_MAX,
DB_POOL_MIN,
DB_PORT,
DB_USER,
)
# 글로벌 DB 풀 (앱 시작/종료 시 관리)
db_pool: Optional[aiomysql.Pool] = None
async def init_db_pool() -> aiomysql.Pool:
"""MariaDB 연결 풀 초기화"""
global db_pool
db_pool = await aiomysql.create_pool(
host=DB_HOST,
port=DB_PORT,
db=DB_NAME,
user=DB_USER,
password=DB_PASSWORD,
minsize=DB_POOL_MIN,
maxsize=DB_POOL_MAX,
# autocommit=False면 SELECT만 하고 반납된 커넥션에 열린 트랜잭션(옛 스냅샷)이
# 남아, 다른 커넥션이 커밋한 데이터(예: 방금 생성된 세션)를 못 읽는다.
# 다중 문장 트랜잭션은 connection.begin()을 명시적으로 사용한다.
autocommit=True,
charset="utf8mb4",
init_command="SET time_zone='+00:00'",
)
return db_pool
async def close_db_pool() -> None:
"""MariaDB 연결 풀 종료"""
global db_pool
if db_pool:
db_pool.close()
await db_pool.wait_closed()
db_pool = None
def get_db_pool() -> aiomysql.Pool:
"""현재 활성 DB 풀 반환. 없으면 RuntimeError"""
if not db_pool:
raise RuntimeError("DB pool not initialized. Call init_db_pool() first.")
return db_pool