728x90
생명주기
생명주기는 어떤 객체나 프로그램이 생성되고, 실행되면서 소멸할 때까지의 전체 과정을 의미합니다.
FastAPI에서의 생명주기는 서버가 켜지고 꺼질 때까지의 과정이라고 볼 수 있습니다. 보통 서버의 생명주기에서는 다음과 같은 작업이 순서대로 이루어집니다.
- Startup (시작): 서버가 막 가동될 때입니다. 이때 보통 DB 연결이나 AI 모델 로드, 설정 파일 읽기 같은 무거운 작업을 미리 해둡니다.
- Running (운영): 서버가 사용자(클라이언트)들의 요청을 처리하며 열심히 일하는 단계입니다.
- Shutdown (종료): 서버가 꺼질 때입니다. 이때 DB 연결을 안전하게 닫거나, 임시 파일을 삭제하는 등 뒷정리를 합니다.
asynccontextmanager
FastAPI에서 생명주기를 설정하는 함수는 비동기 함수로 정의합니다.
contextmanager는 "이 영역(Context) 안에서만 이 자원을 유효하게 하겠다"는 약속을 정의합니다. 때문에 중간에 에러가 발생하더라도, startup - running - shutdown 전반의 코드가 모두 실행될 수 있도록 보장할 수 있습니다.
async를 사용하는 이유는 비동기로 작동하는 FastAPI 특성상 그 생명주기 또한 비동기 함수들을 호출하여 사용할 수 있어야 하기 때문입니다.
from contextlib import asynccontextmanager
@asynccontextmanager
async def lifespan(app: FastAPI):
# [Startup] 서버가 켜질 때 실행되는 부분
await get_pool() # e.g. db 연결
print("Database pool initialized")
# ------------------------------------
# ------------------------------------
yield # FastAPI 서버가 여기서 실행됨
# ------------------------------------
# [Shutdown] 서버가 꺼질 때 실행되는 부분
await close_pool() # e.g. db 연결 해제
print("Database pool closed")
# ------------------------------------
이렇게 만든 생명주기 함수는 FastAPI app을 생성할 때 매개변수로 전달하여 사용할 수 있습니다.
from fastapi import FastAPI
app = FastAPI(lifespan=lifespan)728x90
'Backend > Python' 카테고리의 다른 글
| [FastAPI] APIRouter - 라우팅 설정하기 (0) | 2026.05.02 |
|---|---|
| [FastAPI] FastAPI에 대하여 (0) | 2026.05.02 |