[PostgreSQL/Python] DB ํŠธ๋žœ์žญ์…˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ | asyncio, asyncpg | ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€ ๋งŒ๋“ค๊ธฐ

2023. 11. 3. 23:09ยท๐Ÿ’ป Programming/Database
๋ฐ˜์‘ํ˜•

asyncio

asyncio๋Š” Python์˜ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ด๋ฒคํŠธ ๋ฃจํ”„์™€ ์ฝ”๋ฃจํ‹ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • ๋น„๋™๊ธฐ ์ฝ”๋“œ ๊ด€๋ฆฌ: asyncio๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ์Šค์ผ€์ค„๋ง์ด ๊ฐ€๋Šฅ. 
  • ์ด๋ฒคํŠธ ๋ฃจํ”„: asyncio์˜ ํ•ต์‹ฌ ์š”์†Œ๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๋กœ, ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์Šค์ผ€์ค„๋ง๊ณผ ์‹คํ–‰์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฉด์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ฒ˜๋ฆฌ.
  • ์ฝ”๋ฃจํ‹ด ์ง€์›: asyncio๋Š” ์ฝ”๋ฃจํ‹ด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ •์˜ํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅ. async def๋กœ ์ •์˜๋œ ์ฝ”๋ฃจํ‹ด ํ•จ์ˆ˜๋Š” await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ž‘์—…์„ ์ผ์‹œ ์ค‘๋‹จ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.
  • ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ: asyncio๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Œ. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ, ์†Œ์ผ“ ํ†ต์‹ , ํ‚ค๋ณด๋“œ ๋ฐ ๋งˆ์šฐ์Šค ์ž…๋ ฅ๊ณผ ๊ฐ™์€ ์ด๋ฒคํŠธ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ.
  • ๋ณ‘๋ ฌ์„ฑ๊ณผ ๋™์‹œ์„ฑ: asyncio๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋น„๋™๊ธฐ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ. ์ด๋Š” I/O ์ค‘์‹ฌ์˜ ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ์œ ์šฉ.
  • ๋น„๋™๊ธฐ ์ž…์ถœ๋ ฅ(IO): asyncio๋Š” ๋น„๋™๊ธฐ ์ž…์ถœ๋ ฅ์„ ์ง€์›ํ•˜๋ฉฐ ํŒŒ์ผ ์ž…์ถœ๋ ฅ, ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋ฐ ๋‹ค๋ฅธ I/O ์ž‘์—…์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

asyncpg

asyncpg๋Š” PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ๋น„๋™๊ธฐ Python ๋“œ๋ผ์ด๋ฒ„๋กœ, ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง€์›ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

  • ๋น„๋™๊ธฐ ์ง€์›: asyncpg๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์–ด, ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ, ์—…๋ฐ์ดํŠธ ๋ฐ ํŠธ๋žœ์žญ์…˜์„ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ.
  • PostgreSQL๊ณผ์˜ ํ†ตํ•ฉ: asyncpg๋Š” PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ๋˜์–ด PostgreSQL์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.
  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ: asyncpg๋Š” ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์›์ž์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ณ  ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Œ.
  • ์ปค๋„ฅ์…˜ ํ’€๋ง: asyncpg๋Š” ์ปค๋„ฅ์…˜ ํ’€์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๋ฉฐ ๋†’์€ ๋™์‹œ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์„ ์คŒ. (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜)

 

์ฝ”๋“œ ์˜ˆ์ œ

import asyncio
import asyncpg

async def main():
    # PostgreSQL ์—ฐ๊ฒฐ ์„ค์ • ๋ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€ ์ƒ์„ฑ
    pool = await asyncpg.create_pool(
    		host="...",
            port=...,  
            user="...",
            password="...",
            database="..."
            )
    
    try:
        # ํ’€์—์„œ ์—ฐ๊ฒฐ์„ ๊ฐ€์ ธ์˜ด
        async with pool.acquire() as conn:
            # ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘
            async with conn.transaction():
                # ์—ฌ๊ธฐ์— ๋น„๋™๊ธฐ๋กœ ์‹คํ–‰ํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
                # ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
                
                # ์ฟผ๋ฆฌ ์‹คํ–‰ ์˜ˆ์‹œ:
                result = await conn.fetch("SELECT * FROM my_table")
                for row in result:
                    print(row)
                
                # ์—…๋ฐ์ดํŠธ ์˜ˆ์‹œ:
                await conn.execute("UPDATE my_table SET column1 = $1 WHERE column2 = $2", new_value, some_condition)
    
    except asyncpg.exceptions.PostgresError as e:
        # ์—๋Ÿฌ ์ฒ˜๋ฆฌ
        print(f"PostgreSQL ์—๋Ÿฌ: {e}")
    
    finally:
        # ํ’€ ๋‹ซ๊ธฐ
        await pool.close()

