본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 07. 05:40

실행 격차 해소하기, 파트 2: 의존성 관리 (Dependency management)

요약

AI 생성 코드를 실행하는 샌드박스 환경에서 의존성 관리 문제를 해결하는 방법을 다룹니다. 매번 패키지를 설치하는 대신, 지속 가능한 워크스페이스를 통해 의존성을 캐싱함으로써 콜드 스타트 시간을 단축하고 AI 에이전트의 실행 효율을 높이는 전략을 소개합니다.

핵심 포인트

  • 매 실행 시 패키지 설치는 비용과 속도 측면에서 비효율적임
  • 지속 가능한 워크스페이스를 통한 의존성 영구 저장 방식 제안
  • 캐싱을 통해 AI 에이전트의 콜드 스타트 및 설치 비용 절감
  • 매니페스트 우선 방식과 자동 감지 폴백 전략의 병행

이 글은 실행 격차 해소하기 (Closing the execution gap) 시리즈의 두 번째 파트입니다. 이 시리즈는 AI 생성 코드를 위한 클라우드 샌드박스(sandbox)인 jhansi.io를 구축하는 과정을 다룹니다.

지속 가능한 샌드박스(persistent sandboxes)를 출시한 후 제가 받은 첫 번째 질문은 예상 가능했습니다.

"좋네요 — 하지만 여전히 모든 것을 직접 pip install 해야 하나요?"

네, 맞습니다. 직접 하셔야 했습니다. 참 민망한 상황이었죠.

만약 서비스의 핵심 가치가 "마찰 없이 (zero friction) AI가 생성한 코드를 실행하는 것"이라면, 사용자가 의존성(deps)을 수동으로 관리하게 만드는 것은 모순입니다. 규제 대상 팀(regulated teams)에게는 상황이 더 심각합니다. 새로운 패키지가 추가될 때마다 공급망 검토(supply-chain review)를 거쳐야 하기 때문입니다. 이러한 마찰은 도입을 저해합니다.

그래서 v0.3에서 이 문제를 해결했습니다.

샌드박스 내 의존성 문제

모든 샌드박스는 깨끗한 컨테이너(container) 상태로 시작합니다. main.py를 업로드하고 실행하면 다음과 같은 결과가 나타납니다.

ModuleNotFoundError: No module named 'requests'

단순한 해결책은 실행 시점(exec time)에 설치하는 것입니다. 하지만 매 실행마다 PyPI에서 다운로드하는 방식은 느리고, 비용이 많이 들며, 불안정합니다. pandas + numpy 조합은 콜드 스타트(cold start)에 40초가 소요됩니다. 이를 100번 실행하면 AI 에이전트(AI agent)는 유용한 작업을 수행하기도 전에 예산을 다 써버릴 것입니다.

올바른 해결책은 다음과 같습니다: 한 번 설치하고, 영구적으로 유지(persist)하는 것입니다.

한 번 설치하고, 영구적으로 유지하기

jhansi.io는 모든 샌드박스에 지속 가능한 워크스페이스(persistent workspace) — 즉, 실행 간에도 유지되는 폴더 — 를 제공합니다. v0.3에서는 의존성(dependencies)도 그곳에 저장됩니다.

  • 첫 번째 실행: 의존성을 감지하여 /sandbox/deps에 설치한 후 코드를 실행합니다.
  • 두 번째 실행: 의존성이 이미 존재합니다. 콜드 스타트(Cold start) 시간이 극적으로 줄어듭니다. 이는 AI 에이전트에게 매우 중요합니다. 인간은 30초의 설치 시간을 견딜 수 있지만, 작업을 해결하기 위해 5가지 접근 방식을 시도하는 에이전트는 그럴 수 없습니다. 워크스페이스 범위의 캐시(Workspace-scoped cache)를 사용하면, 첫 번째 시도의 실패가 설치 비용(install tax)을 지불하게 됩니다. 두 번째부터 다섯 번째 시도는 즉시 실행됩니다.

첫 번째 실행 — 설치 + 실행

$ curl -X POST .../sandboxes/sb_abc123/exec -d '{"filename": "main.py"}'
{
"output": "Installing requests==2.31.0...\n200\n"
}

두 번째 실행 — 바로 실행

$ curl -X POST .../sandboxes/sb_abc123/exec -d '{"filename": "main.py"}'
{
"output": "200\n"
}

