Cerebras Systems는 사내 지식 베이스를 처음부터 새로 만들지 않고, 이미 운영 중인 도구들이 있는 자리에서 직접 수집하는 방식으로 3개월 만에 하루 15,000건의 질문 트래픽을 처리하는 시스템을 만들었다고 공개했습니다. 이 글은 긱뉴스에 공유된 사내 사례를 바탕으로, 분산된 엔터프라이즈 자산을 한 곳으로 가져오지 않고도 통합 검색을 구현하는 접근을 정리합니다.
왜 "이동하지 않고 수집"인가
대부분의 사내 검색 시스템 구축은 데이터 마이그레이션에서 시작합니다. Slack 채널, Git 저장소, Notion 페이지, 사내 데이터베이스를 한 군데로 옮긴 뒤 색인화하는 방식이죠. Cerebras의 Knowledge 팀은 이 단계에서 가장 큰 비용이 발생한다는 점을 문제로 보았습니다. 데이터가 움직이면 권한 모델이 깨지고, 동기화 지연이 생기고, 원본과의 단절감이 사용자 불만으로 이어집니다.
그래서 그들은 모든 데이터를 한 도구로 옮기는 대신, 각 시스템에 이미 존재하는 보존 모델과 메타데이터를 그대로 둔 채 공통 스키마의 Postgres 임베딩 테이블에만 색인을 만드는 쪽을 선택했습니다. 색인은 어디로 가지 않고, 검색만 한 곳으로 옵니다.
Postgres 임베딩 테이블 구조
핵심 테이블은 두 가지입니다. 원본을 가리키는 source 행과 그 안의 청크 단위 임베딩을 저장하는 chunk 행입니다. 권한과 출처 추적은 원본 시스템이 그대로 책임을 지고, 임베딩 테이블은 검색과 랭킹만 담당합니다.
CREATE TABLE source (
id BIGSERIAL PRIMARY KEY,
system TEXT NOT NULL, -- slack / github / notion / postgres
external_id TEXT NOT NULL, -- 원본 시스템의 메시지/문서 ID
url TEXT,
updated_at TIMESTAMPTZ NOT NULL,
UNIQUE (system, external_id)
);
CREATE TABLE chunk (
id BIGSERIAL PRIMARY KEY,
source_id BIGINT REFERENCES source(id) ON DELETE CASCADE,
position INT NOT NULL,
content TEXT NOT NULL,
embedding VECTOR(1024) NOT NULL, -- pgvector / vchord
tsv TSVECTOR,
updated_at TIMESTAMPTZ NOT NULL
);
CREATE INDEX chunk_embedding_idx ON chunk USING hnsw (embedding vector_cosine_ops);
CREATE INDEX chunk_tsv_idx ON chunk USING GIN (tsv);
수집 파이프라인 — 원본 자리에 그대로 두기
수집기는 각 시스템의 변경 이벤트에만 반응합니다. Slack은 Events API의 message_changed, GitHub는 webhook의 push/issues, Notion은 pages.update를 받아 청크로 잘라 임베딩을 계산하고 Postgres에 upsert합니다. 원본 문서가 삭제되면 ON DELETE CASCADE로 색인도 함께 사라집니다.
def ingest(event):
src = upsert_source(event.system, event.external_id, event.url, event.updated_at)
chunks = chunker.split(event.body)
for pos, text in enumerate(chunks):
emb = embedder.embed(text)
db.execute("""
INSERT INTO chunk (source_id, position, content, embedding, tsv, updated_at)
VALUES (%s, %s, %s, %s, to_tsvector('simple', %s), now())
ON CONFLICT (source_id, position) DO UPDATE
SET content = EXCLUDED.content,
embedding = EXCLUDED.embedding,
tsv = EXCLUDED.tsv,
updated_at = EXCLUDED.updated_at
""", (src.id, pos, text, emb, text))
권한은 원본 시스템이 결정
검색 결과는 임베딩 유사도 순으로 랭킹되지만, 실제로 사용자에게 노출할지는 원본 시스템의 ACL로 다시 검증합니다. Slack 채널은 멤버십, GitHub는 팀 레포 접근 가능 여부, Notion은 페이지 공유 범위를 그대로 따릅니다. Postgres 안에 권한을 복제하지 않으므로 권한 표면이 늘어나지 않습니다.
def search(query, user):
emb = embedder.embed(query)
rows = db.execute("""
SELECT c.id, s.system, s.url, c.content, 1 - (c.embedding <=> %s) AS score
FROM chunk c JOIN source s ON s.id = c.source_id
ORDER BY c.embedding <=> %s LIMIT 50
""", (emb, emb)).fetchall()
# 원본 시스템 ACL로 후필터링
allowed = [r for r in rows if acl.allows(user, r.system, r.url)]
return rerank(query, allowed)[:10]
3개월 만에 15,000 Q/일 — 무엇이 효과를 만들었나
Cerebras는 출시 3개월 만에 하루 15,000건의 질문을 처리했다고 합니다. 그중 상당수가 자동화 파이프라인과 에이전트에서 발생했다는 점이 인상적입니다. 사람만이 검색하는 게 아니라, 코드가 생성한 작업 로그를 다른 코드가 다시 찾는 패턴이 사내에서 빠르게 자리잡았기 때문입니다.
인덱스를 단일 시스템에 두고 권한은 원본에 남기는 이 패턴은, AI 에이전트가 사내 자산을 직접 활용해야 하는 조직일수록 설득력을 가집니다. 모든 것을 한 플랫폼으로 통합하려 시도하기보다, 검색만 한 곳에 모으는 발상의 전환이 비용과 운영 부담을 동시에 줄여줍니다.
도입 시 실전 팁
- 처음에는 가장 자주 묻는 두세 가지 시스템(보통 Slack과 코드 저장소)만 연결하세요. 임베딩 비용과 운영 부담이 선형이 아닌 로그적으로 증가합니다.
- 청크 크기는 시스템 특성에 맞춰 다르게 — Slack 메시지는 200~400 토큰, 코드/PR은 함수 또는 파일 단위, 문서는 헤딩 단위가 대체로 잘 동작합니다.
- 재색인 주기는
updated_at차분 비교로 결정합니다. 15분 사이의 동일 청크는 스킵해 임베딩 API 비용을 절약할 수 있습니다. - 검색 로그를 보존하면 "질문은 많은데 답이 없는 영역"이 자연스럽게 드러납니다. 그 영역이 곧 다음 임베딩 대상입니다.
정리
Cerebras의 사례는 "데이터를 가져온다"가 아니라 "검색만 모은다"는 선택이 사내 지식 베이스를 빠르게 만들 수 있다는 점을 잘 보여줍니다. Postgres 임베딩, 시스템별 이벤트 기반 수집, 원본 ACL 위임 — 이 세 가지 조합이면 데이터 양이 늘어도 권한 표면과 동기화 부담이 늘지 않습니다. AI 에이전트가 사내 자산을 더 많이 읽고 쓸수록, 이런 구조의 가치가 더 커질 것입니다.
원문 출처: 긱뉴스 — Cerebras가 사내 지식 베이스를 구축한 방법
📰 원본 출처 · https://news.hada.io/topic?id=31850 (#N=31850)
이 글은 GeekNews(긱뉴스)에 게제된 글을 기반으로 작성되었습니다. 원본의 라이선스와 저작권은 원작자에게 있습니다.
'AI 뉴스' 카테고리의 다른 글
| 개발자를 위한 데이터 도구 지형 가이드 — 수집·저장·처리·활용 한 번에 잡기 (0) | 2026.07.28 |
|---|---|
| Show GN: comux - AI 코딩 에이전트를 위한 tmux — 단일 엔드포인트로 Claude Code·Codex 세션을 한곳에서 (1) | 2026.07.28 |
| telepty — 여러 머신의 AI 에이전트 세션을 한곳에서 지휘하는 컨트롤 플레인 (0) | 2026.07.28 |
| CodeAlmanac - AI 코딩 에이전트를 위한 코드베이스 위키 — 코드베이스 전체를 한 번에 이해시키는 검색 인프라 (1) | 2026.07.28 |
| 에이전트를 22개까지 늘렸다가 17개로 줄인 이야기 — AI 코딩 에이전트 정리와 운영 원칙 (0) | 2026.07.27 |