if __name__ == "__main__":
    asyncio.run(main())

 

  • asyncpg ๋กœ postgresql DB ์—ฐ๊ฒฐ pool์„ ๋งŒ๋“ค์–ด ํŠธ๋žœ์žญ์…˜์„ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌ
  • API ์„ค๊ณ„์‹œ API ํ˜ธ์ถœํ•  ๋•Œ DB์— ํŠธ๋žœ์žญ์…˜์„ ํ•˜๋Š” ๊ฒฝ์šฐ์—” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์ˆ˜

 

๋ฐ˜์‘ํ˜•

'๐Ÿ’ป Programming > Database' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[PostgreSQL] ๋‚ ์งœ ๋˜๋Š” ์‹œ๊ฐ„์˜ ์ผ๋ถ€๋ฅผ ์ง€์ •๋œ ๋‹จ์œ„๋กœ ์ž๋ฅด๊ธฐ | 'date_trunc' ํ•จ์ˆ˜ ์„ค๋ช…  (0) 2023.12.03
[PostgreSQL/Python] psycopg2 : PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ  (0) 2023.06.29
'๐Ÿ’ป Programming/Database' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [PostgreSQL] ๋‚ ์งœ ๋˜๋Š” ์‹œ๊ฐ„์˜ ์ผ๋ถ€๋ฅผ ์ง€์ •๋œ ๋‹จ์œ„๋กœ ์ž๋ฅด๊ธฐ | 'date_trunc' ํ•จ์ˆ˜ ์„ค๋ช…
  • [PostgreSQL/Python] psycopg2 : PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘์†ํ•˜๊ณ  ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ
๋ญ…์ฆค
๋ญ…์ฆค
AI ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ
    ๋ฐ˜์‘ํ˜•
  • ๋ญ…์ฆค
    CV DOODLE
    ๋ญ…์ฆค
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • โœจ About Me
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (198)
      • ๐Ÿ“– Fundamentals (33)
        • Computer Vision (9)
        • 3D vision & Graphics (6)
        • AI & ML (15)
        • NLP (2)
        • etc. (1)
      • ๐Ÿ› Research (64)
        • Deep Learning (7)
        • Image Classification (2)
        • Detection & Segmentation (17)
        • OCR (7)
        • Multi-modal (4)
        • Generative AI (6)
        • 3D Vision (2)
        • Material & Texture Recognit.. (8)
        • NLP & LLM (11)
        • etc. (0)
      • ๐ŸŒŸ AI & ML Tech (7)
        • AI & ML ์ธ์‚ฌ์ดํŠธ (7)
      • ๐Ÿ’ป Programming (85)
        • Python (18)
        • Computer Vision (12)
        • LLM (4)
        • AI & ML (17)
        • Database (3)
        • Apache Airflow (6)
        • Docker & Kubernetes (14)
        • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ (4)
        • C++ (1)
        • etc. (6)
      • ๐Ÿ’ฌ ETC (3)
        • ์ฑ… ๋ฆฌ๋ทฐ (3)
  • ๋งํฌ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ํŒŒ์ด์ฌ
    ๊ฐ์ฒด ๊ฒ€์ถœ
    nlp
    pandas
    ํ”„๋กฌํ”„ํŠธ์—”์ง€๋‹ˆ์–ด๋ง
    LLM
    GPT
    AI
    material recognition
    3D Vision
    ์ปดํ“จํ„ฐ๋น„์ „
    OCR
    ๋„์ปค
    Text recognition
    OpenCV
    VLP
    ๊ฐ์ฒด๊ฒ€์ถœ
    Python
    object detection
    segmentation
    multi-modal
    OpenAI
    ChatGPT
    deep learning
    airflow
    ๋”ฅ๋Ÿฌ๋‹
    Computer Vision
    Image Classification
    CNN
    pytorch
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
๋ญ…์ฆค
[PostgreSQL/Python] DB ํŠธ๋žœ์žญ์…˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ | asyncio, asyncpg | ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ํ’€ ๋งŒ๋“ค๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”