이것이 "AI는 너무 느리다"와 "AI는 주니어 개발자보다 빠르다" 사이의 차이입니다.

매니페스트 우선, 자동 감지는 폴백(fallback)으로

무엇을 설치해야 할지 어떻게 알 수 있을까요? 두 가지 접근 방식을 적절한 순서로 모두 사용합니다.

사용자가 매니페스트(manifest)를 제공하면, 우리는 사용자를 신뢰합니다. 사용자는 그 어떤 정적 분석기(static analyser)보다 자신의 의존성(deps)을 더 잘 알고 있기 때문입니다. 만약 제공하지 않는다면, 자동 감지(auto-detection) 방식으로 전환합니다.

Python의 우선순위:

  1. pyproject.tomlpip install
  2. requirements.txtpip install -r
  3. 둘 다 없는 경우 → pipreqs 스캔. pipreqs는 단순히 import requestsrequests로 바꾸는 것에 그치지 않습니다. import cv2opencv-python을 의미하고, import sklearnscikit-learn을 의미한다는 것을 알고 있습니다. 사용자가 이를 일일이 기억할 필요가 없습니다.

매니페스트를 사용하는 것은 단순히 더 빠를 뿐만 아니라, 감사(auditable)가 가능하다는 장점이 있습니다. 감사자는 실행 간에 고정된(pinned) 의존성들의 차이(diff)를 비교할 수 있습니다. 자동 감지는 프로토타이핑을 위한 것입니다. 감사 가능성에 대한 자세한 내용은 파트 5에서 다룹니다.

네 가지 언어, 네 가지 전략

AI는 Python만 작성하지 않습니다. jhansi.io는 LLM이 가장 많이 생성하는 네 가지 언어를 처리합니다:

언어감지된 매니페스트설치 명령매니페스트가 없는 경우의 폴백
Pythonpyproject.toml, requirements.txtpip install --target /sandbox/depspipreqs 자동 감지
...

각 언어는 고유의 관용구(idioms)를 유지합니다. 우리는 보편적인 추상화를 강요하지 않습니다. 워크스페이스 스코핑(Workspace-scoping)을 통해 한 샌드박스의 torch==2.1.0이 다른 샌드박스의 torch==1.13을 오염시키지 않도록 합니다. AI 실행 간에 의존성 지옥(dependency hell)은 발생하지 않습니다.

신뢰 경계 (The trust boundary)

기록할 가치가 있는 결정 사항 하나는, 우리는 설치되는 항목을 검증(vet)하지 않는다는 점입니다.

외부 유출(Egress)은 공식 레지스트리(registries)인 PyPI, npm, Maven Central, proxy.golang.org로만 제한되며, 그 외의 곳은 허용되지 않습니다. 임의의 도메인은 허용되지 않습니다. 해당 레지스트리에서 무엇을 설치할지는 사용자의 책임입니다.

계약은 간단합니다:

jhansi.io는 격리(isolation)를 보장합니다. 코드는 사용자의 소유입니다.

이는 AWS Lambda나 Cloud Run과 동일한 모델입니다. 우리는 폭발 반경(blast radius)을 제한합니다. 사용자의 임포트(imports)를 감사하지는 않습니다.

실행당 SBOM(Software Bill of Materials) — 설치된 모든 패키지의 버전과 라이선스가 포함된 전체 목록 — 제공은 로드맵에 포함되어 있습니다. 현재는 격리(contain)에 집중하고 있으며, 내일은 큐레이션(curate)할 것입니다.

다음 단계

다음 두 가지는 v0.3에 포함되지 않았습니다:

  • 스트리밍 출력 (Streaming output) — 의존성 설치 (dep installs)에는 30초가 걸릴 수 있습니다. 지금은 기다려야만 합니다. 곧 출력을 실시간으로 확인하여 torch가 왜 그렇게 오래 걸리는지 정확히 알 수 있게 될 것입니다.
  • 누락된 임포트 감지 (Missing import detection) — 매니페스트 (manifest)에서 패키지를 누락하면 현재는 ImportError가 발생합니다. 응답에서 목록에 없는 임포트를 표면화(surface)할 수 있어야 합니다. 곧 출시될 예정입니다. 시리즈의 다음 주제는 격리 (Isolation) 입니다. 이제 안전하게 pip install을 할 수 있습니다. 하지만 해당 패키지가 귀하의 AWS 자격 증명 (credentials)을 유출하는 것을 막을 수 있을까요?

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0