핵심 요점
- Apache 2.0 라이선스, 무료 셀프호스팅 가능 — pip install haystack-ai, 소스는 github.com/deepset-ai/haystack
- 독일에 본사를 둔 deepset이 2019년부터 개발, 처음에는 추출형 질의응답·검색 프레임워크였음 — 검색 증강 생성이 일반적인 용어가 되기 전
- 두 가지 구성 요소: Component(단일 처리 단계: retriever, embedder, generator, converter)와 Pipeline(.add_component()와 .connect() 호출로 명시적으로 연결된 Component 그래프)
- Document Store는 교체 가능한 백엔드 추상화 — Haystack은 테스트용 인메모리 스토어를 제공하며 Elasticsearch, Weaviate, Pinecone 등 벡터 데이터베이스와 통합됨
- 모델 제공업체에 종속되지 않음: OpenAI, Anthropic, Mistral, Cohere, Hugging Face, Google, Azure OpenAI, AWS Bedrock과 통합
- deepset은 Haystack Enterprise Platform과 Haystack Enterprise Starter라는 상용 제품도 판매 — 동일한 오픈소스 코어 위에 시각적 파이프라인 빌더와 매니지드 배포를 더한 유료 계층
📍 한 문장으로
Haystack은 deepset이 만든 오픈소스(Apache 2.0) Python 프레임워크로, 명시적이고 타입이 지정된 Component·Pipeline 추상화로 프로덕션 검색·RAG 파이프라인을 구축하며, 현재 버전은 3.1이다.
💬 쉽게 말하면
대부분의 LLM 라이브러리처럼 함수 호출을 연쇄시키는 대신, Haystack은 retriever·prompt builder·generator 같은 이름 붙은 Component를 .connect() 호출로 명시적으로 Pipeline 객체에 연결하도록 요구한다. 그 결과 데이터 흐름이 체인 속에 숨지 않고 눈에 보이며 테스트 가능해진다.
📌참고: 오픈소스 프레임워크와 deepset의 상용 제품은 별개다: 이 리뷰는 어느 섹션이 명시적으로 "Enterprise Platform"을 언급하지 않는 한, 무료로 셀프호스팅하는 Apache 2.0 코드만을 다룬다.
Haystack이란 무엇인가?
Haystack은 검색·질의응답·검색 증강 생성(RAG) 애플리케이션을 구축하는 오픈소스 Python 프레임워크(Apache 2.0, github.com/deepset-ai/haystack)다. 독일에 본사를 둔 deepset이 유지 관리하며 pip install haystack-ai로 설치한다.
- 2019년 추출형 질의응답 프레임워크로 시작 — 문서 안에서 정확한 답변 구간을 찾는 방식 — 생성형 LLM이 RAG를 주류 패턴으로 만들기 전
- Haystack 2.0을 전후로 현재의 Component/Pipeline 아키텍처로 대폭 재작성되었고, 현재는 버전 3.1(2026-08-24 출시)
- 문서 변환(PDF, HTML, DOCX), 텍스트 분할, embedding, retrieval(키워드 기반 BM25 및 벡터/의미 기반), 생성, 평가를 위한 Component 제공
- Document Store 추상화가 파이프라인 로직을 저장소 백엔드에서 분리 — 파이프라인을 다시 작성하지 않고 인메모리 스토어를 Elasticsearch, Weaviate, Pinecone로 교체 가능
- 로컬 개발과 테스트를 위한 인메모리 문서 저장소를 기본 제공하며, 시작에 외부 데이터베이스가 필요 없음
- 동일 파이프라인 안에서 키워드 retrieval(BM25)과 벡터/의미 기반 retrieval을 모두 지원하며, 둘을 결합한 하이브리드 retrieval도 지원
Haystack의 Pipeline/Component 아키텍처는 어떻게 동작하는가?
Component는 하나의 처리 단계(retriever, embedder, generator 등)이며, Pipeline은 .add_component()와 .connect()의 명시적 호출로 연결된 Component의 방향 그래프다. 단계 간 데이터 흐름이 체인 객체 속에 숨지 않고 코드에서 그대로 보인다.
- 파이프라인은 YAML로 직렬화할 수 있다 — Python으로 만든 파이프라인을 저장·버전 관리하고, 이를 만든 코드를 다시 실행하지 않고도 다시 불러올 수 있다
- 분기와 병합은 그래프 모델에 기본 내장되어 있다 — 하나의 retriever 출력이 서로 다른 두 generator에 흘러가거나, 두 retriever가 하나의 ranker로 흘러갈 수 있으며, 별도의 접합 코드가 필요 없다
- 연결이 명시적이므로, 깨진 파이프라인(타입 불일치, 연결 누락)은 실행 중 호출 스택 깊은 곳에서 실패하는 대신 파이프라인 구성 시점에 명확한 오류로 실패한다
Haystack은 LangChain·LlamaIndex와 어떻게 다른가?
Haystack, LangChain, LlamaIndex 모두 코드 우선 Python 프레임워크로, 오픈소스 코어에는 시각적 빌더가 없다 — 차이는 핵심 추상화에 있다. Haystack은 타입이 지정된 Component로 이뤄진 명시적 Pipeline 그래프를 중심으로 모든 것을 구성한다. LlamaIndex는 데이터 위에 구축한 Index를 중심으로, 그 위에 Retriever와 QueryEngine 객체를 둔다. LangChain은 chain을 중심으로, LangGraph 확장에서는 에이전트를 위한 state graph를 중심으로 구성한다.
Haystack은 RAG와 프로덕션 검색을 지원하는가?
그렇다 — 검색 증강 생성과 프로덕션 검색은 Haystack의 핵심 사용 사례이며, 이 프레임워크는 동일한 파이프라인 안에서 키워드 검색, 벡터 검색, 하이브리드 retrieval을 지원한다.
- RAG 파이프라인: retriever(BM25, 벡터, 또는 하이브리드)가 관련 문서를 prompt builder에 전달하고, 이것이 다시 generator(LLM 호출)에 전달된다 — 이 프레임워크가 용어가 생기기도 전에 앞서 다뤘고 지금은 직접 겨냥하는 표준 패턴이다
- Retriever: BM25 키워드 retrieval과 embedding 기반(벡터/의미) retrieval 모두 1급 기능으로 지원되며, 하이브리드 retrieval은 둘을 결합해 병합된 결과를 재순위화한다
- Document Store: 개발용으로 인메모리 스토어가 기본 제공되며, 프로덕션 배포는 동일한 Component 인터페이스를 통해 Elasticsearch, Weaviate, Pinecone 등 지원되는 벡터 데이터베이스에 연결된다
- 에이전트: Haystack에는 에이전트 Component가 포함되어 있어, 고정된 순서를 따르는 대신 모델이 다음에 어떤 도구나 파이프라인 단계를 호출할지 결정하게 할 수 있다
- 평가: Haystack은 레이블이 붙은 데이터셋을 기준으로 retrieval과 생성 품질을 측정하는 평가용 Component를 제공한다 — 관련성이 측정 가능해야 하는 프로덕션 검색에서 중요하다
첫 Haystack 파이프라인은 어떻게 만드는가?
최소한의 RAG 파이프라인에는 retriever, prompt builder, generator라는 연결된 세 Component가 필요하며, 이를 Pipeline 객체에 연결하고 쿼리로 실행한다.
- 1패키지 설치: pip install haystack-ai.
- 2필요한 요소 임포트: from haystack import Pipeline, Document; from haystack.components.generators.chat import OpenAIChatGenerator; from haystack.components.retrievers import InMemoryBM25Retriever; from haystack.document_stores.in_memory import InMemoryDocumentStore; from haystack.components.builders import ChatPromptBuilder; from haystack.utils import Secret.
- 3document store를 생성하고 문서를 기록: document_store = InMemoryDocumentStore(), 그다음 document_store.write_documents([Document(content="..."), ...]).
- 4Component 생성: retriever = InMemoryBM25Retriever(document_store=document_store), prompt_builder = ChatPromptBuilder(template=prompt_template, required_variables="*"), llm = OpenAIChatGenerator(api_key=Secret.from_env_var("OPENAI_API_KEY"), model="gpt-4o-mini").
- 5파이프라인 조립: rag_pipeline = Pipeline(), 그다음 rag_pipeline.add_component("retriever", retriever), rag_pipeline.add_component("prompt_builder", prompt_builder), rag_pipeline.add_component("llm", llm).
- 6연결 배선: rag_pipeline.connect("retriever", "prompt_builder.documents") 및 rag_pipeline.connect("prompt_builder", "llm").
- 7실행: results = rag_pipeline.run({"retriever": {"query": question}, "prompt_builder": {"question": question}}).
from haystack import Pipeline, Document
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.components.retrievers import InMemoryBM25Retriever
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.builders import ChatPromptBuilder
from haystack.utils import Secret
document_store = InMemoryDocumentStore()
document_store.write_documents([
Document(content="My name is Jean and I live in Paris."),
Document(content="My name is Mark and I live in Berlin."),
Document(content="My name is Giorgio and I live in Rome."),
])
retriever = InMemoryBM25Retriever(document_store=document_store)
prompt_builder = ChatPromptBuilder(template=prompt_template, required_variables="*")
llm = OpenAIChatGenerator(api_key=Secret.from_env_var("OPENAI_API_KEY"), model="gpt-4o-mini")
rag_pipeline = Pipeline()
rag_pipeline.add_component("retriever", retriever)
rag_pipeline.add_component("prompt_builder", prompt_builder)
rag_pipeline.add_component("llm", llm)
rag_pipeline.connect("retriever", "prompt_builder.documents")
rag_pipeline.connect("prompt_builder", "llm")
results = rag_pipeline.run({"retriever": {"query": question}, "prompt_builder": {"question": question}})Haystack을 사용해 보려면 OpenAI API 키가 필요한가?
위 예제는 OpenAIChatGenerator를 사용하지만, Haystack에는 Hugging Face, Anthropic, Mistral, Cohere, Google, Azure OpenAI, AWS Bedrock용 generator Component도 있고 로컬 모델 통합도 존재한다 — 특정 모델 제공업체에 묶이지 않는다.
시작하는 데 벡터 데이터베이스가 필요한가?
아니다. InMemoryDocumentStore는 외부 서비스가 필요 없으며 로컬에서 파이프라인을 만들고 테스트하기에 충분하다. 프로덕션 규모로 전환할 때만 Elasticsearch, Weaviate, Pinecone 등으로 교체하면 된다.
Haystack은 누구에게 적합한가?
Haystack은 프로덕션 검색·RAG 파이프라인에 대한 명시적 제어가 필요하고 Python 작성에 익숙한 팀에 적합하다 — 오픈소스 코어 자체는 노코드나 시각적 도구가 아니다.
Haystack vs. 대안
아래 세 프레임워크 모두 오픈소스이고 Python 중심이며 활발히 유지 관리된다 — 선택은 팀이 파이프라인을 어떻게 사고하고 싶은지에 어떤 핵심 추상화가 맞는지에 달려 있다.
도구 | 핵심 추상화 | 라이선스 | 적합한 용도 |
|---|---|---|---|
| Haystack | 타입 지정 Component의 Pipeline | Apache 2.0 | 프로덕션 검색 / 측정 가능한 RAG |
| LlamaIndex | Index + Retriever + QueryEngine | MIT | 빠른 데이터 수집·인덱싱 |
| LangChain | Chains / LangGraph state graph | MIT | 범용 LLM 앱·에이전트 접착 코드 |
Haystack 평가 시 흔한 실수
이런 실수들은 Haystack을 호스팅형 SaaS 제품으로 취급하거나, 다른 프레임워크의 추상화를 직접 대체하는 것으로 취급하는 데서 비롯된다.
자주 묻는 질문
Haystack이란 무엇인가?
Haystack은 독일에 본사를 둔 deepset이 만든 오픈소스 Python 프레임워크로, 검색·질의응답·RAG 파이프라인을 구축하는 데 쓰인다. Apache 2.0 라이선스이며 pip install haystack-ai로 설치한다.
Haystack은 누가 만드는가?
독일에 본사를 둔 deepset이다. deepset은 검색 증강 생성이 일반적인 용어가 되기 전인 2019년, 추출형 질의응답 프레임워크로 Haystack을 시작했다.
Haystack은 어떤 라이선스로 배포되는가?
Apache License 2.0이다. 소스코드는 github.com/deepset-ai/haystack에 있으며 자유롭게 사용·수정·셀프호스팅할 수 있다.
Haystack의 현재 버전은 무엇인가?
Haystack 3.1로, 2026년 8월 24일 출시되었다. 이 프레임워크는 Haystack 2.0을 전후로 현재의 Component/Pipeline 아키텍처로 대폭 재작성되었다.
Haystack에서 Component와 Pipeline의 차이는 무엇인가?
Component는 하나의 처리 단계다 — retriever, embedder, prompt builder, 또는 generator. Pipeline은 .add_component()와 .connect()의 명시적 호출로 연결된 Component의 그래프이며, 파이프라인 실행은 의존성 순서로 이 그래프를 순회한다.
Haystack은 LlamaIndex와 어떻게 다른가?
Haystack은 Pipeline 그래프에 연결된 명시적이고 타입이 지정된 Component를 중심으로 파이프라인을 구성한다. LlamaIndex는 데이터 위에 Index를 구축하고 Retriever와 QueryEngine을 통해 조회하는 것을 중심으로 구성한다. 데이터 인덱싱을 시작하는 데는 대체로 LlamaIndex가 더 빠르며, Haystack의 명시적 그래프는 프로덕션 파이프라인에 더 높은 가시성과 제어력을 제공한다.
Haystack은 LangChain과 어떻게 다른가?
둘 다 코드 우선 Python 프레임워크로, 오픈소스 코어에는 시각적 빌더가 없다. LangChain은 chain을 중심으로, LangGraph를 통해 에이전트를 위한 state graph를 중심으로 구성된다. Haystack은 타입이 지정된 Component의 Pipeline을 중심으로 구성되며, retrieval과 검색을 범용 체인의 한 고리가 아니라 1급이면서 측정 가능한 관심사로 다룬다.
Haystack은 특정 벡터 데이터베이스가 필요한가?
아니다. Haystack은 개발용으로 인메모리 Document Store를 제공하며, Elasticsearch, Weaviate, Pinecone를 포함한 여러 벡터 데이터베이스·검색 백엔드와 동일한 Component 인터페이스로 통합된다 — 백엔드를 바꿔도 파이프라인을 다시 작성할 필요가 없다.
deepset의 Haystack Enterprise Platform이란 무엇인가?
오픈소스 Haystack 프레임워크 위에 구축된 deepset의 유료 상용 제품으로, 시각적 파이프라인 빌더와 매니지드 또는 셀프호스팅 배포 옵션을 추가한다. 이 리뷰가 다루는 무료·셀프호스팅형 Apache 2.0 오픈소스 프레임워크와는 별개다.
