๐Ÿ“บ ์˜์ƒ ์š”์•ฝ ์•„์นด์ด๋ธŒ
โ† ๋ชฉ๋ก

Sandboxes Aren't Optional: 4 Ways to Isolate Coding Agents โ€” Robert Brennan, OpenHands

AI Engineer ยท 2026-10-12 14:10 ยท 14:23

ํ•œ ์ค„ ํ•ต์‹ฌ

์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ํ™•์žฅํ•˜๋ ค๋ฉด ๋กœ์ปฌ ์‹คํ–‰๋ณด๋‹ค ์ƒŒ๋“œ๋ฐ•์Šค์™€ ์ตœ์†Œ ๊ถŒํ•œ์„ ๊ฐ–์ถ˜ ํด๋ผ์šฐ๋“œ ์‹คํ–‰ ํ™˜๊ฒฝ์œผ๋กœ ์˜ฎ๊ฒจ์•ผ ํ•˜๋ฉฐ, ๊ทธ ๊ตฌํ˜„ ๋ฐฉ์‹์€ Docker, GitHub Actions, ์ „์šฉ VM, Kubernetes์ฒ˜๋Ÿผ ์ ์  ๋” ๋ถ„๋ฆฌ๋œ ํ˜•ํƒœ๋กœ ์ง„ํ™”ํ•œ๋‹ค.

