AI 에이전트 메모리, 사용자별 격리 없이는 기록이 새어 나간다

|작성자: QUASA 편집팀|5 분 소요
AI 에이전트 메모리, 사용자별 격리 없이는 기록이 새어 나간다

여러 사용자가 쓰는 AI 에이전트의 기록은 인증된 사용자, 대화 세션, 업무 영역을 기준으로 나눠 저장하고 조회해야 한다. 대화 이력에는 세션 경계를, 다음 대화에서도 사용할 장기 메모리에는 사용자와 업무 영역의 경계를 적용한다. 검색 인덱스나 캐시에서도 같은 범위를 강제해야 다른 사람의 기록이 응답에 들어오는 경로를 막을 수 있다.

구현 순서는 저장할 데이터의 종류를 구분하고, 각 기록의 소유자를 서버에서 확정한 뒤, 읽기·쓰기·요약·삭제에 동일한 소유권 규칙을 적용하는 것이다. 요약 메모리는 원문보다 짧아도 개인 정보나 업무 내용을 담을 수 있다. 세션을 닫는 작업과 장기 메모리를 지우는 작업도 별도로 정의해야 한다.

대화 이력과 장기 메모리를 다른 계층으로 나눈다

대화 이력은 현재 대화를 이어가기 위한 메시지의 흐름이고, 장기 메모리는 이후 실행에 재사용하려고 추린 정보다. OpenAI Agents SDK의 메모리 문서는 메시지 이력을 담는 Session과 샌드박스의 보존 메모리를 구분하고, 생성된 메모리에 민감도와 보존 정책을 적용하도록 안내한다. 이 구현에서 메모리의 분리 기준은 에이전트 이름이 아니라 저장 레이아웃이다. 같은 레이아웃과 메모리 대화 ID를 쓰면 대화 파일과 통합 메모리를 공유하므로, 여러 사용자에게 서비스를 제공한다면 애플리케이션의 사용자 경계까지 따로 설계해야 한다.

프롬프트에서 ‘최근 대화’와 ‘기억할 내용’을 구별하는 것만으로는 저장소의 접근 경계가 생기지 않는다. 기록의 목적과 삭제 단위를 나누면 한 대화를 닫거나 오래된 선호를 고칠 때 영향을 받는 범위를 찾기 쉽다. 저장 구조에는 적어도 다음 계층을 구별해 두는 편이 좋다.

  • 세션 대화 이력: 사용자가 주고받은 메시지다. 소유 사용자와 세션 ID를 함께 기록하고, 해당 세션을 이어갈 때만 불러온다.
  • 원시 실행 기록: 도구 호출과 결과, 중단 정보, 실행 출력을 포함할 수 있다. 장애 조사에 필요한 접근만 허용하고 일반 대화 검색과 분리한다.
  • 요약 메모리: 대화에서 추린 업무 맥락이나 교정 사항이다. 생성에 사용한 세션을 연결해 원문이 정정되거나 삭제될 때 파생 항목을 찾을 수 있게 한다.
  • 사용자 선호: 계속 적용할 말투나 작업 방식처럼 반복 사용 목적이 분명한 정보다. 업무 자료의 요약과 따로 두어 선호를 바꿀 때 관련 없는 기록까지 수정하지 않도록 한다.

사용자·세션·업무 영역을 각각 식별한다

세션 ID만으로는 같은 사용자의 서로 다른 업무를 나누기 어렵고, 사용자 ID만으로는 별개의 대화가 한 이력으로 합쳐질 수 있다. 저장 레코드에는 서비스나 조직의 경계, 사용자 ID, 업무 영역, 세션 ID, 데이터 종류를 각각 식별할 수 있게 두는 것이 안전하다. 사용자가 여러 업무 영역에 접근하더라도 장기 메모리를 어디까지 공유할지는 별도의 권한 규칙으로 결정해야 한다.

LangGraph의 메모리 문서는 대화 상태에 thread_id를 사용하고, 대화 사이에 쓰는 장기 메모리는 user_id가 포함된 네임스페이스에 저장하는 예를 보여준다. 이 식별자는 저장 위치를 구분하는 수단이다. 실제 서비스에서는 클라이언트가 전달한 user_id를 그대로 신뢰하지 말고 인증 결과에서 소유자를 확정해야 한다. 요청에 포함된 세션 ID 역시 그 소유자에게 속하는지 확인한 뒤 사용한다.

읽기 권한은 저장할 때의 분리만큼 중요하다. 데이터베이스 조회 조건, 벡터 검색 필터, 캐시 키, 백그라운드 요약 작업이 모두 같은 사용자와 업무 경계를 따라야 한다. 전체 검색 결과를 가져온 다음 프롬프트에서 다른 사용자의 항목만 빼는 방식은 기록을 이미 허용 범위 밖으로 꺼낸 뒤에 처리한다. 검색 자체를 허용된 범위로 제한하고, 반환된 항목의 소유권을 다시 확인한 후 모델에 전달하는 구조가 더 명확하다.

저장부터 재사용까지 데이터 흐름을 잇는다

