하루가 다르게 진화하는 LLM 시장은 그야말로 폭풍 속 한가운데에 있는 듯한 느낌을 줍니다. 새로운 모델과 기술이 쏟아져 나오는 가운데, 많은 개발자들이 이 변화의 속도에 압도되곤 합니다. 그러나 중요한 것은 단순히 이 변화의 속도를 따라가는 것이 아니라, 빠른 변화 속에서도 현명하게 대응할 수 있는 전략과 도구를 갖추는 것이라 생각합니다.
개발자 관점에서 매일 새롭게 등장하는 기술을 효과적으로 활용하고, 빠르게 PoC(Proof of Concept)를 진행하며 이를 서비스에 녹여내는 것이 개발자에게 더욱 중요해지고 있습니다. 이를 위해서는 효율적인 구현과 신속한 실험이 가능한 환경이 필수적입니다.
최근, 저는 이러한 고민을 해결해 줄 혁신적인 도구를 발견했습니다. LLM 기반 프로젝트의 PoC를 빈번하게 진행하면서, 기존에는 LangChain이나 LlamaIndex 같은 라이브러리를 활용하고, RAG(VectorDB 설정, 프롬프트 엔지니어링 등)를 직접 구현하는 과정에서 많은 시간과 노력이 필요했습니다. 하지만 오늘 소개할 Dify는 이 모든 과정을 획기적으로 단순화해, 개발 생산성을 최소 3배 이상 향상해 주었습니다.
Dify
Dify는 LLM 애플리케이션 개발을 위한 강력한 오픈소스 개발 플랫폼입니다. 이 도구는 AI 애플리케이션을 만드는 복잡한 과정을 단순화하여, 개발자들이 아이디어에서 실제 구현까지의 시간을 획기적으로 단축시킬 수 있게 해 줍니다.
주요 특징은 다음과 같습니다:
- No-Code/Low-Code 접근방식: 직관적인 웹 인터페이스를 통해 복잡한 AI 기능을 구현할 수 있습니다. 프롬프트 엔지니어링, 데이터 처리, API 통합 등을 코드 작성 없이 구현할 수 있습니다.
- RAG(Retrieval-Augmented Generation) 지원: 문서, PDF, 웹페이지 등 다양한 데이터 소스를 쉽게 통합하고 관리할 수 있습니다. Vector DB 설정부터 데이터 임베딩까지 모든 과정이 자동화되어 있어, 지식 기반 AI 애플리케이션을 빠르게 구축할 수 있습니다.
- 다양한 LLM 지원: OpenAI의 GPT 시리즈부터 Anthropic의 Claude, Google의 Gemini까지 다양한 LLM을 지원합니다. 필요에 따라 모델을 쉽게 전환하거나 결합할 수 있어, 각 모델의 장점을 최대한 활용할 수 있습니다.
- 간편한 모니터링과 분석: 대화 기록, 토큰 사용량, 응답 시간 등 다양한 지표를 실시간으로 모니터링할 수 있습니다. 이를 통해 애플리케이션의 성능을 지속적으로 최적화할 수 있습니다.
이러한 특징들은 Dify를 단순한 개발 도구 이상의 가치를 제공하는 플랫폼으로 만들어주고 있습니다. 특히 빠른 프로토타이핑이 필요한 PoC 단계에서, 개발자들이 아이디어에 더 집중할 수 있게 해주는 든든한 동반자가 되어주죠.
Dify를 활용한 간단 챗봇 구축
이러한 Dify의 힘에 대해 알아보기 위해, 제가 직접 langchain과 llamaindex를 활용해 만든 현대자동차 챗봇 프로젝트를 dify를 활용해 간단하게 구현하는 과정을 보겠습니다.
1. RAG를 위한 정보 구축
문서 업로드
- 우선, 차량 사용 설명서를 LLM이 활용할 수 있도록 VectorDB로 구축해야 합니다. Dify에서는 지식 창을 통해 원하는 문서를 손쉽게 업로드할 수 있습니다.
임베딩 및 저장
- 문서를 업로드하면 Dify가 자동으로 텍스트를 추출하고, VectorDB에 저장할 준비를 합니다.
- 사용자는 embedding 모델과 청크 크기(Chunk Size) 등 여러 설정을 직접 조정할 수 있습니다.
- 특히, 청크 진행 상황을 실시간으로 확인할 수 있다는 점이 큰 장점입니다.
- 또한, 다양한 검색 방식을 선택할 수 있어 최적의 검색 환경을 구축할 수 있습니다.
이처럼 간단한 과정만으로 차량 사용 설명서를 VectorDB로 구축할 수 있습니다.
2. LLM 워크플로우 구축
입력 정의
- LLM 프로덕트에서 사용자로부터 입력받을 값을 정의합니다.
- 차량 챗봇의 경우, 사용자의 질문을 입력으로 받아야 합니다.
- Dify에서는 다양한 자료형을 인풋으로 지원하며, 필요한 만큼의 입력값을 설정할 수 있습니다.
지식 검색
- 사용자의 질문을 받으면, 현대자동차의 설명서에서 관련 내용을 검색해야 합니다.
- 앞서 구축한 지식 정보를 연결하여 검색 기능을 활성화합니다.
- 이 과정이 RAG의 핵심 단계이며, Dify를 활용하면 손쉽게 구현할 수 있습니다.
LLM 적용
- 사용자의 질문과 관련된 설명서 내용을 확보한 후, 이를 LLM에 입력해 적절한 답변을 생성해야 합니다.
- Dify에서는 프롬프트 편집 기능을 통해 인풋과 아웃풋을 쉽게 구성할 수 있습니다.
- 또한, 다양한 LLM 모델의 파라미터를 한 곳에서 설정할 수 있습니다.
출력값 정의
- 최종 결과로 원하는 아웃풋을 정의합니다.
- 챗봇의 경우, LLM이 생성한 답변을 출력값으로 설정하면 됩니다.
테스트
- 워크플로우 구축 시, 수많은 테스트와 프롬프트 엔지니어링을 거쳐야 할 겁니다. Dify에서는 현재 구축된 워크플로우를 간단하게 실행시켜 결괏값을 살펴볼 수 있습니다.
- 여기서 Dify의 또 하나의 장점은, 워크플로우 내의 모든 노드들에 대해서 출력값을 트레이싱할 수 있다는 점입니다. 코드로 구현했다면 이 모든 순간들을 일일이 로깅하여 출력해야 했으며, 이들을 추적하며 살펴보기에도 복잡했을 테지만, 심플한 UI 속에서 이 모든 것들을 추적할 수 있도록 해줍니다.
API 배포
개인적으로 Dify의 가장 큰 장점은 API 엔드포인트를 간편하게 생성할 수 있다는 점입니다.
- 구축한 워크플로우는 API 형태로 배포할 수 있습니다.
- 각 워크플로우별로 고유한 API Key가 생성되며, 이 Key를 사용해 외부 서비스에서 해당 워크플로우를 호출할 수 있습니다.
- 다양한 워크플로우를 구축해 두고 필요할 때마다 API를 호출하면 되므로, MLOps 및 LLMOps 관점에서 초기 개발 시간을 획기적으로 단축할 수 있습니다.
앱 UI 생성
- API까지 배포하고 서비스에 연결하기 전, 팀원들이나 유저에게 사전 테스트를 진행해 볼 순간이 있을 수 있습니다. Dify는 이를 위해 워크플로우에 입력하고 출력받는 간단한 앱 대시보드를 지원해 주고 있습니다. 해당 링크만 있다면 언제든지 워크플로우에 대한 결과물을 함께 공유하고 테스트해 볼 수 있죠. 기존에는 Streamlit이나 gradio와 같은 툴을 활용해서 데이터 사이언티스트 분들이 일일이 대시보드를 구축해서 공유하곤 했는데, 이러한 과정들이 생략될 수 있다는 것이죠.
넘쳐나는 기능 및 확장성
- Dify의 워크플로우에서는 위와 같이 활용할 수 있는 노드들과 사전에 정의된 툴들이 매우 다양합니다. 꽤나 사적이고 복잡한 프로젝트가 아니라면 Dify로 모두 충당할 수 있을 정도라 생각이 듭니다. 만약 Dify에서 지원해 주지 않는 툴이나 노드가 있다면, HTTP 호출 노드를 활용해서 구현된 api를 연결시킬 수도 있으니 사실상 99% 이상은 다 커버할 수 있지 않을까 싶습니다.
마무리
Dify만 있으면 모든 게 다 가능한가? - 네니오
Dify는 분명 강력한 도구이지만, 모든 상황에 적합한 만능 솔루션은 아닙니다. 특히 아래와 같은 경우에는 한계가 있을 수 있습니다:
- LLM 모델 자체를 연구하는 집단이나 커스텀 모델을 적용해야 하는 경우
- 매우 복잡한 비즈니스 로직이나 특수한 보안 요구사항이 있는 경우
(dify는 오픈소스이므로 내부 서버 직접 설치해 구동을 할 수 있기는 합니다만, 특수한 보안이 중요한 집단에서는 이러한 오픈소스 자체를 쉽게 신뢰하기는 어려울 것입니다.) - 대규모 트래픽을 처리해야 하는 프로덕션 환경
(dify가 지원해 주는 api 배포 기능은 대규모 트래픽까지 처리해 주지 못할 가능성이 큽니다.) - AI 및 개발에 대한 전반적인 개념이 없는 경우
(워크플로우에는 수많은 파라미터 값들이 있습니다. 이 값들을 어떻게 줄지는 AI 개발자가 프로덕트 성격에 따라 직접 판단할 수 있어야 합니다.)
하지만 빠른 프로토타이핑과 PoC 단계에서는 Dify가 제공하는 장점이 단점을 크게 상회합니다. 개발 시간을 단축하고 아이디어를 빠르게 검증할 수 있다는 점에서, 초기 단계의 LLM 프로젝트에는 이 만한 도구가 없다고 생각합니다.
앞으로의 구현력, 그리고 개발자의 역할 변화
Dify와 같은 LLMOps 툴을 활용하면, 기존에는 며칠에서 몇 주가 걸리던 챗봇 프로토타입을 단 몇 시간 만에 완성할 수 있습니다. 이는 같은 시간 동안 더 많은 실험을 진행하고, 신속하게 피드백을 받아 최적의 결과를 배포할 수 있도록 해줍니다.
하지만 이것은 단순히 구현 시간이 줄어드는 데서 끝나지 않습니다. 개발자들은 이제 반복적인 구현 작업에서 벗어나 더 넓은 시야를 가질 수 있게 되었습니다. 이를 통해 UI 디자인, 서비스 기획, 로드맵 설계 등 다양한 영역에서 더 깊이 있는 참여가 가능해지고 있죠.
앞으로 개발자에게 요구되는 역량도 변화할 것입니다. 단순한 구현 능력을 넘어, 프로덕트의 본질적 가치와 사용자 경험을 더욱 풍부하게 만드는 기회가 열리고 있습니다. 어쩌면, 이 변화는 이미 시작되었는지도 모릅니다. 이제 개발자들은 "어떻게 만들 것인가"가 아닌 "무엇을 만들 것인가"에 집중할 수 있는 시대가 된 것 같습니다.