개발자가 save()를 호출하지 않습니다 — 장착만 하면 세션이 Agent를 따라다닙니다.
PART 3 · SessionManager
세션 라이프사이클
명시적으로 열고 닫지 않는 세션 — 상태 사이를 오가는 저장·복원·소멸의 흐름
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계층으로 기억을 설계