์‹œ๊ฐ„๋ณ„ ์š”์•ฝ

  1. 0:00
    ์†Œ๊ฐœ์™€ OpenHands OpenHands๋Š” ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์ œ๊ณตํ•˜๋ ค๋Š” MIT ๋ผ์ด์„ ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ์ถœ๋ฐœํ•ด, ์ด์ œ๋Š” ํ•˜๋„ค์Šค๋ถ€ํ„ฐ ์ธํ”„๋ผ์™€ ๊ด€์ œ๊นŒ์ง€ ํฌํ•จํ•œ ์ฝ”๋”ฉ ์—์ด์ „ํŠธ ์‹คํ–‰ ํ”Œ๋žซํผ์œผ๋กœ ํ™•์žฅ๋˜์—ˆ๋‹ค.
  2. 0:57
    AI ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ์˜ ์ง„ํ™” ์ฑ—๋ด‡์ด ์ฝ”๋“œ ์กฐ๊ฐ์„ ์ƒ์„ฑํ•˜๋˜ ๋‹จ๊ณ„์—์„œ AI IDE์˜ ์ž๋™์™„์„ฑ์œผ๋กœ, ๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์—์ด์ „ํŠธ ๋‹จ๊ณ„๋กœ ๋ฐœ์ „ํ–ˆ์œผ๋ฉฐ, ํ˜„์žฌ๋Š” ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฌ์ „ํžˆ ๋กœ์ปฌ์—์„œ pair programmer์ฒ˜๋Ÿผ ์“ฐ๊ณ  ์žˆ๋‹ค.
  3. 2:27
    ์—์ด์ „ํŠธ๋ฅผ ํด๋ผ์šฐ๋“œ๋กœ ์˜ฎ๊ธฐ๊ธฐ ํด๋ผ์šฐ๋“œ ์—์ด์ „ํŠธ๋Š” ์‹คํ–‰ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ณ  ์ธ๊ฐ„์˜ ์ƒ์‹œ ๊ฐ์‹œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ƒŒ๋“œ๋ฐ•์Šค๊ฐ€ ํ•„์ˆ˜์ด๋ฉฐ, ์ดํ›„์—๋Š” GitHubยทDataDogยทSlack ์ด๋ฒคํŠธ์— ๋ฐ˜์‘ํ•˜๋Š” ์ž๋™ํ™”์™€ ๋ฉ€ํ‹ฐ ์—์ด์ „ํŠธ ํ˜‘์—…, ๋” ๋‚˜์•„๊ฐ€ SDLC ์ž๋™ํ™”๋กœ ์ด์–ด์ง„๋‹ค.
  4. 3:32
    ์—์ด์ „ํŠธ๋ฅผ ๋กœ์ปฌ์—์„œ ์‹คํ–‰ํ•  ๋•Œ์˜ ์œ„ํ—˜ ๋กœ์ปฌ์—์„œ ์—์ด์ „ํŠธ๋ฅผ ๋Œ๋ฆฌ๋ฉด ์Šน์ธ ์š”์ฒญ์„ ๊ณ„์† ํ—ˆ์šฉํ•˜๋ฉฐ ๊ฐ์‹œํ•˜๋“ ์ง€, dangerously skip permissions์ฒ˜๋Ÿผ ๊ฑฐ์˜ ๋ชจ๋“  ๊ถŒํ•œ์„ ์ฃผ๊ณ  ๋งก๊ธฐ๋“ ์ง€ ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋˜๊ธฐ ์‰ฝ๊ณ , ํ›„์ž๋Š” ํŒŒ์ผยทํ™˜๊ฒฝ๋ณ€์ˆ˜ยทDBยทKubernetes๊นŒ์ง€ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ๋…ธ์ถœ์‹œํ‚จ๋‹ค.
  5. 4:52
    ์ตœ์†Œ ๊ถŒํ•œ ์›์น™ ์—์ด์ „ํŠธ์™€ ์‚ฌ๋žŒ ๋ชจ๋‘ ์ž‘์—…์— ๊ผญ ํ•„์š”ํ•œ ๋ฒ”์œ„๋งŒ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์œ ์ถœ ๊ฐ€๋Šฅํ•œ ๋น„๋ฐ€๊ณผ ํŒŒ์ผ์„ ์ค„์ด๊ณ  prompt injection์ด๋‚˜ ์˜ค์ž‘๋™์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ์˜ ํ”ผํ•ด ๋ฐ˜๊ฒฝ์„ ํฌ๊ฒŒ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.
  6. 5:42
    ๋กœ์ปฌ Docker ์ปจํ…Œ์ด๋„ˆ ์ƒˆ ๋Œ€ํ™”๋งˆ๋‹ค Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์šฐ๋Š” ๋ฐฉ์‹์€ ์ผํšŒ์„ฑ์ด๋ผ ์•ˆ์ „ํ•˜๊ฒŒ ์‹คํ—˜ํ•˜๊ธฐ ์ข‹๊ณ , Git repoยทํฌํŠธยท๋น„๋ฐ€๊ฐ’ยทMCP ์„œ๋ฒ„๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๋ถ™์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋…ธํŠธ๋ถ ์ž์›๊ณผ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ํ•œ๊ณ„ ๋•Œ๋ฌธ์— ๋Œ€๊ทœ๋ชจ ์ž๋™ํ™”์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.
  7. 7:02
    GitHub Actions์™€ Claude Code GitHub Actions๋Š” ํด๋ผ์šฐ๋“œ์˜ ์ผํšŒ์„ฑ ํ™˜๊ฒฝ์—์„œ ์—์ด์ „ํŠธ๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ๋Œ๋ฆฌ๊ณ  ์ผ์ • ์‹คํ–‰์ด๋‚˜ PR ์ฝ”๋“œ๋ฆฌ๋ทฐ ๊ฐ™์€ ์ž๋™ํ™”๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, GitHub ์ด๋ฒคํŠธ์— ์ข…์†๋˜๊ณ  ํ์‡„์ ์ธ ํ‘œ์ค€์ด๋ผ Slack์ด๋‚˜ DataDog ๊ฐ™์€ ๋‹ค๋ฅธ ์ด๋ฒคํŠธ๋กœ ํ™•์žฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
  8. 8:22
    ์ „์šฉ VM ๋˜๋Š” Mac Mini ์ „์šฉ VM์ด๋‚˜ Mac mini๋Š” ์ƒํƒœ๊ฐ€ ๋‚จ๋Š” ์žฅ๊ธฐ ์‹คํ–‰ ํ™˜๊ฒฝ์ด๋ผ ์›นํ›…๊ณผ ์Šค์ผ€์ค„ ๊ธฐ๋ฐ˜ ์ž๋™ํ™”๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ ์—์ด์ „ํŠธ๊ฐ€ ํ•œ ํ™˜๊ฒฝ์„ ๊ณต์œ ํ•˜๋ฉด์„œ ์„œ๋กœ์˜ ๊ถŒํ•œ๊ณผ ์ƒํƒœ๋ฅผ ์นจ๋ฒ”ํ•ด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.
  9. 9:47
    ์„ธ์…˜๋ณ„ Kubernetes Pod ์„ธ์…˜๋งˆ๋‹ค ๋ณ„๋„ Pod๋ฅผ ๋„์šฐ๋Š” Kubernetes ๋ฐฉ์‹์€ ๋งค๋ฒˆ ์ƒˆ ํ™˜๊ฒฝ์—์„œ ์‹œ์ž‘ํ•˜๊ณ  ์ข…๋ฃŒ๋˜๋ฏ€๋กœ ์ƒํƒœ ์˜ค์—ผ์ด ์ ๊ณ , ๋Œ€๊ทœ๋ชจ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, cron job์ด๋‚˜ HTTP ์ด๋ฒคํŠธ๋กœ ์™„์ „ ์ž๋™ ์‹คํ–‰์„ ๊ตฌ์„ฑํ•˜๊ธฐ์— ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•˜๋‹ค.
  10. 11:02
    ๋„ค ๊ฐ€์ง€ ์ „๋žต ๋น„๊ต ๋กœ์ปฌ์€ ๊ฐ€๊นŒ์šด ์ž‘์—…๊ณผ ์ˆ˜๋™ ์ œ์–ด์— ์œ ๋ฆฌํ•˜๊ณ , Docker๋Š” ๊ฒฉ๋ฆฌ๋œ ์‹คํ—˜์— ์ข‹์œผ๋ฉฐ, VM์€ ์ง€์†์„ฑ๊ณผ ์ด๋ฒคํŠธ ์ˆ˜์‹ ์ด ๊ฐ•์ ์ด๊ณ , Kubernetes๋Š” ๊ฒฉ๋ฆฌยทํ™•์žฅ์„ฑยทํŠธ๋ฆฌ๊ฑฐ ๋‹ค์–‘์„ฑ์—์„œ ๊ฐ€์žฅ ์šฐ์ˆ˜ํ•˜๋‹ค๋Š” ๋น„๊ต๊ฐ€ ์ œ์‹œ๋œ๋‹ค.
  11. 12:22
    ์ƒŒ๋“œ๋ฐ•์Šค๋Š” ๋งŒ๋Šฅ์ด ์•„๋‹ˆ๋‹ค ์ƒŒ๋“œ๋ฐ•์Šค ํƒˆ์ถœ๊ณผ ์ปจํ…Œ์ด๋„ˆ ํƒˆ์ถœ ๊ณต๊ฒฉ ์‚ฌ๋ก€๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ ์ ˆ๋Œ€ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜๋Š” ์—†์ง€๋งŒ, ์—์ด์ „ํŠธ์˜ ์ ‘๊ทผ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐฉ์–ด์„ ์œผ๋กœ๋Š” ์—ฌ์ „ํžˆ ๋งค์šฐ ์œ ํšจํ•˜๋‹ค.
  12. 13:07
    OpenHands Agent Canvas OpenHands Agent Canvas๋Š” Claude code, CodeX, OpenHands harness๋ฅผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃจ๋ฉด์„œ ๋กœ์ปฌ์˜ ์œ„ํ—˜ํ•œ ๊ธฐ๋ณธ๊ฐ’์—์„œ ์‹œ์ž‘ํ•ด Docker, ์›๊ฒฉ VM, Kubernetes๋กœ ์†์‰ฝ๊ฒŒ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด, ์ž‘์—…์— ๋งž๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ณ ๋ฅด๊ฒŒ ํ•œ๋‹ค.
  13. 13:57
    ๋งˆ๋ฌด๋ฆฌ ๋ฐœํ‘œ๋Š” ์งˆ๋ฌธ์„ ๋ฐ›๋Š” ํ˜•ํƒœ๋กœ ๋๋‚˜๋ฉฐ, ํ•ต์‹ฌ ๋ฉ”์‹œ์ง€๋Š” ์ฝ”๋”ฉ ์—์ด์ „ํŠธ๋ฅผ ์•ˆ์ „ํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ์“ฐ๋ ค๋ฉด ์ ์ ˆํ•œ ์ƒŒ๋“œ๋ฐ•์Šค ์„ ํƒ์ด ํ•„์ˆ˜๋ผ๋Š” ์ ์œผ๋กœ ์ •๋ฆฌ๋œ๋‹ค.

