발표자 노트 · 00:00–01:00 · 1분 - 자기 소개 - GHCP와 같은 AI 코딩 에이전트가 갑자기 디렉토리를 삭제했다거나 하는 경험이 있나? - AI 에이전트는 종종 예상하지 않은 방향으로 튈 때가 있음. 이런 경우에도 안전하게 사용할 수 있어야 함 - 오늘은 샌드박스 기능에 대해 얘기해 보려고 함
발표자 노트 · 01:00–02:00 · 1분 - GHCP가 처음 나왔을 때는 코드를 제안하는 수준이었음 - 이제는 직접 파일을 수정하고, 패키지 설치하고, 셸 명령 실행하고, 네트워크에 접속함 - 점점 코딩 에이전트의 성능이 올라가면서 내 PC의 권한을 마음대로 부릴 수 있게 됨 - 문제가 생길 수 있는 여지가 충분히 있지만, 그렇다고 권한을 허용하지 않자니 제약이 너무 많음 - 권한을 허용할 경우 문제가 생긴다면, 문제가 생길 수 있는 범위를 어디까지 허용해야 할까?
발표자 노트 · 02:00–02:10 · 10초 - 로컬 개발 환경에서 코딩 에이전트가 만들어 낼 수 있는 위험 요소와 이를 통제하기 위한 경계는 어떤 것들이 있을까?
발표자 노트 · 02:10–04:10 · 2분 - 다섯 가지 정도로 봄 - 원하지 않는 파일을 건드릴 수 있음 - 환경 변수라든가 설정 파일에 있는 토큰을 읽을 수 있음 - 연결된 네트워크를 통해 정보가 유출될 수 있음 - 공급망 공격을 통한 악성 패키지 설치 - 도커 소켓을 통해 호스트를 장악할 수 있는 가능성 - 그렇다면 이 위험 요소를 통제하면 되지 않을까?
발표자 노트 · 04:10–04:40 · 30초 - 이 위험 요소를 통제하기 위해 에이전트의 권한을 제거하면 작업을 할 수가 없음 - 그래서 나온 것이 바로 도커 샌드박스임 - 에이전트는 microVM 안에서 필요한 모든 권한을 유지함 - 동시에 호스트에서 공유하지 않은 파일과 자원에는 접근할 수 없음
발표자 노트 · 04:40–06:00 · 1분 20초 - 샌드박스는 단순한 컨테이너라기 보다는 하나의 VM임 - 그 안에서 에이전트는 sudo 권한을 포함해서 충분한 권한을 가질 수 있음 - 대신 호스트 파일에 접근하지 못하고, 네트워크 접근 권한이 제한적이고, 시크릿 값은 호스트에서 프록시로 제공하고, 샌드박스의 라이프사이클은 호스트에서 관리함 - 이런 식으로 자율성과 통제를 동시에 구현할 수 있음
발표자 노트 · 06:00–07:30 · 1분 30초 - 샌드박스의 기본 경계는 microVM임 - 이 안에서 높은 권한을 가지지만 호스트가 공유하기 전에는 호스트에 접근할 수 없음 - 호스트의 도커 엔진에 접근 못함. 샌드박스 내부의 도커 엔진을 쓸 수 있음 - 즉, 샌드박스 안에서는 정해진 경로로만 외부와 소통한다는 것
발표자 노트 · 07:30–09:00 · 1분 30초 - 도커 샌드박스에서 제공하는 코드 접근 원칙이 두 가지가 있음 - 다이렉트 모드와 클론 모드가 둘 다 장단점이 있음 - 다이렉트 모드의 경우 호스트와 프로젝트를 공유함. 빠른 반영이 가능함. 대신 격리 수준이 낮음 - 클론 모드의 경우 호스트와 프로젝트를 공유하지 않음. 코드 변경 사항은 PR로 처리해야 함. 높은 수준으로 격리가 가능함
발표자 노트 · 09:00–09:10 · 10초 - 그럼 첫번째 데모를 보쟈 - 도커 샌드박스 안에서 GHCP CLI와 앱 현대화 플러그인을 통해 앱을 현대화 해 보쟈
## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기
발표자 노트 · 09:10–09:50 · 40초 - 이번 데모에서는 이런 것들을 보여줄 거임 - 앱 현대화 자체를 하는 것도 중요하지만, 이게 샌드박스 안에서만 동작하는 것을 보는게 중요함
## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기
```bash sbx secret set github --command 'gh auth token' sbx run --clone --name java-appmod copilot . sbx exec -it java-appmod bash ```
발표자 노트 · 09:50–11:10 · 1분 20초 - 깃헙 토큰을 호스트의 시크릿으로 저장함 - 그 다음에 샌드박스를 하나 클론 모드로 열면서 곧바로 GHCP CLI를 실행함 - 또는 sbx exec 명령어를 통해 샌드박스의 bash 셸로 들어감
## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기
발표자 노트 · 11:10–12:10 · 1분 - 플러그인 설치 - 플러그인 설치 중 관련 MCP 서버도 함께 설치 - MCP 실행 실패는 샌드박스의 환경 설정 때문인 것 보여줌
## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기
발표자 노트 · 12:10–13:40 · 1분 30초 - /agent 실행 후 github-copilot-modernization:modernize 선택 - 현대화 에이전트는 알아서 Assessment, Planning, Execution 단계를 진행함 - 이미 GHCP는 --allow-all 옵션을 자동으로 적용시켜 놨기 때문에 맨 마지막에 진행할까요? 정도만 남겨두고 알아서 진행함
## 데모 #1: Docker 샌드박스에서 Java 앱 현대화하기
<div class="prompt-box">이 앱을 Java 21과 Spring Boot 4.1로 업그레이드 해줘</div>
발표자 노트 · 13:40–17:00 · 3분 20초 - 프롬프트 실행 - 화면처럼 얘기할 수도 있고, 아예 "해줘!" 라고 해도 됨 - 여기서는 .NET 10으로 현대화 해달라고 했음 - 여기서는 Java 21과 Spring Boot 4.1로 현대화 해달라고 했음 - 시간이 오래 걸리므로 우선 여기까지 진행하는 것 보여주고 다음으로 넘어감
발표자 노트 · 17:00–17:30 · 30초 - 지금까지 도커 샌드박스 안에서 GHCP CLI로 앱 현대화 하는 과정을 보여줬음 - 이번에는 팀 단위로 많은 작업을 동시에 실행시켜야 한다면? 그땐 개발자 개인 PC에 의존할 수 없음 - 이때부터는 클라우드에 올라간 샌드박스를 고려해야 함 - ACA 샌드박스가 이 문제를 해결할 수 있음
발표자 노트 · 17:30–17:40 · 10초 - 로컬 개발환경 격리를 넘어, 클라우드 규모에서 샌드박스를 운영해 보쟈
발표자 노트 · 17:40–19:00 · 1분 20초 - ACA 샌드박스는 컨테이너 앱 기반의 리소스임. 현재 프리뷰 상태 - 포탈, CLI, 파이썬 SDK, Skills 등으로 샌드박스를 생성하고 관리할 수 있음 - 오늘은 ACA CLI를 사용할 거임 - 각각의 샌드박스는 격리된 실행환경이고 도커에서 제공하는 컨테이너 이미지를 루트 파일 시스템으로 사용함 - 샌드박스마다 스냅샷을 제공해서 사용하지 않을 경우에는 컨테이너를 멈추고 필요한 경우 다시 실행시킬 수 있음
발표자 노트 · 19:00–20:20 · 1분 20초 - 로컬에서 돌아가는 도커 샌드박스에 더해 이런 장점이 있음 - 빠른 시작, 스케일링, 스냅샷, 클라우드 거버넌스, 네트워크 통제, 커스텀 OCI 이미지 - 중지상태에서는 스냅샷 저장 공간을 제외한 나머지 비용이 발생하지 않음 - 샌드박스 사용자는 별도의 RBAC 권한이 필요함
발표자 노트 · 20:20–20:30 · 10초 - 쟈 그러면 두번째 데모를 한 번 볼까?
발표자 노트 · 20:30–21:30 · 1분 - aca sandboxgroup create 명령으로 샌드박스 그룹 생성 - 모든 샌드박스가 여기서 돌아감 - aca sandbox create 명령으로 샌드박스 생성 - 샌드박스 안으로 들어가서 로그인해도 되지만, 그 전에 GitHub PAT 활용해서 사전에 로그인할 수 있음 - 이후 샌드박스 안으로 들어가면 됨
발표자 노트 · 21:30–22:30 · 1분 - aca sandbox shell 명령어로 샌드박스에 접속 - 깃헙 리포 클론, GHCP CLI 실행
발표자 노트 · 22:30–23:30 · 1분 - 프롬프트 실행
발표자 노트 · 23:30–24:30 · 1분 - aca sandbox stop 명령어로 샌드박스 중단 - aca sandbox resume 명령어로 다시 샌드박스 실행 - design-update.md 파일 보이는지 확인
발표자 노트 · 24:30–24:40 · 10초 - 하지만 과연 샌드박스가 보안 관점에서 만능칼일까? 여전히 조심해야 할 부분이 있음
발표자 노트 · 24:40–25:40 · 1분 - 로컬에서 개발자가 에이전트를 안전하게 사용하려면 Docker 샌드박스가 자연스러움 - 원격에서 동적으로 샌드박스 기능을 여러개 동시다발적으로 돌리려면 ACA 샌드박스가 자연스러움
발표자 노트 · 25:40–26:40 · 1분 - 여전히 위험요소는 남아있음 - 네트워크, 토큰 등은 정보 유출 및 권한 오남용의 경로가 될 수 있음 - 서플라이 체인 어택, 플러그인, 설치 스크립트 등 별도로 검토해야 함 - 샌드박스는 이런 영향을 받을 수 있는 범위를 제한함
발표자 노트 · 26:40–27:40 · 1분 - 도커 샌드박스에서는 Direct 모드 사용시 조심할 것, 샌드 박스 밖에서 실행되는 로컬 MCP, 공유 스킬 등을 조심해야 함 - ACA 샌드박스에서는 RBAC 권한 등을 정확하게 통제해야 함 - 스냅샷은 작업 상태를 보존해 준다는 장점도 있지만, 결국 데이터가 남아있으니 라이프사이클 관리에 조심해야 함
발표자 노트 · 27:40–28:00 · 20초 - 따라서, 샌드박스는 GHCP 같은 AI 코딩 에이전트를 무조건 안전하게 만들어주거나 하는 장치가 아님 - 오히려 무슨 문제가 생겼을 경우 피해를 최소하 시켜주는 방어 계층임
발표자 노트 · 28:00–29:00 · 1분 - 오늘 세션 내용은 요렇게 세가지로 정리 가능함 - 1. 에이전트에게 일할 권한은 주되 실행 경계는 외부 정책으로 강제 - 2. GHCP CLI를 개발자 PC에서 대화형으로 실행할 때는 Docker 샌드박스, 원격에서 자동화하거나 여러 작업을 동시에 실행할 때는 ACA 샌드박스 - 3. 샌드박스는 에이전트를 완전히 믿고 실행하는 대신 문제 발생시 피해 범위를 작고 관찰 가능하고 폐기 가능하게 만들어줌
발표자 노트 · 29:00–29:20 · 20초 - 샌드박스와 관련해서 더욱 궁금하다면? 링크 찾아봐라
발표자 노트 · 29:20–30:00 · 40초 - 땡큐베리감사!