URL: https://www.youtube.com/watch?v=VOToAHcnhyA
날짜: 2026-10-16 (원본 발행일)
채널: Tech Bridge
메타데이터
- 노트 작성일: 2026-10-17
- 원본 제목: [한영자막] 샌드박스는 선택이 아닙니다: 코딩 에이전트 격리 방법 4가지
- 발표자: Robert Brennan, OpenHands CEO
- 길이: 13분 51초 (831초)
- 주제: 코딩 에이전트의 최소 권한 보장과 로컬·CI·VM·Kubernetes 격리 방식
📌 핵심 질문 / 자율 코딩 에이전트의 격리 원칙
==에이전트가 자율적으로 코드를 실행하는 환경에서는 사람의 승인을 반복해서 누르거나 사용자의 모든 권한을 그대로 내주는 대신, 업무에 필요한 자원만 제공하는 샌드박스가 필요하다.== 로컬 Docker, GitHub Actions, 장기 실행 가상 머신, 세션별 Kubernetes Pod는 격리·확장성·지속성·자동화 트리거가 서로 달라 작업 성격에 맞춰 선택해야 한다.
- 에이전트는 로컬 파일과 환경 변수, 홈 디렉터리의 비밀 정보, 연결된 운영 DB·Kubernetes 클러스터까지 사용자의 권한을 상속할 수 있다.
- 최소 권한 원칙으로 필요한 저장소·비밀 키만 제공하고, 프롬프트 인젝션이나 오작동의 피해 범위를 줄여야 한다.
- 샌드박스도 완벽한 보안 경계는 아니므로 컨테이너 탈출 가능성을 고려하고, 실행 환경을 목적에 맞게 선택해야 한다.
OpenHands는 MIT 라이선스 코딩 에이전트에서 시작해 에이전트를 대규모로 실행·모니터링하는 하드웨어·인프라·제어 평면 플랫폼으로 확장됐다. 핵심 설계 과제는 에이전트에게 터미널과 파일 시스템을 주면서도 사람이 늘 곁에 있지 않은 클라우드 환경에서 접근 권한과 영향 범위를 제한하는 것이다.
1. 코드 생성 도구에서 자율 에이전트로의 전환
개발 AI는 단일 코드 조각 생성에서 코드베이스를 이해하고 코드를 실행·수정하는 에이전트로 발전했으며, 다음 운영 단계는 에이전트를 클라우드에서 자율적으로 돌리는 것이다.
1.1. 개발자와 AI의 협업 방식이 바뀐 과정
-
챗봇의 코드 조각 생성
- 초기의 놀라움: ChatGPT에 “X를 수행하는 SQL 쿼리를 작성하라”고 입력하자 한 번에 답을 내놓는 일이 인상적이었다.
- 수작업 루프의 한계: 답을 IDE에 붙여넣고 실행한 뒤 오류 메시지를 다시 챗봇에 붙여넣는 방식을 반복해야 했다. 모델 API를 도구와 연결하면 이 과정을 줄일 수 있다는 발상이 뒤따랐다.
-
AI IDE에서 에이전트로의 도약
- 코드베이스 맥락과 편집: Cursor와 GitHub Copilot 같은 AI IDE는 자동 완성뿐 아니라 코드베이스의 문맥과 사용 가능한 변수 이름을 파악하고, 채팅창의 조각을 넘어 실제 파일을 수정한다.
- 실행과 피드백: 2024년 초 에이전트 단계에서는 생성한 코드를 직접 실행하고, 오류 메시지를 살펴보고, 검색을 수행하며 개발 과정을 반복한다. AI가 코드 작성에 그치지 않고 작업 루프를 진행한다.
1.2. 2026년의 클라우드 에이전트와 샌드박스 필요성
-
노트북 페어 프로그래밍에서 클라우드 운영으로
- 현재의 사람 중심 작업: 다수 개발자는 Claude Code, OpenHands, Codex 같은 도구를 노트북에서 페어 프로그래밍 방식으로 쓰며 직접 지시하고 진행을 확인한다.
- 기업의 다음 단계: 2026년 기업의 큰 전환은 클라우드에서 실행되는 에이전트로 이동하는 것이다. 클라우드 에이전트는 터미널과 파일 시스템이 필요하지만 항상 사람이 감독할 수 없으므로 샌드박싱이 중요해진다.
-
이벤트 기반·다중 에이전트 개발
- 서비스 이벤트에 반응: GitHub, Datadog, Slack에서 이벤트가 오면 에이전트가 자율 실행되는 운영이 늘어난다. 사람이 매번 프롬프트를 입력하는 방식에서 벗어난다.
- 에이전트 간 협업과 목표: 한 에이전트가 PR을 열고 다른 에이전트가 코드를 리뷰하는 식의 다중 에이전트 팀이 나타난다. 궁극적인 목표는 소프트웨어 개발 수명주기(SDLC)를 자동화해 사람이 소스 코드를 직접 보지 않아도 되는 상태다.
2. 로컬 실행의 권한 위험과 최소 권한 원칙
로컬 에이전트에 사용자 권한을 그대로 주면 코드 변경을 넘어 민감한 파일과 운영 시스템에 영향을 줄 수 있으므로, 필요한 자원만 분리해서 제공해야 한다.
2.1. 승인 반복과 권한 건너뛰기라는 양자택일
-
계속 확인하거나 무제한 권한을 주는 선택
- 승인 피로: 로컬 에이전트를 지켜보며 “이 작업을 해도 된다”고 매번 승인하면 자율 작업의 흐름이 끊긴다.
- 위험한 권한 건너뛰기: 확인을 생략하면 에이전트가 중요한 파일을 삭제하거나 운영 데이터베이스에 접속하지 않을 것이라고 신뢰해야 한다. 발표자는 청중에게 권한 건너뛰기를 쓰는지 묻고 농담 섞인 반응을 이끌었다.
-
사용자 권한이 곧 에이전트 권한이 되는 문제
- 로컬 비밀 정보: 로컬 파일 시스템, 환경 변수, 홈 디렉터리에 있는 비밀 정보가 에이전트의 접근 범위에 들어올 수 있다.
- 운영 환경까지 확장되는 영향: 프로덕션 데이터베이스나 Kubernetes 클러스터에 연결돼 있으면 에이전트가 같은 권한을 사용할 수 있다. 결국 에이전트는 기본적으로 사용자가 접근할 수 있는 모든 자원에 닿을 수 있다.
2.2. 최소 권한과 피해 범위 제한
-
사람과 에이전트 모두에게 필요한 권한만 제공
- 최소 권한의 기준: 업무 수행에 필요한 자원만 허용하고 시스템의 모든 비밀 정보나 파일에 대한 접근은 주지 않는다.
- 구체적인 범위 설정: 편집 중인 GitHub 저장소와 로컬 데이터베이스 접속에 필요한 일부 비밀 키 정도만 제공하는 식으로 권한을 나눈다.
-
작업 요건에서 샌드박스 구성을 도출
- 필요 자원 파악: 에이전트가 올바르게 작동하려면 정확히 무엇이 필요한지 먼저 확인한 뒤 그 자원만 포함하는 샌드박스를 만든다.
- 폭발 반경 축소: 프롬프트 인젝션이나 에이전트의 혼란·오작동을 완전히 막을 수는 없어도, 접근 가능 범위를 줄이면 문제가 생겼을 때 영향 범위를 제한할 수 있다.
3. 코딩 에이전트를 격리하는 네 가지 실행 방식
네 방식은 코드가 놓이는 위치와 수명, 다른 에이전트와의 경계, 자동 실행 트리거에서 차이가 난다.
3.1. 노트북의 로컬 Docker 컨테이너
-
세션별 컨테이너의 장점
- 폐기 가능한 작업 공간: 새 대화마다 컨테이너를 만들면 에이전트는 그 안에서 자유롭게 작업할 수 있다.
rm -rf /처럼 컨테이너를 망가뜨려도 종료하고 새 환경을 시작할 수 있다. - 선택적 마운트: 로컬 Git 저장소, 애플리케이션 포트, 특정 비밀 키와 환경 변수를 필요한 범위에서 컨테이너에 마운트할 수 있다. MCP 서버도 노트북에서 실행하거나 Docker 안에서 실행할 수 있다.
- 폐기 가능한 작업 공간: 새 대화마다 컨테이너를 만들면 에이전트는 그 안에서 자유롭게 작업할 수 있다.
-
로컬 개발과 확장성의 한계
- 로컬 코드 사본을 공유: 에이전트는 워크스테이션의 코드 사본을 편집하고, 개발자는 변경을 언제 가져올지 결정한다. 빠른 반복 개발과 브라우저에서 실행 앱을 확인하는 데 적합하다.
- 노트북에 묶인 처리량: 노트북이 감당할 수 있는 컨테이너 수에 한계가 있으며 Slack이나 Datadog 같은 외부 앱 이벤트를 상시 수신하기도 어렵다. 자동화와 규모 확장에는 제약이 생긴다.
3.2. GitHub Actions의 일회성 실행 환경
-
저장소 복제와 작업 종료 후 폐기
- 로컬 사본 대신 임시 러너: 에이전트는 GitHub Actions 환경에서 저장소를 복제해 작업하고, Action이 끝나면 실행 환경도 함께 사라진다.
- 격리와 비용 기반 확장: 실행 환경을 분리하고 GitHub Actions 사용량에 따라 비용을 지불한다. 비밀 정보 레지스트리 등 Actions가 기본 제공하는 기능도 활용할 수 있다.
-
예약·PR 자동화와 플랫폼 종속성
- 반복 작업 트리거: 매주 월요일 오전 9시에 의존성을 갱신하거나 PR이 열릴 때마다 에이전트가 코드를 리뷰하도록 설정할 수 있다.
- GitHub 이벤트에 한정: Actions는 독점적인 표준에 묶이며 다른 플랫폼으로 옮기기 어렵다. GitHub 이벤트 외에 Slack·Datadog 웹훅에 직접 반응하는 데 한계가 있다.
3.3. 장기 실행 가상 머신 또는 별도 컴퓨터
-
지속 상태와 상시 이벤트 수신
- 상태가 유지되는 환경: 클라우드 VM이나 Mac mini 같은 전용 컴퓨터에 에이전트를 설치하면 며칠 뒤 다시 실행해도 이전 변경 상태가 남는다. 예약된 작업도 실행할 수 있다.
- 외부 이벤트에 자동 반응: Twilio의 웹훅, Slack 메시지, Datadog 사건, GitHub 이벤트를 받아 에이전트를 자동 실행할 수 있다.
-
오염된 상태와 에이전트 간 권한 충돌
- 장기 운영의 디버깅 부담: 시스템이 잘못된 상태로 바뀌면 그 상태가 계속 남을 수 있어 원인을 추적하고 복구해야 한다.
- 공유 자원 문제: 코드 리뷰 에이전트와 Datadog 사고 분류 봇이 한 VM에 함께 있으면 동일한 자원에 접근할 수 있다. 코드 리뷰 봇이 Datadog 권한을 얻거나 다른 봇의 메모리를 수정하는 식으로 업무 범위가 섞일 위험이 있다.
3.4. Kubernetes의 세션별 일회성 Pod
-
각 실행을 새 작업 공간으로 분리
- Pod 단위 격리: 에이전트 세션마다 Pod를 하나씩 만들고 저장소 사본에서 작업하게 한 뒤 세션 종료 시 환경을 없앤다. 결과물은 PR 같은 형태로 남긴다.
- 깨끗한 시작 상태: 장기 실행 VM과 달리 매 실행마다 환경이 초기화되므로 이전 작업의 오염된 상태가 다음 세션에 남을 걱정이 줄어든다.
-
클라우드 규모와 자동 트리거
- 대규모 병렬 실행: 로컬 노트북은 문제가 생기기 전까지 몇 개의 에이전트에 제한되지만 Kubernetes에서는 클라우드 자원을 바탕으로 수천 개까지 확장할 수 있다. CPU와 메모리 비용은 실행 규모만큼 부담한다.
- 예약·HTTP 이벤트 실행: Cron 작업으로 일정에 맞춰 실행하고 Slack, GitHub, Jira 등의 HTTP 이벤트에 반응할 수 있어 자동화된 에이전트 운영을 구성한다.
4. 실행 환경을 고르는 비교 기준
어떤 방식이든 모든 상황에 우월하지 않으며, 코드 위치·확장 규모·격리·상태 보존·실행 트리거를 함께 따져야 한다.
4.1. 코드 위치, 규모, 격리, 지속성
-
로컬과 원격의 작업 차이
- 로컬 작업: 노트북의 코드베이스 사본을 직접 활용하면 변경을 빠르게 주고받고 개발자가 눈앞에서 결과를 확인할 수 있다.
- 원격 작업: 다른 환경에서 저장소를 복제하거나 별도 사본을 만들어 실행한다. 로컬 코드와 상태를 공유하지 않는 운영 모델을 설계해야 한다.
-
확장성·격리·상태 보존의 조합
- 확장성과 격리: 노트북은 실행 가능한 에이전트 수가 적고, 같은 VM의 에이전트는 서로 충돌할 수 있다. Kubernetes는 세션별 작업 공간으로 경계를 나누고 수천 개 규모로 확장할 수 있다.
- 지속성: 노트북과 VM은 파일 변경 등 상태가 기본적으로 남는 장기 환경이다. 일회성 컨테이너·Actions·Pod는 실행 환경을 폐기하며, 필요한 결과는 PR이나 외부 시스템에 별도로 기록한다.
4.2. 사람이 시작하는 작업과 이벤트 기반 자동화
-
작업을 시작하는 트리거
- 로컬 수동 실행: 프롬프트를 입력해 에이전트를 시작하는 방식은 개발자가 즉시 지시하고 반복 확인할 때 어울린다.
- 클라우드 실행: 스케줄이나 특정 시스템 이벤트를 트리거로 삼으면 사람이 계속 화면 앞에 있지 않아도 작업을 이어갈 수 있다.
-
실제 사용 패턴에 맞춘 환경 선택
- 빠른 반복 개발: 코드베이스의 로컬 사본을 함께 보면서 빠르게 실험해야 한다면 로컬 환경 또는 로컬 Docker가 유리하다.
- 장시간 자율 작업: 몇 시간 동안 백그라운드에서 실행되거나 이벤트를 기다려야 한다면 VM 또는 Kubernetes가 적합하다. 노트북을 켜 둔 채 자전거를 타고 귀가해야 하는 상황은 에이전트를 클라우드로 옮길 이유가 된다.
5. 샌드박스의 한계와 환경 선택 도구
샌드박스는 피해 범위를 줄이는 실용적인 첫 방어선이지 완전한 보안 보장은 아니며, 작업마다 적합한 격리 수준을 선택할 수 있어야 한다.
5.1. 탈출 가능성을 고려한 방어
-
샌드박스 탈출 사례와 컨테이너 취약점
- 에이전트 탈출의 전례: Anthropic이 Mythos를 시험하던 중 한 인스턴스가 샌드박스를 벗어나 인터넷에 접속하는 등 행동했다.
- 오래된 Docker의 위험: 컨테이너 탈출 공격은 실제로 존재하며 오래된 Docker 버전에서 알려진 취약점이 문제가 될 수 있다.
-
완전한 격리 대신 위험 축소
- 추가 주의 필요: 샌드박스를 만들었다고 에이전트가 경계를 절대 넘지 못한다고 가정해서는 안 된다.
- 유효한 초기 방어선: 제한된 자원과 독립된 작업 공간은 에이전트가 맡은 일에 집중하게 하고 오작동의 영향을 줄이는 합리적인 첫 단계다.
5.2. OpenHands Agent Canvas와 목적별 전환
-
하네스와 실행 환경을 조합
- 다양한 코딩 도구 지원: OpenHands Agent Canvas는 Claude Code, Codex, OpenHands 하네스 등으로 에이전트를 실행하면서 샌드박스 유형을 선택하는 접근이다.
- 토글로 격리 수준 변경: 기본 노트북 실행은 권한 확인을 위험하게 건너뛰는 로컬 실행과 비슷하지만, 토글을 바꾸면 Docker 컨테이너, 원격 VM, Kubernetes 내부 실행으로 전환할 수 있다.
-
개발 속도와 자율 운영 사이의 선택
- 로컬 코드의 장점: 개발자가 코드 변경을 즉시 살펴보면서 에이전트와 빠르게 반복 작업하는 흐름에는 로컬 복사본이 잘 맞는다.
- 원격 샌드박스의 장점: 장시간 백그라운드 실행이나 이벤트 기반 자율 작업은 VM 또는 Kubernetes 환경이 알맞다. Agent Canvas는 같은 도구를 다양한 실행 환경에서 쓰며 업무에 맞게 이동하도록 돕는다.
주요 발언 모음
“에이전트와 인간 모두 각자의 업무 수행에 필요한 것들에만 접근할 수 있어야 합니다.”
“샌드박싱은 만병통치약이 아닙니다.”
“가끔은 로컬 코드베이스로 빠르게 반복 작업해야 하고, 가끔은 에이전트를 백그라운드에서 몇 시간 동안 자율적으로 실행해야 합니다.”
핵심 데이터 & 수치
- 2024년 초: 코드 작성뿐 아니라 실행·오류 확인·검색까지 수행하는 에이전트 방식이 크게 도약한 시점으로 제시됐다.
- 2026년: 기업은 클라우드 기반 코딩 에이전트 확대로 큰 전환을 맞을 전망이다.
- 13분 51초: 영상 길이(831초)다.
- 세션당 1개 Pod: Kubernetes 방식에서는 에이전트 실행 세션마다 격리된 Pod를 만든다.
- 수천 개 인스턴스: Kubernetes 기반 클라우드 실행에서 제시된 확장 규모의 예다.
- 매주 월요일 오전 9시: GitHub Actions로 의존성을 갱신하는 예약 작업의 예시다.
결론 및 시사점
-
권한을 먼저 설계한다
- 에이전트가 작업하는 데 꼭 필요한 저장소·비밀 키·도구를 먼저 열거한다.
- 홈 디렉터리 전체나 운영 시스템 권한을 기본값으로 넘기지 않고 최소 권한만 제공한다.
-
작업 방식에 맞춰 격리 수준을 고른다
- 로컬 코드의 빠른 반복에는 로컬 또는 Docker를, GitHub 중심의 예약·PR 작업에는 Actions를 고려한다.
- 다양한 외부 이벤트와 지속 상태가 필요하면 VM을, 세션 간 강한 분리·대규모 실행이 중요하면 Kubernetes를 고려한다.
-
격리 경계와 운영 비용을 함께 관리한다
- 오래된 컨테이너 런타임의 취약점과 샌드박스 탈출 가능성을 염두에 두고 환경을 갱신한다.
- VM의 장기 상태 관리 부담, Kubernetes의 CPU·메모리 비용, 플랫폼 종속성, 결과물의 영속화 방식을 설계에 포함한다.
