FastAPI 와 코루틴
·
python
FastAPI Internal: Coroutine, Task, and the Event LoopFastAPI가 높은 성능을 내는 원리인 비동기 런타임(Asynchronous Runtime)의 핵심, async def의 작동 원리를 분석합니다. 이 원리를 이해하면 Hanging(요청 지연) 현상의 원인을 정확히 짚어내고, 불필요한 메모리 누수를 막을 수 있습니다.엔지니어라면 단순히 문법을 사용하는 것을 넘어, 코루틴이 메모리 상에서 어떻게 관리되고 스케줄링되는지 이해해야 합니다.🔑 이 글을 통해 얻어가는 것 3가지Hanging의 원인 규명: 왜 def 하나가 서버 전체를 멈추게 하는지 구조적으로 이해합니다.메모리 구조 시각화: 스택(Stack)과 힙(Heap)의 차이를 통해 코루틴의 상태 보존 원리를 파..
Fast API 사용법과 비동기
·
python
"FastAPI는 빠르다."이 명제는 반은 맞고 반은 틀렸습니다. FastAPI 자체가 마법을 부리는 것이 아니라, Python의 비동기 생태계(Asynchronous Ecosystem) 가 전통적인 동기 서버의 한계를 극복했기 때문입니다.도대체 Gunicorn(WSGI)으로는 왜 부족했는지, 그리고 현대적인 Python 서버 아키텍처는 C10K(1만 동시 접속) 문제를 어떻게 공학적으로 해결했는지, 그 심층부를 해부해 보겠습니다.1. 근본 원인 분석: 왜 동기(Sync) 서버는 멈추는가?전통적인 웹 프레임워크(Flask, Django)가 사용하는 동기 I/O 모델의 가장 큰 병목은 Context Switching 비용과 리소스 유휴 상태(Idle) 입니다.1.1 OS 스레드 모델의 한계동기 서버는 '요..
Contextlib
·
python
sqlalchemy 를 사용하여 세션을 얻고 트랜잭션을 여는 흔한 코드는 다음과같다.from sqlalchemy import create_enginefrom sqlalchemy.orm import sessionmakerfrom models import Userengine = create_engine("sqlite:///example.db", echo=True)SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False)def find_by_id(user_id: int): session = SessionLocal() # 세션 얻기 try: session.begin() # 트랜잭션 시작 user = ..
FastAPI Depends
·
python
들어가기 앞서자바를 메인언어로 백엔드를 공부했지만 어쩔수없이 FastAPI 를 해야하니 알아보는 시간을 갖도록 했다.자바에서도 DB 와 같은 외부 서드파티 저장소와의 연결을 위한 Connection 객체가 있듯,Python 에서도 충분히 있을거라고 생각했고Springboot 때 처럼 커넥션 객체를 트랜잭션이 시작할때 열리고 트랜잭션 종료때 반환되는 방식인가 했지만?Depends 라는 녀석을 Springboot 로 따지만 Controller 함수에서 사용하는것 처럼 보인다. 필자가 사용하는 환경은 아래와 같다.Lang: Python 3.11ORM: sqlalchemy 2.0.23web: FastAPI 0.104.1사용from fastapi import FastAPI, Depends, HTTPExceptio..