Open CutTheWire opened 6 months ago
b3c128c
커밋 부분의 user_API.py
)db_dk= DB_docking()
@app.get("/users/")
def read_users():
users = []
try:
conn = db_dk.connection
cursor = conn.cursor(dictionary=True)
users = db_dk.read_all_user_cursor(cursor)
except Error as e:
raise HTTPException(status_code=400, detail=str(e))
finally:
cursor.close()
conn.close()
return users
@app.get("/users/{user_id}")
async def read_users(user_id: str):
users = []
try:
db_dk= DB_docking()
conn = db_dk.connection
cursor = conn.cursor(dictionary=True)
users = db_dk.read_user_cursor(cursor, user_id)
except Error as e:
raise HTTPException(status_code=400, detail=str(e))
finally:
if cursor:
cursor.close()
if conn:
conn.close()
return users
user_API.py
파일의 read_users
함수에 대한 주요 변경 사항을 요약합니다.
DB_docking()
인스턴스가 함수 외부에서 한 번만 생성됩니다.코드 예시:
db_dk= DB_docking()
@app.get("/users/")
def read_users():
# 사용자 정보를 읽어오는 로직
DB_docking()
인스턴스가 함수 호출 시마다 생성됩니다. 이로 인해 각 요청이 독립적인 데이터베이스 연결을 사용하게 됩니다.async
키워드 사용).코드 예시:
@app.get("/users/{user_id}")
async def read_users(user_id: str):
# 특정 사용자 정보를 읽어오는 로직
인스턴스 생성 위치 변경: DB_docking()
인스턴스를 각 요청 처리 함수 내부에서 생성하게 함으로써, 데이터베이스 연결 관리의 유연성을 높였습니다. 이는 함수 호출마다 새로운 연결이 이루어지므로, 연결의 독립성을 보장합니다.
기능 변경: 기존에는 모든 사용자 정보를 반환하는 기능이었으나, 수정 후에는 URL 경로에서 전달받은 user_id
에 해당하는 특정 사용자의 정보만을 반환하도록 변경되었습니다. 이는 API의 유연성을 높이고, 필요한 정보만을 효율적으로 조회할 수 있게 합니다.
비동기 처리 도입: async
키워드의 도입으로 함수가 비동기 처리를 지원하게 되었습니다. 이는 I/O 바운드 작업(예: 데이터베이스 조회)의 처리 효율성을 높이며, 서버의 응답성을 개선합니다.
INFO: 127.0.0.1:4422 - "GET /users/ HTTP/1.1" 500 Internal Server Error ERROR: Exception in ASGI application user_API.py", line 99, in read_users cursor.close() ^^^^^^
1번째 요청에서는 동작하지만 2번째 이상부터는 비정상으로 동작