커스텀 수명 주기(lifespan) 이벤트 추가하기

커스텀 수명 주기(lifespan) 이벤트 추가하기

LangSmith에 에이전트를 배포할 때 서버가 시작될 때 데이터베이스 연결 같은 리소스를 초기화하고, 종료될 때 제대로 닫히도록 해야 하는 경우가 많아요. 수명 주기 이벤트를 사용하면 서버의 시작 및 종료 시퀀스에 훅을 걸어 이러한 중요한 설정 및 정리 작업을 처리할 수 있어요.

이는 커스텀 라우트 추가와 같은 방식으로 작동해요. 자체 Starlette 앱( FastAPI, FastHTML 및 기타 호환 앱 포함)을 제공하기만 하면 돼요.

아래는 FastAPI를 사용한 예시예요.

"Python 전용" 현재 커스텀 수명 주기 이벤트는 langgraph-api>=0.0.26을 사용하는 Python 배포에서만 지원해요.

출처: 문서

본문

앱 만들기

기존 LangSmith 애플리케이션에서 시작해서 webapp.py 파일에 다음 수명 주기 코드를 추가하세요. 처음부터 시작한다면 CLI를 사용해 템플릿에서 새 앱을 만들 수 있어요.

langgraph new --template=new-langgraph-project-python my_new_project

LangGraph 프로젝트가 있으면 다음 앱 코드를 추가하세요:

# ./src/agent/webapp.py
from contextlib import asynccontextmanager
from fastapi import FastAPI
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker

@asynccontextmanager
async def lifespan(app: FastAPI):
    # for example...
    engine = create_async_engine("postgresql+asyncpg://user:pass@localhost/db")
    # Create reusable session factory
    async_session = sessionmaker(engine, class_=AsyncSession)
    # Store in app state
    app.state.db_session = async_session
    yield
    # Clean up connections
    await engine.dispose()

app = FastAPI(lifespan=lifespan)

# ... can add custom routes if needed.

langgraph.json 구성하기

langgraph.json 구성 파일에 다음을 추가하세요. 경로가 위에서 만든 webapp.py 파일을 가리키도록 하세요.

{
  "dependencies": ["."],
  "graphs": {
    "agent": "./src/agent/graph.py:graph"
  },
  "env": ".env",
  "http": {
    "app": "./src/agent/webapp.py:app"
  }
  // Other configuration options like auth, store, etc.
}

서버 시작

서버를 로컬에서 테스트하세요:

langgraph dev --no-browser

서버가 시작되면 시작 메시지가 인쇄되고, Ctrl+C로 중지하면 정리 메시지가 인쇄되는 것을 볼 수 있어요.

배포

앱을 그대로 클라우드나 셀프 호스팅 플랫폼에 배포할 수 있어요.

다음 단계

이제 배포에 수명 주기 이벤트를 추가했으니, 유사한 기법을 사용해 커스텀 라우트커스텀 미들웨어를 추가해 서버 동작을 더 커스터마이즈할 수 있어요.

더 알아보기 (Learn more)