Note

SessionManager

File/S3/DynamoDB 영속화

⏱ 35분 88 / 189

SessionManager

File/S3/DynamoDB 영속화

에이전트의 기억을 설계한다

세션 영속화부터 컨텍스트 자동 관리까지 — 상태의 4계층

SessionManager

라이프사이클 · File · S3 · Repository

PART 3 · SessionManager

SessionManager

세션 영속화 계층 — Agent에 장착하면 저장과 복원이 자동

SessionManager

대화 상태를 저장소에 자동으로 영속화하고, session_id 하나로 되살립니다

  • 저장 대상: messages[] + agent.state
  • 저장 시점: 매 턴 자동
  • 복원 키: session_id
  • 백엔드: File · S3 · 커스텀 Repository
takeaway

개발자가 save()를 호출하지 않습니다 — 장착만 하면 세션이 Agent를 따라다닙니다.

PART 3 · SessionManager

세션 라이프사이클

명시적으로 열고 닫지 않는 세션 — 상태 사이를 오가는 저장·복원·소멸의 흐름

















생성
agent() 첫 호출
저장소에 새 세션 기록



활성
턴 진행 중
messages[] 누적



보관
프로세스는 없어도
저장소에는 그대로



소멸
세션 기록 삭제



첫 턴 실행



턴 반복 — 매 턴 자동 저장
개발자가 save를 호출하지 않음



프로세스 종료
인메모리만 소멸



복원 — 같은 session_id로 Agent 재생성
이전 messages[]·state 자동 로드 — 브라우저 새로고침·서버 재시작에도 이어짐



TTL · 수동 삭제
종료 이벤트 없음


세션에는 open()도 close()도 없습니다 — 저장은 자동, 복원은 session_id, 소멸은 스토리지 정책
PART 3 · SessionManager

SessionManager 백엔드

세션 데이터를 어디에 저장할지 선택 — 환경에 맞는 백엔드

FileSessionManager

  • 로컬 파일 시스템에 JSON 저장
  • 개발/테스트 환경에 적합
  • 멀티 프로세스 접근 시 충돌 가능

언제 — 로컬 개발, 단일 프로세스, 빠른 프로토타입

S3SessionManager

  • S3 버킷에 세션 저장
  • 서버리스 환경(Lambda)에 적합
  • 버전 관리와 수명주기 정책 활용 가능

언제 — Lambda 배포, 대용량 세션, 장기 보관 필요

AgentCore Memory

  • AgentCore Memory 기반 세션 저장
  • TTL 자동 만료, 저지연 조회
  • 장기 기억(LTM)과 단기 기억(STM) 통합

언제 — 프로덕션, 고가용성, 장기 기억 통합, 자동 만료

takeaway

개발은 File, 서버리스는 S3, 프로덕션 통합은 AgentCore Memory — 어느 쪽이든 코드는 한 줄만 바뀝니다.

PART 3 · SessionManager

세션 저장과 복원

session_id 하나로 전체 대화 상태를 영속화·복원

핵심 포인트

session_manager=
장착 한 줄로 저장·복원 자동 — save()를 호출하지 않음
session_id
복원 키 — 같은 ID로 Agent를 다시 만들면 이전 대화가 그대로
저장 시점
매 턴 자동 — messages[]와 agent.state가 함께 영속화
S3 백엔드
파일시스템 없는 Lambda·Fargate에서도 세션 유지

코드

python
from strands import Agent
from strands.session import S3SessionManager

# 세션 매니저 — session_id + S3 버킷으로 저장 위치 지정
session_mgr = S3SessionManager(
    session_id="user-123-chat-1",
    bucket="agent-sessions-bucket",
)
agent = Agent(session_manager=session_mgr)
agent("내 AWS 비용을 분석해줘")

# 나중에 — 같은 session_id로 재생성하면 이전 대화 자동 로드
agent2 = Agent(session_manager=S3SessionManager(
    session_id="user-123-chat-1",
    bucket="agent-sessions-bucket",
))
agent2("아까 분석한 결과에서 가장 비싼 서비스는?")
PART 3 · SessionManager

messages[] 밖의 상태 — agent.state

모델에게는 보이지 않지만, 세션과 함께 저장되는 key-value 상태

핵심 포인트

agent.state
대화 밖 key-value 저장소 — 모델 컨텍스트에 전송되지 않음
set / get
카운터·플래그·사용자 메타데이터를 코드에서 직접 읽고 씀
영속화
SessionManager가 messages[]와 함께 저장·복원
용도
요금제·호출 횟수·중간 결과처럼 모델이 몰라도 되는 값

코드

python
from strands import Agent
from strands.session import FileSessionManager

agent = Agent(
    session_manager=FileSessionManager(session_id="user-123"),
)

# 모델 컨텍스트에 들어가지 않는 key-value 상태
agent.state.set("user_tier", "premium")
agent.state.set("api_calls", 3)
print(agent.state.get("user_tier"))  # "premium"

# 세션 저장소에 messages[]와 함께 영속화 — 재생성해도 유지
agent2 = Agent(
    session_manager=FileSessionManager(session_id="user-123"),
)
print(agent2.state.get("api_calls"))  # 3
PART 3 · SessionManager

세션 격리와 보안

멀티테넌트 환경에서 세션 간 데이터 유출 방지

session_id 네이밍

user-{userId}-{chatId} 패턴으로 사용자별 격리

TTL 자동 만료

스토리지 수명주기 정책으로 비활성 세션 자동 삭제 — 데이터 보존 정책 준수

암호화

SSE-KMS로 저장 시 암호화, TLS로 전송 시 암호화

takeaway

세션에는 사용자의 대화가 통째로 들어 있습니다 — 저장소 보안이 곧 대화 보안입니다.

상태 관리가 에이전트의 지능을 결정합니다.

Session · Conversation · Memory · Context — 4계층으로 기억을 설계