샌드박싱은 AI가 만든 코드를 격리된 환경에서만 실행해, 코드가 틀렸거나 악의적이어도 내 파일·네트워크·다른 프로그램이 피해를 입지 않게 하는 방법이다. 에이전트에게 코드나 명령어 실행 권한을 줄 때 기본으로 깔아 두는 안전장치다.
| 방식 | 격리 강도 | 이럴 때 쓴다 |
|---|---|---|
| OS 기능 (macOS Seatbelt, Linux bubblewrap) | 중간 | 내 컴퓨터에서 도는 코딩 에이전트 |
| 컨테이너 (Docker) | 중간 | 서버에서 같은 실행 환경을 반복해서 만들 때 |
| 마이크로VM (Firecracker) | 강함 | 모르는 사람이 보낸 코드를 대신 실행할 때 |
| 클라우드 샌드박스 (E2B, Cloudflare Sandbox) | 서비스마다 다름 | 인프라 없이 앱에 코드 실행 기능을 붙일 때 |
샌드박스가 무엇을 막는지부터 정해야 한다. 보통 아래 네 가지를 제한한다.
| 대상 | 제한 예시 |
|---|---|
| 파일 | 작업 폴더에만 쓰기 허용 |
| 네트워크 | 허용한 도메인에만 접속 |
| 프로세스 | 호스트의 다른 프로그램 접근 차단 |
| 자원 | CPU·메모리·실행 시간 상한 |
파일만 막으면 에이전트가 읽은 비밀 정보를 외부로 보낼 수 있다. 네트워크만 막으면 시스템 파일을 고칠 수 있다. 그래서 둘을 함께 막아야 제대로 된 격리다.
로컬 코딩 에이전트를 쓸 때는 에이전트에 들어 있는 샌드박스 기능을 켠다. Claude Code는 OS 기능을 써서 파일 쓰기는 작업 폴더 안으로, 네트워크는 허용한 도메인으로 묶는다. 그 범위 안의 명령은 매번 승인을 묻지 않으니 작업도 빨라진다.
내 앱에 코드 실행 기능을 붙일 때는 클라우드 샌드박스를 쓴다. E2B에서는 sandbox.run_code(code) 한 줄이면 격리된 환경에서 코드를 돌리고 결과만 받는다. 순서는 샌드박스 만들기 → 필요한 파일 올리기 → 코드 실행 → 결과 받기 → 샌드박스 종료다.
샌드박스는 바깥을 지켜 줄 뿐, 안에 넣은 것까지 지켜 주지는 않는다. API 키나 홈 폴더 전체를 넣어 두면 프롬프트 인젝션에 속은 에이전트가 그대로 빼낼 수 있다. 필요한 파일만 넣고, 키는 권한이 좁은 임시 키를 쓴다.
컨테이너는 호스트와 커널을 함께 쓴다. 그래서 탈출 취약점이 나오면 뚫릴 수 있다. 남이 보낸 코드를 돌린다면 VM 수준의 격리를 고른다. 반대로 내가 직접 읽고 확인한 짧은 스크립트만 돌린다면 무거운 샌드박스는 지나칠 수 있다.
가장 흔한 건 코딩 에이전트에게 명령 실행을 맡길 때 켜 두는 방식이다. 누가 쓴 코드를 돌리는지에 따라 격리 강도를 고르고, 일이 끝나면 환경을 버린다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 로컬 코딩 에이전트 | 샌드박스 모드를 켜고 빌드·테스트 명령을 작업 폴더와 허용 도메인 안에서 승인 없이 돌린다 |
| 챗봇의 데이터 분석 | 사용자가 올린 파일을 분석하는 코드를 클라우드 샌드박스에서 돌리고 표·그래프 결과만 받는다 |
| 클라우드·CI 에이전트 | 저장소를 컨테이너에 받아 코드 수정과 테스트를 맡기고, 끝나면 컨테이너를 지운다 |
| 코드 실행 서비스 | 모르는 사용자가 보낸 코드를 마이크로VM에서 실행해 다른 사용자와 서버를 지킨다 |