Dify에서 내 맘대로 Python 라이브러리 쓰기: 커스텀 샌드박스(dify-sandbox-py) 구축 가이드
안녕하세요, 오픈네트웍시스템입니다.
최근 LLM 오케스트레이션 툴로 급부상한 Dify를 도입하는 기업이 많아졌습니다. Dify를 사용하다 보면 '코드(Code) 노드'의 강력함에 감탄하게 되는데요. 하지만 복잡한 데이터 처리를 위해 pandas를 임포트하거나 외부 API와 통신하려고 하면 곧바로 벽에 부딪히곤 합니다.
ModuleNotFoundError: No module named 'pandas'
# 또는 외부 API 호출 시...
Operation not permitted이런 에러 때문에 답답하셨던 경험, 한 번쯤 있으시죠? 오늘은 이 문제를 깔끔하게 해결해 줄 오पन소스 프로젝트 dify-sandbox-py를 소개해 드립니다.
🚀 왜 dify-sandbox-py인가요?
Dify의 공식 샌드박스는 Go 언어 기반으로 설계되어 있으며, 강력한 보안을 위해 커널 수준에서 seccomp와 chroot 격리 기술을 사용합니다.
보안상의 장점: 신뢰할 수 없는 코드가 실행되어도 호스트 서버 시스템 전체에 영향을 주지 않습니다.
사용상의 단점: 시스템 콜(Syscall)이 강하게 제한되어 있어 특정 라이브러리(
Numpy 2.0+,Matplotlib등) 설치가 까다롭고, 아웃바운드 네트워크 통신도 기본적으로 차단됩니다.
반면, dify-sandbox-py는 다음과 같은 특징을 가집니다.
드롭인(Drop-in) 교체: 공식 샌드박스 API와 100% 호환되어 설정만 바꾸면 바로 작동합니다.
최신 환경 제공: Python 3.12 + Node.js 20 환경 기반
압도적인 속도: 의존성 관리에
uv를 사용하여, 컨테이너 재시작 시 밀리초(ms) 단위로 패키지를 초고속 설치합니다.네트워크 제한 해제: 공식 샌드박스와 달리 외부 API 통신이 기본적으로 허용됩니다.
라이선스: MIT 라이선스로 내부 시스템 및 소규모 팀에 최적화되어 있습니다.
항목 | 공식 샌드박스 ( | 커스텀 샌드박스 ( | |
격리 방식 | seccomp + chroot (커널 수준) | 컨테이너 격리만 의존 | |
네트워크 | 기본 차단(별도 설정 필요) | 기본 허용(자유로운 API 호출) | |
라이브러리 제한 | Syscall 제한으로 일부 C-확장 모듈 차단 | ( | |
적합 환경 | 멀티테넌트, 외부 사용자 | 내부 프로젝트, 사내 셀프 호스팅(On-Premise) | |
순서
🛠️ 3분 만에 커스텀 샌드박스로 교체하기
Dify를 Docker Compose로 띄워두셨다면, 아래 순서대로 아주 간단하게 교체할 수 있습니다.
STEP 1. 기존 샌드박스 컨테이너 중지
터미널을 열고 Dify 가동 디렉토리에서 기존 샌드박스를 멈춰줍니다.
services:
sandbox:
# image: langgenius/dify-sandbox:0.2.10 (기존 설정 주석 처리)
image: svcvit/dify-sandbox-py:latest # 커스텀 이미지로 교체
# ... 나머지 설정 유지STEP 2. docker-compose.yaml 수정
docker-compose.yaml 파일을 열어 services.sandbox 항목의 이미지를 다음과 같이 변경합니다.
STEP 3. 필요한 Python 패키지 지정
프로젝트 볼륨으로 연결된 python-requirements.txt 파일에 Dify 코드 노드에서 사용하고 싶은 라이브러리를 적어줍니다.
파일 경로 예시:
../docker/volumes/sandbox/dependencies/python-requirements.txtpandas matplotlib numpy requestsSTEP 4. 샌드박스 재시작
설정이 끝났다면 컨테이너를 다시 백그라운드로 실행합니다.
uv덕분에 패키지가 순식간에 설치되는 것을 볼 수 있습니다.docker compose up -d sandbox
💡 문제가 발생하셨나요? 만약 샌드박스가 정상적으로 뜨지 않는다면 원래대로 되돌리는 것도 간단합니다. docker-compose.yaml에서 이미지명을 원래 (langgenius/dify-sandbox:버전)로 복구한 뒤 아래 명령어를 실행하세요.
docker compose up -d sandbox
docker compose ps sandbox
🧪 실습으로 검증하기
자, 이제 샌드박스가 성공적으로 교체되었는지 Dify 워크플로우에서 직접 테스트해 볼 차례입니다.
예제 1
⚠️ 보안 주의사항 (Security Notice)
dify-sandbox-py는 개발 편의성과 확장성을 위해 보안 제약을 완화한 도구입니다. 따라서 불특정 다수의 외부 사용자가 직접 코드를 입력하고 실행할 수 있는 오픈형 서비스 환경이라면 보안 리스크를 충분히 검토해야 합니다.
사내 내부용 프로젝트, 엔터프라이즈 인트라넷 환경, 혹은 신뢰할 수 있는 관리자만 워크플로우를 설계하는 환경에서 도입하시는 것을 강력히 권장합니다.
궁금한 점이나 인프라 구축 중 막히는 부분이 있다면 언제든 댓글이나 엔지니어 팀으로 문의해 주세요. 감사합니다!