DEEIX-Chat
무엇인가
DEEIX Chat은 자체 호스팅 가능한 엔터프라이즈 AI 워크스페이스다. 채팅 프런트엔드, 모델 게이트웨이, 파일 저장·검색, 도구 호출, 사용량 과금, 신원·감사를 각각 별도 제품으로 조립하는 대신 하나의 배포 단위로 묶는다. Go 백엔드 하나가 정적 프런트엔드와 API를 함께 서빙하는 단일 런타임 구조를 취한다.
어떻게 동작하나
백엔드는 내부 경계가 고정되어 있다. `backend/cmd/server`가 실행 진입점이고, `backend/internal/cli`가 프로세스 기동을, `backend/internal/app`이 애플리케이션 조립과 배선을, `backend/internal/transport/http`가 HTTP 경계를 맡는다. 요청은 `application` 유스케이스를 거쳐 소비자 쪽이 정의한 `repository`·`ports` 인터페이스와 `infra` 구현으로 흐른다. 프런트엔드는 정적 자산으로 빌드되어 `frontend/out`에 떨어지고, Go 서비스가 `server.frontend_dist_dir`로 그 디렉터리를 서빙한다. 데이터 계층은 도메인 접두사 테이블을 쓰고, 재무 기록·감사 추적·시스템 이벤트·고성장 벡터 데이터는 별도 진실 원천으로 분리한다. 문서 추출과 OCR은 선택 서비스라 기본 배포에는 들어가지 않는다.
무엇과 다른가
차이는 조립 방식에 있다. 보통 채팅 UI, 라우팅 프록시, 과금, 감사는 서로 다른 프로세스와 서로 다른 설정 체계를 가진다. DEEIX Chat은 이들을 같은 런타임에 넣고 설정을 한 파일로 모은다. `config.yaml`은 서버 URL, 데이터베이스, 캐시, 스토리지, GeoIP, 트레이싱, JWT, 암호화 키 같은 정적 인프라·보안 설정을 담고, 런타임 비즈니스 설정은 데이터베이스에 저장되어 관리자 콘솔에서 다뤄진다. 설정 우선순위는 환경 변수 > `config.yaml` > 내장 기본값이다. 프런트엔드와 백엔드는 `packages/api-contract/`로 연결되며, Go 트랜스포트 계약을 먼저 고치고 Swagger 타입을 재생성해 공유하는 순서를 따른다.
어떻게 쓰나
로컬 개발은 `config.yaml`의 `database.postgres.dsn`, `database.redis.*`, 공개 URL을 환경에 맞게 고친 뒤 워크스페이스 의존성을 설치하고 `pnpm dev`로 프런트엔드와 백엔드를 함께 띄운다. 한쪽만 띄우려면 `pnpm dev:web` 또는 `pnpm dev:api`를 쓴다. 프런트엔드는 `NEXT_PUBLIC_API_BASE_URL`로 API를 호출하며, 값이 없으면 로컬에서는 `localhost:8080`, 동일 출처 배포에서는 현재 출처를 쓴다. 컨테이너 배포는 세 프로필 중 하나를 고른다. SQLite 경량 프로필은 `app` 컨테이너만 띄우고, 기본 프로필은 외부 PostgreSQL·Redis를 전제로 `app`만 띄우며, 전체 프로필은 앱과 PostgreSQL, Redis를 함께 띄운다. 모든 루트 compose 프로필은 `http://localhost:8080`으로 노출되고 저장소 루트의 `config.yaml`을 컨테이너의 `/app/config.yaml`에 마운트한다.
전제와 한계
SQLite와 인프로세스 메모리 캐시 조합은 단일 프로세스에서만 동작한다. 다중 노드나 높은 동시성이 필요한 운영 배포에는 PostgreSQL과 Redis를 쓴다. 개발 환경 기준은 Node.js 20.9 이상, Corepack으로 켜는 pnpm 10.17.0, Go 1.26.8이고, 컨테이너 배포에는 Docker Engine과 Compose v2가 필요하다. 전체 compose 프로필은 `POSTGRES_DSN`, `REDIS_ADDR`, `REDIS_USERNAME`, `REDIS_PASSWORD`를 환경 변수로 넣어 `config.yaml` 값을 덮어쓴다. 기본 compose 파일은 `environment`를 비워 두므로, 환경 변수로 `config.yaml`을 덮어쓰려는 경우가 아니면 그대로 둔다.
관련 논문 5
유사 도구
- onyxLLM 애플리케이션 계층으로, RAG·웹 검색·코드 실행·에이전트를 갖춘 셀프호스팅 AI 채팅 플랫폼이다. 50개 이상 커넥터로 사내 데이터를 색인한다.
- difyLLM 애플리케이션을 워크플로·RAG·에이전트·모델 관리·관측까지 한 워크스페이스에서 만들고, 클라우드나 셀프호스팅으로 배포하는 오픈소스 플랫폼이다.
- WeKnora원시 문서를 수집해 검색 가능한 RAG 지식베이스와 자율 추론 에이전트, 자체 유지 위키로 바꾸는 Go 기반 자체 호스팅 LLM 지식 플랫폼이다.
- open-webuiOllama와 OpenAI 호환 API를 하나의 웹 화면으로 묶는 셀프 호스팅 AI 플랫폼이다. 플러그인·RAG·RBAC를 내장하고 완전 오프라인 실행을 지원한다.
- bifrost23개 이상 LLM 제공자를 하나의 OpenAI 호환 API로 중계하는 Go 기반 AI 게이트웨이다. 5천 RPS에서 요청당 11µs 오버헤드를 추가한다.
- aichat20개 이상 LLM 제공자를 하나의 인터페이스로 묶어 셸 명령 변환, REPL 대화, RAG, 함수 호출을 한 바이너리에서 처리하는 Rust CLI다.