데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
Dify는 LLM 기반 애플리케이션을 빠르게 개발, 배포, 운영할 수 있는 오픈소스 플랫폼입니다. 복잡한 LLM 워크플로우, RAG, 에이전트, 모니터링 등을 하나의 통합 인터페이스에서 관리할 수 있습니다.
문서/DB에서 검색한 컨텍스트를 LLM에 주입하여 정확도와 최신성을 확보. 벡터 저장소, 문서 파서, 재순위화 내장.
ReAct / Function Calling 기반 에이전트로 도구 호출, 다중 에이전트 오케스트레이션, 메모리 관리.
드래그 앤 드롭으로 LLM 호출, 조건 분기, 변환, 외부 API 연동 등 복잡한 파이프라인 구성.
기존 대안(LangChain, Flowise, custom FastAPI)과 비교한 Dify의 강점:
| 항목 | Dify | LangChain | Flowise |
|---|---|---|---|
| UI 기반 워크플로우 | ✅ 내장 | ❌ (별도 툴 필요) | ✅ |
| RAG 파이프라인 | ✅ 원클릭 | ✅ (코드 작성) | ✅ 기본 |
| 에이전트/도구 | ✅ 내장 | ✅ (복잡) | ⚠️ 제한적 |
| 배포 & 모니터링 | ✅ 내장 | ❌ (직접 구성) | ⚠️ 기본 |
| 토큰/비용 관리 | ✅ 대시보드 | ❌ | ❌ |
💡 핵심 — Dify는 LLM 애플리케이션 전체 라이프사이클을 코드 최소화로 운영할 수 있게 해줍니다. MLOps/E2E 테스트, 버전 관리, 로깅까지 포함되어 있어 실무 도입 부담이 낮습니다.
Dify의 내부 아키텍처는 다음과 같은 흐름으로 동작합니다. 사용자 요청부터 LLM 응답까지의 데이터 경로를 이해하는 것이 중요합니다.
핵심 컴포넌트: App(LLM 설정 + 프롬프트 템플릿), Dataset(문서/벡터 인덱스),
Workflow(노드 그래프), Agent(도구 + 메모리 + 추론), Log(추적/비용).
# 최신 버전 클론
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d
실행 후 http://localhost:8080 접속 → 관리자 계정 생성.
1. 데이터셋 생성: Settings → Datasets → "New Dataset" → 텍스트 파일 업로드.
2. 앱 생성: Studio → "Create App" → 텍스트 생성 → 모델(gpt-4, claude 등) 선택.
3. RAG 연결: App 설정 → "Context" → 방금 만든 데이터셋 연결.
import requests
API_KEY = "app-xxxxxxxxxxxxxxxx" # Dify App → API Access → 복사
BASE_URL = "http://localhost:8080/v1"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"inputs": {},
"query": "회사의 휴가 정책은 무엇인가요?",
"response_mode": "blocking",
"user": "tester-001"
}
resp = requests.post(f"{BASE_URL}/chat-messages", json=payload, headers=headers)
print(resp.json()["answer"])
⚠️ 주의 — API Key는 앱별로 발급되며 절대 외부에 노출하지 마세요. 프로덕션에서는 response_mode를 streaming으로 설정하여 SSE로 처리하는 것이 좋습니다.
Dify의 주요 환경 변수 및 설정값입니다. .env 파일에서 수정 가능합니다.
| 변수명 | 설명 | 기본값 |
|---|---|---|
MODEL_PROVIDER_ENDPOINT |
LLM API 엔드포인트 (OpenAI, Anthropic 등) | https://api.openai.com |
VECTOR_STORE_TYPE |
벡터 DB 종류 (qdrant, weaviate, milvus, pgvector) | qdrant |
DATASET_MAX_TOKENS |
문서 청크당 최대 토큰 수 | 1000 |
LOG_LEVEL |
로깅 레벨 (debug, info, warn, error) | info |
SECRET_KEY |
암호화 및 세션 서명용 키 | (랜덤 생성) |
AGENT_MAX_ITERATIONS |
에이전트 최대 루프 횟수 | 10 |
⚠️ 문제 1: LLM 응답이 느리거나 타임아웃
→ .env에서 LLM_TIMEOUT 값을 늘리거나 (기본 60초), OpenAI의 max_tokens를 줄이세요. 스트리밍 모드 사용도 권장.
⚠️ 문제 2: RAG 검색 결과가 부실함
→ 청크 크기(DATASET_MAX_TOKENS)를 500~800으로 낮추고, 오버랩(CHUNK_OVERLAP)을 50~100으로 설정. 재순위화(Re-rank) 모델을 활성화하세요.
⚠️ 문제 3: 에이전트가 도구를 잘못 호출함
→ 도구 설명(description)을 더 구체적으로 작성하고, AGENT_MAX_ITERATIONS를 5로 제한하여 사이클 방지. Function Calling 지원 모델(gpt-4, claude-3)을 사용하세요.
💡 팁 — 프로덕션 배포 시 PostgreSQL + Qdrant 조합을 권장. Redis는 세션/캐싱용으로 필수. Kubernetes 위에 Helm chart로 배포 가능 (공식 차트 제공).