[FastAPI] lifespan - 생명주기

2026. 5. 11. 16:44·Backend/Python
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
'Backend/Python' 카테고리의 다른 글
  • [FastAPI] APIRouter - 라우팅 설정하기
  • [FastAPI] FastAPI에 대하여
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (297)
      • CS (40)
        • CV (2)
        • PS (37)
      • Reveiw (19)
        • Paper (19)
        • Github (0)
      • ML (13)
        • Pytorch (5)
      • Language (72)
        • Python (21)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (47)
        • DB (18)
        • Node.js (11)
        • Python (3)
      • UI (3)
      • Automation (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Git
    DB
    Express
    postgresql
    mongo
    ML
    ReactNative
    deploy
    GAN
    PyTorch
    review
    nodejs
    ts
    frontend
    CS
    python
    vscode
    API
    ps
    figma
    CSS
    react
    backend
    Three
    SOLID
    FastAPI
    PRISMA
    modal
    js
    CV
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.5
Rayi
[FastAPI] lifespan - 생명주기
상단으로

티스토리툴바