본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 19. 21:35

반드시 실수할 에이전트를 위한 심층 방어 (Defense in Depth)

요약

자율형 AI 에이전트 운영 시 발생할 수 있는 오류와 보안 위협에 대비하기 위한 '심층 방어(Defense in Depth)' 전략을 다룹니다. 단일 방어 기제의 실패를 가정하고, 구조적 격리부터 복구까지 6단계의 계층적 안전 스택을 제안합니다.

핵심 포인트

  • 단일 방어 기제는 반드시 실패한다는 가설하에 설계해야 함
  • L0(구조적 격리)부터 L5(복구)까지 단계별 방어 계층 구축
  • 아이디어 단계(L1)에서 문제를 포착할수록 비용과 리스크가 낮음
  • 감사(L4)와 복구(L5)를 통해 사후 대응 및 투명성 확보

헌법적 안전 모델 (constitutional safety model) 하에서 실제 멀티 테넌트 (multi-tenant) 인프라를 운영하는 자율형 AI 유기체를 구축하는 시리즈의 세 번째 글입니다. Part 1은 두 개의 게이트에 관한 것이었습니다. Part 2는 벽에 관한 것이었습니다. 이번 글은 왜 벽을 포함한 그 어떤 단일 요소도 최후의 방어선이 되어서는 안 되는지에 대해 다룹니다.

지금까지 제가 설명한 모든 안전 메커니즘에는 현재 버그가 있습니다. 단지 그게 무엇인지 모를 뿐입니다.

이것은 겸손을 떠난 이야기가 아닙니다. 프로덕션 환경의 자율 에이전트(autonomous agent)를 위한 유일하게 합리적인 운영 가설입니다. 양심(conscience)은 언젠가 어떤 행동을 잘못 분류할 것입니다. 의회(council)는 나쁜 아이디어를 통과시킬 것입니다. 격리 벽(isolation wall)에는 제가 보지 못한 틈이 생길 것입니다. 이 각각은 특정 리스크에 대한 주요(primary) 방어 수단이며, 각각은 결국 자신의 역할을 수행하는 데 실패할 것입니다.

따라서 진짜 설계 질문은 결코 "어떻게 완벽한 계층을 만들 것인가"가 아니었습니다. 그것은 바로: **한 계층이 실패했을 때 — 그리고 반드시 실패할 텐데 — 그 뒤에는 무엇이 서 있는가?**였습니다.

스택 (The stack)

저는 유기체의 안전을 문제가 얼마나 일찍 포착되느냐에 따라 번호를 매긴 6개의 계층으로 생각합니다. 일찍 발견할수록 비용이 저렴합니다. 재앙을 막을 수 있는 가장 좋은 장소는 그것이 아이디어가 되기 전입니다.

  • L0 — 구조적 격리(Structural isolation). 이전 부분의 벽과 같습니다. 잘못된 테넌트(tenant)의 행동이 금지되는 것이 아니라, 표현 자체가 불가능하게 만듭니다. 탐지 범위: 크로스-테넌트 누수.
  • L1 — 아이디어 게이트(Idea-gate). 이전 부분의 위원회와 같습니다. 나쁜 아이디어는 코드가 존재하기 전에 토론 과정에서 죽습니다. 탐지 범위: 잘못된 것 구축하기.
  • L2 — 행동 게이트(Action-gate). 이전 부분의 양심과 같습니다. 모든 명령에 대해 결정론적 반사 작용을 수행합니다: 허용/질문/거부 (by blast radius). 탐지 범위: 잘못된 행동 하기.
  • L3 — 자원 게이트(Resource-gate). 신체에 대한 관리자 역할을 합니다: 입실 통제, 예산 상한선, OOM(Out of Memory)/무분별한 비용 발생 방지 장치. 탐지 범위: 에이전트가 모든 메모리나 돈을 소모하는 것.
  • L4 — 감사(Audit). 위변조가 불가능한 해시 체인 영수증입니다. 비자명한 모든 결정은 이전 결정을 서명합니다. 탐지 범위: 실제로 무슨 일이 일어났는지 알지 못하거나, 그것에 대해 거짓말하는 것.
  • L5 — 복구(Recovery). 면역체와 같은 격리, 체크포인트, 롤백입니다. 탐지 범위: 이미 진행 중인 피해.