์‹ค๋ฌด ์ธ์‚ฌ์ดํŠธ

  • ์—์ด์ „ํŠธ๋ฅผ ๋กœ์ปฌ์—์„œ ์“ฐ๋Š” ์Šต๊ด€์„ ํด๋ผ์šฐ๋“œ ์ƒŒ๋“œ๋ฐ•์Šค๋กœ ์˜ฎ๊ธฐ๋ฉด, ๋‹จ์ˆœํ•œ ํŽธ์˜์„ฑ๋ณด๋‹ค ๊ถŒํ•œ ๋ถ„๋ฆฌ์™€ ์ž๋™ํ™” ํŠธ๋ฆฌ๊ฑฐ ํ™•๋ณด๋ผ๋Š” ์šด์˜์ƒ์˜ ์ด์ ์ด ๋” ์ปค์ง„๋‹ค.
  • ์‹ค๋ฌด์—์„œ๋Š” Docker, VM, Kubernetes๋ฅผ ๊ธฐ์ˆ  ์Šคํƒ์ด ์•„๋‹ˆ๋ผ ๊ถŒํ•œ ๋ฒ”์œ„์™€ ์ƒํƒœ ์ง€์†์„ฑ์˜ ์„ ํƒ์ง€๋กœ ๋ด์•ผ ํ•˜๋ฉฐ, ์ž‘์—… ์ข…๋ฅ˜์— ๋”ฐ๋ผ ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•˜๋‹ค.
  • ์ƒŒ๋“œ๋ฐ•์Šค ๋„์ž…๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์ตœ์†Œ ๊ถŒํ•œยท๋น„๋ฐ€ ๊ด€๋ฆฌยท์ด์ƒ ๋™์ž‘ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ•จ๊ป˜ ์„ค๊ณ„ํ•ด์•ผ ์‹ค์ œ ์œ„ํ—˜์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.