Sandbox가 뭔가요?
샌드박스(Sandbox)란 무엇인가
— 모래놀이터에서 커널까지
Claude Code, Codex 같은 AI 코딩 도구를 쓰다 보면 한 번쯤 마주치는 단어, “샌드박스”. 어렴풋이 안전장치 같다는 느낌은 있지만 정확히 뭔지는 설명하기 어려운 이 개념을, 처음부터 끝까지 차근차근 정리해본다.
샌드박스(sandbox)는 말 그대로 아이들이 노는 “모래놀이터”에서 따온 말이다. 아이가 그 안에서 마음껏 모래성을 쌓고 무너뜨려도, 놀이터 밖의 진짜 마당이나 집은 전혀 영향을 받지 않는다. 컴퓨터에서도 원리는 똑같다.
샌드박스란, 어떤 프로그램(혹은 AI 에이전트)이 실제 시스템에 직접 손대지 못하게 하고, 미리 정해둔 제한된 범위 안에서만 동작하도록 만든 격리 환경이다. 그 안에서 무슨 일이 벌어지든, 밖의 진짜 시스템은 안전하다.
사실 소프트웨어 개발의 역사 대부분은 샌드박스 없이 진행돼 왔다. 사람이 직접 터미널에 명령어를 치고, 스스로 판단해서 위험한 걸 피해가며 작업했으니까. 로컬 개발서버에서 실험하고 만족스러우면 라이브 서버에 배포하는 방식도, 사실은 “물리적으로 다른 컴퓨터”라는 자연스러운 분리였을 뿐, 누가 의도적으로 설계한 정교한 격리 체계는 아니었다.
샌드박스가 폭발적으로 중요해진 시점은 정확히 “AI 에이전트가 사람 대신 코드를 자율적으로 실행하기 시작한 시점”이다. 이유는 단순하다.
| 실행 주체 | 위험 판단 | 필요한 안전장치 |
|---|---|---|
| 사람이 직접 명령어 입력 | 사람이 스스로 판단 | 크게 필요 없음 (실수는 하지만 의도적 위험은 피함) |
| AI가 자율적으로 명령 생성·실행 | AI가 대신 판단 → 프롬프트 인젝션 등으로 잘못 판단할 수 있음 | AI가 실수해도 피해가 갇혀 있도록 만드는 격리 장치 필수 |
즉, “개발” 자체에 샌드박스가 필수인 게 아니라, “자율적으로 코드를 실행하는 AI 에이전트가 개입하는 개발”에는 사실상 필수가 된 것이다.
샌드박스는 하나의 통일된 기술이 아니다. “허용된 범위 밖으로는 못 나간다”는 목적은 같지만, 그걸 구현하는 층(layer)이 다르다.
같은 컴퓨터, 같은 파일시스템 안에서 동작하지만, “이 폴더 밖은 못 나간다”, “이 도메인만 접속 가능하다” 같은 권한·규칙 목록만 정해둔 방식이다. 별도의 공간을 새로 만드는 게 아니라, 규칙으로 담을 쳐놓은 셈이다.
실제로 별도의 가상머신(VM)이나 컨테이너를 새로 띄워서, 그 안에서 코드를 실행하고 끝나면 그 공간 자체를 통째로 폐기하거나 초기화하는 방식이다. AI 코딩 도구가 코드를 진짜로 “실행”해볼 때 이 방식을 함께 쓰는 경우가 많다.
여기서부터는 조금 더 기술적인 이야기다. Claude Code 같은 AI 코딩 도구가 서버에서 명령어(bash)를 실행할 때, 그 격리는 단순한 “규칙 파일”이 아니라 운영체제 커널 자체의 보안 기능을 빌려서 구현된다.
| 운영체제 | 사용 기술 | 핵심 동작 |
|---|---|---|
| Linux | bubblewrap + seccomp | 파일시스템/네임스페이스 뷰를 제한하고, 시스템 콜(syscall) 자체를 필터링해서 위험한 호출을 차단 |
| macOS | Seatbelt (sandbox-exec) | 애플이 자체 시스템 서비스에도 쓰는 프레임워크로 파일·네트워크 접근을 제한 |
이 방식의 핵심은, 명령어가 실행되는 순간 디스크는 어디서나 읽기 전용으로 보이고, 미리 뚫어놓은 “쓰기 가능한 구멍”만 예외이며, 호스트의 다른 프로세스는 아예 보이지 않는다는 점이다. 이건 애플리케이션이 “알아서 조심하는” 방식이 아니라, 운영체제 커널이 원천적으로 막아버리는 방식이다.
- AI가 실행할 명령을 생성한다.
- 이 명령이 샌드박스 안에서 처리 가능한지 판단한다.
- 가능하면 격리된 뷰 안에서 실행되고, 사용자에게 묻지 않고 자동으로 진행된다.
- 네트워크가 필요한 경우, 샌드박스 밖에 있는 별도 프록시 서버를 거친다. 이 프록시가 허용 도메인 목록을 검사하고, 처음 보는 도메인이면 사용자에게 승인을 요청한다.
- 프록시를 우회하려는 시도는 커널 수준에서 그 자체로 차단당한다.
- 명령이 제약으로 실패하면, 어떤 경로·호스트가 막혔는지 상세 정보가 AI에게 다시 전달된다.
즉 이런 흐름이다: 명령 시도 → 미리 정해진 허용 목록과 대조 → 허용 범위 안이면 커널이 자체 실행·자동 승인 / 범위 밖이면 프록시나 커널이 막고 승인 요청 또는 오류 반환. 이 한 사이클이 명령이 실행될 때마다 조용히, 반복적으로 작동한다.
하나만 격리해서는 안 되는 이유가 있다. 네트워크 격리 없이 파일시스템만 막으면, 손상된 에이전트가 SSH 키 같은 민감한 파일을 유출할 방법이 여전히 남는다. 반대로 파일시스템 격리 없이 네트워크만 막으면, 에이전트가 쉽게 샌드박스를 탈출해서 다른 방식으로 접근할 여지가 생긴다. 두 가지를 함께 걸어야 비로소 실질적인 경계가 만들어진다.
샌드박스는 개발자가 매번 의식하며 다루는 도구라기보다, 알든 모르든 배경에서 조용히 작동하는 안전장치에 가깝다. AI가 대신 명령을 실행해주는 시대가 되면서, 이 “보이지 않는 담장”의 존재는 선택이 아니라 사실상 전제조건이 되어가고 있다.
직접 설정하고 조정할 일은 많지 않을 수 있지만, 오늘날 AI와 함께 무언가를 만들어간다는 것이 어떤 안전장치 위에서 이뤄지는지 정도는 알아두는 게, 이 시대를 이해하는 데 작은 도움이 될 것이다.
샌드박스는 “장소”이자 “규칙 체계”다. 물리적으로 격리된 가상 공간일 수도, 눈에 보이지 않는 허용 목록일 수도 있으며, 실무에서는 대개 둘이 겹쳐서 쓰인다.
실행 층위는 커널까지 내려간다. Linux의 bubblewrap+seccomp, macOS의 Seatbelt처럼 운영체제 자체의 보안 기능을 빌려 파일시스템과 네트워크를 동시에 제한한다.
필수가 된 이유는 AI의 자율성 때문이다. 사람이 직접 명령을 치던 시절엔 선택이었지만, AI 에이전트가 자율적으로 코드를 실행하는 지금은 사실상 전제조건이 되었다.