실행 경로마다 무엇을 저장하고, 어떤 키로 다시 찾으며, 어느 기록에서 파생됐는지를 연결해야 한다. 다음 흐름은 특정 제품의 기본 설정이 아니라 여러 사용자가 하나의 에이전트를 이용하는 서비스의 설계 예시다. 파생 관계를 남겨야 정정이나 삭제가 발생했을 때 원본 대화에서 생성된 요약을 찾아낼 수 있다.

  • 요청 수신 → 세션 이력: 인증된 사용자와 승인된 업무 영역을 확인하고, 그 사용자가 소유한 세션에만 새 메시지를 붙인다. 대화를 재개할 때도 같은 소유권 검사를 거쳐 필요한 메시지만 읽는다.
  • 에이전트 실행 → 원시 기록: 도구 입력과 출력이 남는 저장소를 식별한다. 운영상 필요한 범위로 접근을 제한하고, 일반 대화나 장기 메모리 검색 대상에서는 제외한다.
  • 요약 생성 → 장기 메모리: 허용된 세션 기록에서 재사용할 내용을 추린다. 생성된 항목에 소유 사용자, 업무 영역, 원본 세션, 갱신 시점을 연결하고 그 범위 안에서만 저장한다.
  • 다음 요청 → 메모리 조회: 인증된 요청의 범위로 후보를 먼저 제한하고 유효한 항목만 현재 대화에 넣는다. 정정되거나 삭제된 항목은 검색 인덱스와 캐시에서도 반환되지 않아야 한다.

모든 사용자에게 같은 내용을 제공하기로 정한 운영 규칙은 공용 자료로 둘 수 있다. 반면 개인의 대화에서 추출한 정보는 짧고 일반적인 문장처럼 보여도 자동으로 공용 지식이 되지 않는다. 공용 자료로 옮길 필요가 있다면 출처와 공개 범위를 별도로 검토해야 한다. 요약 작업이 여러 세션을 한꺼번에 처리할 때에도 입력 묶음이 사용자와 업무 경계를 넘지 않는지 확인해야 한다.

보존기간과 삭제 범위를 계층별로 정한다

저장소를 나눴다면 각 계층이 언제 만료되는지도 정해야 한다. AWS의 에이전트 보안 지침은 공유 메모리·캐시·지속 상태가 사용자 간 민감정보 노출 경로가 될 수 있다고 설명하고, AgentCore Memory의 세션 ID·actor ID·전략 ID를 이용한 논리적 분리를 안내한다. 단기 메모리는 필요한 최소 기간만 보존하도록 설정하고, 자체 보존기간 설정이 없는 장기 메모리에는 자동 삭제 절차를 마련하도록 권고한다. 이는 해당 서비스의 기능과 권고이며 다른 저장소에는 같은 원칙을 그 저장소의 삭제 기능에 맞춰 구현해야 한다.

실제 보존기간은 데이터를 다시 써야 하는 이유에 맞춰 정한다. 세션 메시지를 계속 보여줄 필요가 없다면 대화 종료 후 만료시키고, 장애 분석용 원시 기록은 운영 목적이 끝나면 지운다. 사용자 선호는 계속 적용할 근거가 있는 동안 유지하되 수정과 철회가 가능해야 한다. 요약 메모리에도 갱신 또는 만료 기준을 두어 오래된 업무 조건이 다음 답변에 반복해서 반영되지 않게 한다.

삭제 요청에서는 화면의 대화 목록만 지워서는 부족하다. 해당 세션에서 만든 요약, 검색 인덱스의 복제 항목, 캐시, 원시 실행 기록, 내보낸 사본까지 연결 관계를 따라 처리 범위를 정해야 한다. 백업처럼 즉시 개별 삭제하기 어려운 저장소는 복구 후 삭제된 기록이 다시 노출되지 않도록 복원 절차와 만료 시점을 함께 정한다. 삭제가 끝나면 같은 사용자 범위의 조회 경로에서 남은 항목이 반환되는지 확인한다.

교차 조회와 메모리 오염을 시험한다

배포 전에는 권한이 다른 사용자들의 기록을 넣고 저장과 조회 경계를 시험한다. 한 사용자의 요청에 다른 사용자의 세션 ID를 넣었을 때 접근이 거부되는지, 장기 메모리 검색이 허용되지 않은 업무 영역의 항목을 반환하지 않는지 확인한다. 대화 화면뿐 아니라 요약 작업, 재시도 작업, 캐시 조회도 같은 규칙을 거쳐야 한다. 기록을 쓰는 경로와 읽는 경로를 각각 시험해야 한쪽에만 남은 예외를 찾을 수 있다.

메모리 오염도 살펴야 한다. 대화나 도구 출력에 포함된 문장을 검토 없이 ‘앞으로 지킬 규칙’으로 승격하면 이후 응답이 그 내용에 영향을 받을 수 있다. 장기 메모리 항목에는 출처와 작성 주체를 남기고, 사용자가 명시한 선호와 외부 자료에 적힌 지시를 구별한다. 정정 요청이 들어오면 오래된 항목을 갱신하거나 폐기하고, 남아 있는 요약본이 같은 내용을 다시 만들어 내지 않는지 확인해야 한다.

답변의 겉모습만으로는 격리 상태를 판단하기 어렵다. 저장된 레코드의 소유자, 실제 검색 조건, 반환된 항목, 삭제 처리 결과를 함께 보면 경계가 무너진 위치를 찾을 수 있다. 새 메모리 기능이나 저장소를 추가할 때는 그 경로가 어느 사용자의 어떤 세션과 업무 영역에 속하는지부터 정해야 한다.

함께 읽기:

공유:

뉴스레터 구독

최신 Web3, AI, 암호화폐 뉴스를 이메일로 받아보세요.

0