주권 AI 스택 구축: 제로부터 POC까지

발행: (2026년 3월 8일 AM 12:12 GMT+9)
7 분 소요
원문: Dev.to

Source: Dev.to

Cover image for Building a Sovereign AI Stack: From Zero to POC

데이터 프라이버시가 가장 중요한 시대에, 클라우드 기반 AI 제공업체에 의존하는 것이 항상 가능한 옵션은 아니다. 규정 준수, 보안, 혹은 단순히 안심을 위해 Sovereign AI Stack—완전히 로컬에 구축되고 자체적으로 제어되는 AI 인프라—을 운영하는 것이 많은 조직의 궁극적인 목표가 되고 있다.

오늘 우리는 이러한 스택에 대한 개념 증명(Proof of Concept, POC)을 구축했다. 오픈소스 도구들을 활용해 사설이며 관찰 가능하고 검색 가능한 AI 환경을 만들었다. 다음은 우리의 여정이다.

아키텍처

우리 스택은 Node.js 애플리케이션에 의해 조정되는 세 가지 핵심 구성 요소로 이루어져 있습니다:

  • AI Serverllama.cpp에서 실행되는 로컬 LLM( OpenAI‑compatible API 제공). 네트워크를 떠나는 데이터 없이 인텔리전스를 제공합니다.
  • Search EngineManticore Search(Docker에서 실행). 경량화된 footprint와 강력한 전체 텍스트 검색 기능을 제공하여 RAG(검색 기반 생성) 에 필수적입니다.
  • ObservabilityAI Observer(Docker에서 실행). AI 상호작용의 트레이스와 메트릭을 캡처합니다.

아키텍처 시각화

┌─────────────────┐        ┌──────────────────┐
│                 │──(1)──▶│ Manticore Search │
│  Orchestrator   │        │     (Docker)     │
│    (Node.js)    │        └──────────────────┘
│                 │        ┌──────────────────┐
│                 │──(2)──▶│  AI Server LLM   │
│                 │        │  (192.168.0.2)   │
│                 │        └──────────────────┘
│                 │        ┌──────────────────┐
│                 │──(3)──▶│   AI Observer    │
└─────────────────┘        │     (Docker)     │
                           └──────────────────┘

                                    (4)

                           (Monitors AI Server)

컴포넌트 상태 흐름

[*] ──▶ Init ──▶ Indexing: Create Table (RT)


              Searching: Documents Added
              /                     \
             /                       \
   Error: No Hits (Retry)      RAG_Construction: Hits Found
           │                              │
          [*]                             ▼
                              Inference: Context + Prompt
                              /                     \
                             /                       \
             Timeout: Model Slow            Success: Answer Generated
                     │                               │
                    [*]                             [*]

구현

1. 기반 설정 (Docker)

우리는 docker‑compose를 사용해 Manticore와 AI Observer를 컨테이너화했습니다. 주요 과제는 네트워킹이었으며, 오케스트레이터(클라이언트)가 컨테이너 외부 AI 서버와 통신할 수 있도록 해야 했습니다. 포트(9308, 9312, 3001) 매핑이 핵심이었습니다.

교훈: HTTP( /sql)를 통한 Manticore의 SQL 인터페이스는 강력하지만, 많은 클라이언트가 기대하는 JSON‑전용 /search 엔드포인트와는 약간 다릅니다. 우리는 클라이언트를 수정해 SQL 응답 구조를 올바르게 파싱하도록 해야 했습니다.

2. 오케스트레이터

간단한 TypeScript 오케스트레이터는 실제 애플리케이션 흐름을 모방합니다:

  • Ingest – 주권 데이터를 Manticore에 인덱싱합니다.
  • Retrieve – Manticore에서 관련 컨텍스트를 검색합니다(MATCH('Ensures data privacy')).
  • Augment – 검색된 컨텍스트와 사용자 프롬프트를 결합합니다.
  • Generate – 결합된 프롬프트를 로컬 LLM에 전송합니다.
  • Observe – 모든 단계를 AI Observer에 기록합니다.

3. 검증 및 테스트

  • 통합 테스트vitest를 사용해 문서가 올바르게 인덱싱되고 검색되는지 확인했습니다(실시간 인덱스 플러시를 이해하고 제로 히트 문제를 해결).
  • 엔드‑투‑엔드 – 전체 파이프라인이 로컬 설정을 이용해 “주권 AI”에 대한 일관된 설명을 생성했습니다.
  • 시각적 검증 – 브라우저 자동화를 통해 AI Observer UI를 확인하고 텔레메트리가 정상적으로 수신되는지 검증했습니다.

Real‑World Experience

가장 눈에 띄는 깨달음은 latency trade‑off였습니다. 우리 로컬 LLM은 포괄적인 답변을 얻는 데 약 18–80 초가 걸렸습니다. 클라우드 API보다 느리지만, 이 트레이드‑오프를 통해 완전한 프라이버시를 확보할 수 있습니다—토큰 비용도 없고, 데이터 유출도 없습니다.

Manticore는 검색에 있어 놀라울 정도로 빠른 성능을 보여주었으며, 종종 밀리초 단위로 결과를 반환해 느린 LLM의 완벽한 파트너가 되었습니다.

결론 및 다음 단계

이 POC는 Sovereign AI Stack이 가능할 뿐만 아니라 접근 가능함을 보여줍니다. Manticore와 AI Observer와 같은 도구를 사용하면 오후에 강력하고 프라이빗한 RAG 파이프라인을 구축할 수 있습니다.

다음 단계

  • 의미 검색을 위한 영구 벡터 스토어 구현.
  • LLM 추론 속도 최적화(양자화, GPU 오프로드).
  • 오케스트레이터 위에 채팅 UI 구축.
0 조회
Back to Blog

관련 글

더 보기 »