⚠️ 주의사항
dify-sandbox-py는 보안 제약을 완화한 도구입니다. 따라서 불특정 다수가 코드를 직접 입력하고 실행할 수 있는 서비스 환경이라면 보안 리스크를 충분히 검토해야 합니다. 내부용 프로젝트나 본인이 직접 관리하는 워크플로우에서 사용하기를 권장합니다.
안녕하세요 오픈네트웍시스템입니다.
이번에는 Dify코드 블럭을 커스텀 하는 방법을 알려드리려고 합니다.
LLM 오케스트레이션 툴인 Dify를 사용하다 보면 '코드(Code) 노드'의 강력함에 감탄하게 됩니다. 하지만 복잡한 데이터 처리를 위해 pandas를 불러오거나 외부 API와 통신하려고 하면 곧바로 벽에 부딪히곤 합니다.
ModuleNotFoundError가 발생하거나, 권한 문제(Operation not permitted)로 실행이 차단되는 경험, 한 번쯤 있으시죠? 오늘은 이 문제를 깔끔하게 해결해 줄 dify-sandbox-py를 소개합니다.
- 공식 샌드박스 API와 호환되는 독립 구현체 (드롭인 교체 가능)
- Python 3.12 + Node.js 20 환경
- 의존성 관리에 UV 사용 → 재시작 시 밀리초 수준의 패키지 설치
- 네트워크 제한 기본 해제 (공식은 기본 차단)
- MIT 라이선스, 개인/소규모 팀 사용 전제로 설계
Dify의 공식 샌드박스는 Go 언어 기반으로 설계되어 있으며, 보안을 위해 seccomp와 chroot 같은 시스템 레벨의 격리 기술을 사용합니다.
보안의 장점: 신뢰할 수 없는 코드가 실행되어도 서버 시스템 전체에 영향을 주지 않습니다.
사용의 단점: 시스템 콜이 제한되어 있어 특정 라이브러리(Numpy 2.0+, Matplotlib 등) 설치가 어렵고, 네트워크 통신도 기본적으로 차단됩니다.
항목 | 공식 샌드박스 | dify-sandbox-py | |
격리 방식 | seccomp + chroot (커널 수준) | 컨테이너 격리만 의존 | |
네트워크 | 기본 차단 | 기본 허용 | |
라이브러리 제한 | syscall 제한으로 일부 차단 | 제한 없음 | |
적합 환경 | 멀티테넌트, 외부 사용자 | 내부용, 셀프호스팅 | |
docker compose stop sandbox 기존 샌드박스를 중지합니다.
기존의docker-compose.yaml 파일의 sandbox 서비스를 찾아 이미지를 교체합니다.
services:
sandbox:
# image: langgenius/dify-sandbox:0.2.10 (기존 설정 주석 처리)
image: svcvit/dify-sandbox-py:latest # 커스텀 이미지로 교체
# ... 나머지 설정 유지프로젝트 볼륨으로 연결된 dependencies/python-requirements.txt 파일에 필요한 패키지를 적어줍니다.
../docker/volumes/sandbox/dependencies/python-requirements.txt
→
pandas
matplotlib
numpy
…
재시작docker compose up -d sandbox
문제 발생 시docker-compose.yaml 에서 이미지 원래대로 되돌린 후
docker compose up -d sandbox
docker compose ps sandbox
다음은 실습으로 넘어가 보겠습니다.
예제 1
감사합니다.
💡
dify-sandbox-py는 보안 제약을 완화한 도구입니다. 따라서 불특정 다수가 코드를 직접 입력하고 실행할 수 있는 서비스 환경이라면 보안 리스크를 충분히 검토해야 합니다. 내부용 프로젝트나 본인이 직접 관리하는 워크플로우에서 사용하기를 권장합니다.