File size: 1,744 Bytes
4c52fbf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# database_conn.py

import asyncpg
from typing import AsyncGenerator

# [์ฃผ์˜] ์ด ์ •๋ณด๋Š” ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
DB_USER = "neondb_owner"
DB_PASSWORD = "npg_rFA9DgloybO0"  # ์‹ค์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์‚ฌ์šฉ
DB_HOST = "ep-rapid-truth-ad2e6rnq-pooler.c-2.us-east-1.aws.neon.tech"
DB_NAME = "neondb"
DB_PORT = 5432
DB_SSL = 'require'

# ๊ธ€๋กœ๋ฒŒ DB ์—ฐ๊ฒฐ ํ’€ ๋ณ€์ˆ˜
pool: asyncpg.Pool = None

# ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ํ˜ธ์ถœ (FastAPI @app.on_event("startup")์—์„œ ์‚ฌ์šฉ)
async def connect_to_db():
    global pool
    print("DB ์—ฐ๊ฒฐ ํ’€ ์ดˆ๊ธฐํ™” ์ค‘...")
    try:
        pool = await asyncpg.create_pool(
            user=DB_USER,
            password=DB_PASSWORD,
            host=DB_HOST,
            database=DB_NAME,
            port=DB_PORT,
            ssl=DB_SSL 
        )
        print("DB ์—ฐ๊ฒฐ ์„ฑ๊ณต.")
    except Exception as e:
        print(f"DB ์—ฐ๊ฒฐ ์‹คํŒจ: {e}")
        raise e

# ์„œ๋ฒ„ ์ข…๋ฃŒ ์‹œ ํ˜ธ์ถœ (FastAPI @app.on_event("shutdown")์—์„œ ์‚ฌ์šฉ)
async def close_db_connection():
    global pool
    if pool:
        print("DB ์—ฐ๊ฒฐ ํ’€ ์ข…๋ฃŒ ์ค‘...")
        await pool.close()
        print("DB ์—ฐ๊ฒฐ ํ’€ ์ข…๋ฃŒ ์™„๋ฃŒ.")

# API ์—”๋“œํฌ์ธํŠธ์— DB ์—ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ํ•จ์ˆ˜ (FastAPI Depends์—์„œ ์‚ฌ์šฉ)
async def get_db_connection() -> AsyncGenerator[asyncpg.Connection, None]:
    """DB ์—ฐ๊ฒฐ ํ’€์—์„œ ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ์™€ ์—”๋“œํฌ์ธํŠธ์— ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค."""
    global pool
    if not pool:
        raise ConnectionError("DB ์—ฐ๊ฒฐ ํ’€์ด ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.")

    # async with ๊ตฌ๋ฌธ์œผ๋กœ ์—ฐ๊ฒฐ์„ ๊ฐ€์ ธ์™€ yield ํ›„, ์ž๋™์œผ๋กœ ํ’€์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    async with pool.acquire() as connection:
        yield connection