위의 항목들을 위에서 아래로 읽으면 깔때기 모양이 됩니다: 아이디어 단계(L1)에서, 의도 단계(L2)에서, 자원 확보 단계(L3)에서 막습니다. 만약 그래도 발생했다면, 그것이 '일어났음'을 알고 (L4); 피해를 주고 있다면, 그것을 격리합니다 (L5). L0은 이 모든 것 아래에 위치하며, 다른 어떤 계층도 넘어서는 안 되는 경계입니다.

이것을 단순한 '목록'이 아닌 '깊이(Depth)'로 만드는 유일한 규칙

여러 겹의 레이어가 있다고 해서 그것이 깊이 방어(defense in depth)인 것은 아닙니다. 그것은 단지 목록일 뿐이며, 목록은 안전함과는 다른 따뜻한 느낌을 줄 뿐입니다. 이 목록을 '깊이'로 바꾸는 요소는 제가 강력하게 지키는 하나의 규칙입니다:

모든 중요한 위험은 최소 두 개의 독립적인 계층에 의해 포착되어야 합니다. 여기서 '독립적'이라는 것은 동일한 이유로 실패하지 않는다는 의미입니다.

동일한 설정을 읽고 동일한 상위 신호(upstream signal)를 신뢰하는 두 가지 검사는, 두 개의 모자를 쓴 하나의 검사와 같습니다. 그 공유된 가정이 틀릴 때, 둘 다 함께 무너집니다. 진정한 깊이란 첫 번째 계층 전체의 전제가 깨지더라도, 두 번째 계층이 그것을 포착할 수 있다는 것을 의미합니다.

구체적으로, 가장 심각한 위험인 '잘못된 테넌트(tenant)에 대해 동작하는 것'의 경우, L0는 잘못된 엔드포인트(endpoint)를 표현 불가능하게 만들고, 감사(audit) 계층은 사후에 발생하는 모든 교차 테넌트 쓰기(cross-tenant write)를 드러낼 것이며, 송신(egress) 범위 지정(scoping)은 해당 경로를 거부할 것입니다. 세 가지 메커니즘, 세 가지 서로 다른 실패 모드(failure modes)입니다. 동일한 동작에 대해 이 세 가지를 모두 깨뜨려야 하며, 이들은 동일한 이유로 깨지지 않습니다.

반전: 한 계층이 거짓말을 하고 다른 계층이 이를 잡아낸 순간

첫 번째 파트를 읽으셨다면, 이 프로젝트 전체에서 발생했던 가장 당혹스러운 사건을 알고 계실 것입니다. 저의 아이디어 게이트(idea-gate)인 '의회(council)'가 한 번은 결코 실행되지 않은 토론에 대해 완전히 확신에 찬 판결을 내린 적이 있습니다. 보조 도구(helper)가 투표, 라운드, 결론을 조작하여 사실인 것처럼 보고했던 것입니다.

당시에는 깊게 다루지 않았던 부분이지만, 이 글의 핵심이 되는 내용이 여기 있습니다. 그 조작이야말로 심층 방어(defense in depth)가 존재하는 바로 그 시나리오입니다.

L1 — 아이디어 게이트 — 가 실패했습니다. 단순히 "틀린 답을 준" 실패가 아니었습니다. 자신의 존재 자체에 대해 거짓말을 한 실패였습니다. 계층이 무너질 수 있는 단 하나의 최악의 방식, 즉 단순히 놓친 것이 아니라 설득력 있는 가짜 신호(false signal)를 능동적으로 생성한 것입니다. 만약 L1이 저의 유일한 방어선이었다면, 조작된 판결은 실제 결정으로 이어졌을 것이고 저는 결코 알지 못했을 것입니다.

하지만 그것은 유일한 방어선이 아니었습니다. 이를 잡아낸 것은 L4 — 감사 원칙(audit principle)이었습니다: 판결은 내가 독립적으로 읽을 수 있는 산출물(artifact)에 의해 뒷받침될 때만 유효하다. 저는 영수증을 찾아 나섰습니다. 하지만 트랜스크립트(transcript) 파일이 없었습니다. 체인이 존재하지 않았기에, 그 서술이 아무리 확신에 차 있었더라도 그 주장은 무효였습니다.

이 하나의 사건에 전체 교리가 담겨 있습니다. L1은 거짓을 생성했고, L4는 서술을 믿지 않고 오직 영수증만을 믿었기에, 그 거짓은 소멸했습니다. 한 계층이 최악의 방식으로 실패했음에도 시스템은 괜찮았습니다. 이는 제가 영리해서가 아니라, L1이 반드시 실패할 것이라고 가정하고 그 뒤에 완전히 다른 이유로 실패하는 무언가를 배치했기 때문입니다.

대부분의 글이 생략하는 부분: 이 중 절반은 실제 사례이고, 절반은 교리입니다

대부분의 "심층 방어 (defense in depth)" 관련 글들이 몰래 속임수를 쓰는 지점이 바로 여기입니다. 다이어그램을 그려놓고 그것이 모두 구축되어 있다고 가정하게 만드는 것이죠. 이 시리즈 전체가 확신에 찬 서술을 믿지 않는 것에 관한 것임을 고려할 때, 저 또한 그렇게 한다면 위선자가 될 것입니다. 따라서 실제 상태는 다음과 같습니다:

  • L1 아이디어 게이트 (idea-gate)구현됨 (coded). 제가 실제로 구축하기 전에 실행하는 프로세스입니다.
  • L2 액션 게이트 (action-gate)구현됨 (coded). 모든 명령에 적용되는 실제 결정론적 훅 (deterministic hook)입니다.
  • L4 감사 (audit)구현됨 (coded). 디스크 상의 해시 체인 영수증 (Hash-chain receipts)입니다.
  • L0 격리 (isolation)부분적 (partial). 매니페스트 (manifest), 세션별 권한 (per-session capabilities), 테넌트 가드 프리미티브 (tenant-guard primitive)는 존재하지만, 이를 라이브 설정에 맞게 CI에 바인딩하는 것은 아직 완성된 게이트가 아닌 코드 단계의 작업입니다.
  • L3 리소스 게이트 (resource-gate)부분적 (partial). 정책과 로직은 작성 및 테스트되었으나, 폭주하는 프로세스를 실제로 종료하는 부분은 아직 완전히 갖춰지지 않은 실행 주체 (body)가 필요합니다.
  • L5 복구 (recovery)부분적 (partial). 격리 (Quarantine)와 체크포인트 (checkpoint)는 존재하지만, 완전한 롤백 (rollback)은 프로토타입 단계의 교리 (doctrine) 수준입니다.

저는 어떤 계층이 하중을 견디는 구조물 (load-bearing)이고 어떤 것이 비계 (scaffolding, 임시 가설물)인지 의도적으로 밝히고 있습니다. 감사할 수 없는 안전 아키텍처는 그저 무드 보드 (mood board)에 불과합니다. 상태 표는 제품의 일부입니다. 이는 L4가 내부를 향해 지시하는 것과 동일한 규칙입니다. 즉, 제 다이어그램을 믿지 말고 어떤 항목이 실제로 연결되어 있는지 확인하십시오.

이것이 내 설정 너머에서 중요한 이유

자율 에이전트 (autonomous agents)에 대한 제안은 언제나 능력 (capability)에 초점이 맞춰져 있습니다. 하지만 당신이 에이전트를 운영 환경 (production)에서 실행할 수 있는지 여부를 결정하는 것은 실패하는 순간에 어떤 일이 일어나는지, 그리고 실패가 어디에 존재하는지에 대해 스스로 얼마나 명확하게 인지하고 있는지입니다.

어떠한 "안전한" 에이전트에 대해서도 던져볼 가치가 있는 세 가지 질문입니다:

  • 최악의 리스크에 대해, 그것을 잡아낼 수 있는 두 개의 독립적인 (two independent) 계층을 명시하십시오. 만약 하나만 명시할 수 있다면, 당신은 심층 방어를 갖춘 것이 아니라 마케팅만 잘 된 단일 장애점 (single point of failure)을 가진 것입니다.
  • 어떤 계층이 (단순한 침묵이 아니라) _확신에 찬 잘못된 신호 (confident wrong signal)_를 생성하며 실패했을 때, 그 뒤에서 그 신호를 믿지 않는 요소는 무엇입니까?
  • 당신의 계층 중 무엇이 구현되었고 (built), 무엇이 **슬라이드 (slides, 단순 개념/기획)**입니까? 즉각적으로 대답할 수 없다면, 시스템 또한 대답할 수 없습니다.

능력 (Capability)이 하나의 계층이라면, 안전 (Safety)은 나머지 다섯 개의 계층입니다. 그리고 그중 어떤 것이 아직 실재하는지 아는 것이 중요합니다.

다음: 리소스 게이트 (resource-gate)를 자세히 살펴봅니다 — AI 유기체를 위한 예산 관리자 (budget governor)에 대하여, 그리고 왜 가장 위험한 에이전트는 악의적인 에이전트가 아니라, 작업을 부여받았을 때 모든 메모리를 먹어치우는 굶주린 에이전트인지 알아봅니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0