TrendShift · Voice AI Platform

Dograh — 오픈소스
음성 AI 에이전트 플랫폼

Vapi의 오픈소스 대안. 드래그앤드롭으로 전화 받는·거는 AI 비서를 2분 만에 만들고, FastAPI + Next.js + Pipecat 풀스택을 셀프호스팅한다.

dograh-hq/dograh · Python + TypeScript · BSD-2-Clause 2026-05-20 · TrendShift 23위
00 — 들어가며Context

먼저, 음성 AI 에이전트가 뭔가?

개념부터 천천히.

요즘 콜센터에 전화하면 "안녕하세요, AI 상담사 OO입니다"라고 응답하는 곳이 늘었다. 사람처럼 말하고, 듣고, 알아듣고, 다시 말한다. 이런 시스템을 음성 AI 에이전트(Voice AI Agent)라고 부른다. 예약 잡기, 보험 가입 문의 스크리닝, 리드 자격 검증, 고객 만족도 조사 같은 반복적인 통화 업무를 자동화한다.

기술적으로는 네 가지 부품이 합쳐진 파이프라인이다. 마이크로 들어온 음성을 텍스트로 바꾸고(STT), 그 텍스트를 LLM에게 보내서 답변을 받고(LLM), 답변 텍스트를 다시 음성으로 합성하고(TTS), 그걸 전화선이나 WebRTC로 상대방에게 보낸다. 이 4단계를 저지연(low-latency)으로 묶는 게 핵심 난제다. 사람은 0.5초만 침묵해도 어색하게 느끼기 때문.

Term · 용어
STT (Speech-to-Text, 음성→텍스트)
전화기에 대고 한 말을 글자로 받아쓰는 기술. 회의록 자동 작성기를 생각하면 된다. Whisper, Deepgram, Google STT가 유명.
Term · 용어
TTS (Text-to-Speech, 텍스트→음성)
글자를 사람 목소리로 읽어주는 기술. 네비게이션 안내 음성이 가장 친숙한 예. ElevenLabs, OpenAI TTS, Cartesia가 자주 쓰인다.
Term · 용어
WebRTC (Web Real-Time Communication, 실시간 웹 통신)
브라우저끼리 서버를 거치지 않고 음성·영상을 주고받는 표준. 화상회의 줌(Zoom)이나 구글 미트의 기술적 토대. Dograh는 WebRTC로 웹 브라우저에서 바로 봇과 통화할 수 있게 한다.

여기서 등장한 Vapi는 음성 AI 에이전트를 SaaS(클라우드 서비스)로 파는 회사다. 미국에서 빠르게 성장 중이지만 코드가 공개돼 있지 않다(폐쇄형). 데이터를 외부 서버에 보내야 하고, 사용량에 따라 계속 비용이 든다. Dograh는 바로 이 Vapi의 오픈소스 대안으로 등장했다. 내 컴퓨터나 내 회사 서버에 직접 설치해서 쓰는 방식.

01 — 한 줄 요약TL;DR

이 레포의 핵심 메시지

한 문장으로 줄이면.

Core Message

"전화 받는 AI 비서를 레고처럼 조립해서, 내 서버에 띄운다."

웹 UI에서 노드를 드래그앤드롭으로 연결해 통화 흐름을 설계하고, docker compose up 한 줄로 PostgreSQL · Redis · MinIO · FastAPI · Next.js · TURN 서버가 한꺼번에 뜨는 풀스택 음성 AI 시스템.

STT/LLM/TTS 모델은 자유롭게 갈아 끼울 수 있어 OpenAI든, Deepgram이든, 자체 모델이든 마음대로 붙인다. "다운로드부터 첫 통화까지 2분"이 명시적 SLA.

02 — 왜 주목받는가Why now

2026년 5월, 트렌딩 23위에 오른 이유

시대적 배경 + 경쟁 우위.

시대적 배경 — 음성 에이전트는 SaaS 격전지

2026년 들어 음성 에이전트는 텍스트 챗봇 다음의 격전지가 됐다. ElevenLabs Conversational AI, Vapi, Retell AI, Bland AI 같은 SaaS들이 시장을 선점하고 있는데, 다들 비공개 코드 + 분당 과금 모델이다. 통화 1분당 5~15센트씩 쌓이는 비용이 진입 장벽이자 운영 부담이 된다.

Dograh는 "코드 전체 공개 + 셀프호스팅 + BYOK"라는 세 카드를 동시에 들고 나왔다. YC 출신 + Exit 경력 창업자가 메인테이너라는 점도 지속성 시그널.

경쟁 비교 — Vapi vs Dograh

비교 항목Vapi (SaaS)Dograh (셀프호스팅)
코드 공개비공개BSD-2-Clause 전부 공개
데이터 위치외부 서버내 MinIO / Postgres
과금 모델분당 5~15센트BYOK (모델사에 직접 결제)
모델 교체SaaS가 허용한 어댑터만STT/LLM/TTS 자유 교체
디버깅블랙박스코드 추적 가능
설치 시간회원가입 즉시docker compose up 2분
회귀 테스트제공 안 함LoopTalk (AI 페르소나)

차별화 포인트 정리

  • 100% 오픈소스 (BSD-2-Clause). 코드 전체 공개, 폐쇄 로직 없음. 동작을 학습할 수 있다.
  • 자체 호스팅. 회사 내부 서버, 클라우드, 노트북 어디든 띄울 수 있다.
  • LLM/STT/TTS 자유 교체. 특정 벤더에 묶이지 않는다. OpenAI 비싸면 로컬 Whisper로.
  • 2분 SLA. 다운로드부터 첫 통화까지 2분 안에 끝나는 걸 명시적 목표로 한다.
  • LoopTalk (베타). AI 페르소나가 가짜 고객 역할로 봇을 자동 테스트. 챗봇 회귀 테스트의 음성 버전.
Trap · 경쟁 SaaS의 한계
Vapi에서 못 하는 것

통화 데이터가 외부 서버를 거친다(개인정보·의료·금융 도메인에서 문제). 분당 과금이라 통화량이 늘수록 비용이 선형 증가. 워크플로우 빌더의 동작을 디버깅할 수 없다(블랙박스). 자체 모델을 붙이고 싶어도 SaaS가 허용하는 어댑터만 쓸 수 있다.

Fix · Dograh의 대응
Self-Host + BYOK

BYOK는 "Bring Your Own Key" — 내 OpenAI 키, 내 Twilio 키를 직접 꽂아 쓰는 모델. 분당 과금이 사라지고 모델 회사에 내가 직접 결제한다. 통화 음성과 트랜스크립트는 모두 내 MinIO/Postgres에 남아 외부 유출이 없다. UI 워크플로우는 모두 코드로 표현되므로 동작 추적이 가능하다.

03 — 기술 스택Stack

전체 기술 지도

백엔드 · 프론트엔드 · 인프라 한 번에.

Dograh는 단일 언어 프로젝트가 아니다. Python 58.3% + TypeScript 38.2% — 백엔드가 약간 더 비중을 차지한다. 백엔드와 프론트엔드 둘 다 본격적으로 살펴봐야 전체 그림이 잡힌다.

백엔드 (api/) — FastAPI 비동기 파이썬

웹 / 비동기 런타임

  • FastAPI 0.135 — Python 3.13 비동기 웹 프레임워크 (pyproject.toml: >=3.13,<3.14). 자동 OpenAPI + Pydantic 검증
  • SQLAlchemy 2.0 [asyncio] + asyncpg — PostgreSQL async ORM + raw SQL 모두 지원
  • Alembic 1.16 + alembic-postgresql-enum — DB 마이그레이션, enum 타입까지 추적
  • ARQ 0.26 + Redis 5.3 — Redis 기반 백그라운드 잡 큐, 통화 후 분석 등 처리

AI / 음성 파이프라인

  • tuner-pipecat-sdk 0.2 — 음성 파이프라인의 심장. Daily.co Pipecat의 튜닝 버전
  • pgvector 0.4 — PostgreSQL에 벡터 임베딩 저장 (RAG용)
  • fastmcp 3.2 — MCP 서버 구축. 봇이 외부 도구 호출 가능
  • langfuse 3.9 — LLM 호출 추적

통신 / 스토리지

  • twilio 9.8 — 전화선 연동 (통화 시작/종료, DTMF 처리)
  • aioboto3 + minio — S3/MinIO에 통화 녹음 파일 저장
  • sentry-sdk — 에러 모니터링
  • PyNaCl + bcrypt — 암호화와 비밀번호 해싱

프론트엔드 (ui/) — Next.js 15 + React 19

프레임워크 / 언어

  • Next.js 15.3 — App Router + Turbopack. SSR + 클라이언트 렌더링
  • React 19 + TypeScript 5 — Server Components와 Actions 활용
  • Tailwind CSS 4 + tw-animate-css — 유틸리티 클래스 기반 스타일링

워크플로우 빌더 — 핵심 UI

  • @xyflow/react 12.9 — 노드 기반 워크플로우 빌더의 심장. 사용자가 봇 흐름을 시각적으로 그린다
  • @dagrejs/dagre — 노드 자동 레이아웃 (그래프 자동 정렬)
  • Zustand 5 + zundo — 가벼운 전역 상태 + Undo/Redo

UI 컴포넌트 / 폼 / 통신

  • Radix UI + shadcn-ui — 접근성 보장 헤드리스 컴포넌트
  • react-hook-form + @stackframe/stack — 폼 처리와 인증
  • @hey-api/openapi-ts — FastAPI OpenAPI 스펙에서 타입 안전 클라이언트 자동 생성
  • posthog-js + sentry/nextjs — 사용자 행동 분석 + 에러 추적

인프라 (docker-compose.yaml) — 9개 컨테이너 (기본 6개 + remote 프로필 3개)

데이터 / 스토리지

  • postgres (pgvector/pgvector:pg17) — Postgres 17 + 벡터 확장. 데이터 + RAG 한 곳에
  • redis 7 — 작업 큐 백엔드 + 캐시
  • minio — S3 호환 오브젝트 스토리지. 통화 녹음 저장용

앱 / 네트워크

  • api (dograh-api) — FastAPI 백엔드 컨테이너
  • ui (dograh-ui) — Next.js 프론트 컨테이너
  • cloudflared — Cloudflare 터널. 로컬 API를 외부에서 접근 가능하게 (Twilio 웹훅 수신용)
  • coturn 4.8 (remote 프로필) — WebRTC NAT 통과용 STUN/TURN 서버
  • nginx (remote 프로필) — HTTPS 리버스 프록시
04 — 아키텍처Design

시스템 구조와 4가지 설계 패턴

전체 구조도 → 핵심 패턴 하나하나.

전체 시스템은 크게 3개의 평면으로 나뉜다 — 사용자가 봇을 설계하는 제어 평면(Control Plane), 실시간 통화가 흐르는 데이터 평면(Data Plane), 그리고 비동기 잡이 도는 백그라운드 평면.

시스템 구조도

┌────────────────────────────────────────────────────────────────────┐
│                       사용자 / 전화 발신자                            │
└───────────────┬──────────────────────────┬─────────────────────────┘
                │ (브라우저)                │ (전화)
                │ WebRTC                   │ PSTN/SIP
                ▼                          ▼
        ┌──────────────────┐      ┌────────────────────┐
        │  Next.js UI      │      │  Twilio / Vonage   │
        │  (port 3010)     │      │  (telephony)       │
        │  - 워크플로우     │      │                    │
        │    빌더(xyflow) │      └─────────┬──────────┘
        │  - 통화 모니터링 │                │ webhook
        └────────┬─────────┘                │
                 │ HTTPS                    ▼
                 │            ┌──────────────────────────┐
                 │            │   cloudflared tunnel     │
                 │            │  (외부→로컬 노출)         │
                 │            └─────────┬────────────────┘
                 ▼                      ▼
        ┌────────────────────────────────────────────┐
        │       FastAPI Backend  (port 8000)         │
        │                                            │
        │  ┌────────────────────────────────────┐    │
        │  │  Pipecat Pipeline                  │    │
        │  │  STT ─► LLM ─► TTS ─► 전송         │    │
        │  │   ▲              │                 │    │
        │  │   └─ MCP tools ──┘ (외부 도구 호출) │    │
        │  └────────────────────────────────────┘    │
        │                                            │
        └──┬─────────┬─────────┬─────────┬───────────┘
           │         │         │         │
           ▼         ▼         ▼         ▼
        ┌──────┐ ┌──────┐ ┌──────┐ ┌──────────┐
        │ PG17 │ │Redis │ │MinIO │ │ ARQ      │
        │+vec  │ │      │ │ S3   │ │ Worker   │
        │      │ │      │ │      │ │ (비동기) │
        └──────┘ └──────┘ └──────┘ └──────────┘
         메타     큐/캐시  녹음파일  잡 처리

패턴 1 — Pipecat 파이프라인 (프레임 흐름)

음성 처리는 Pipecat 프레임워크(원래 Daily.co가 만든 OSS, Dograh가 fork해서 tuner-pipecat-sdk로 튜닝)를 통해 구현된다. Pipecat은 음성 입출력을 "프레임(Frame)" 단위로 흘려보내는 파이프라인 추상화를 제공한다.

Analogy · 컨베이어 벨트

공장의 컨베이어 벨트와 같다. 마이크 입력이 들어오면 → VAD(음성 활동 감지) 컨베이어 → STT 컨베이어 → LLM 컨베이어 → TTS 컨베이어 → 스피커 출력으로 흐른다. 각 단계는 독립적이고 교체 가능하다.

Term · 용어
VAD (Voice Activity Detection, 음성 활동 감지)
상대방이 말을 시작/끝낸 순간을 감지하는 부품. 이게 정확해야 봇이 말 끊지 않고 자연스럽게 응답한다. WebRTC VAD나 Silero VAD가 자주 쓰인다.

패턴 2 — 워크플로우 = DAG (방향 비순환 그래프)

사용자가 UI에서 그리는 통화 흐름은 내부적으로 방향 비순환 그래프(DAG)로 저장된다. 노드는 "인사 → 의도 분류 → 분기 1/2/3 → 정리" 같은 대화 단위, 엣지는 노드 간 전이 조건. 프론트엔드는 @xyflow/react로 그래프를 시각화하고, 백엔드는 JSON으로 저장한 뒤 통화 중에 한 노드씩 활성화한다.

패턴 3 — BYOK + Provider 추상화 (인터페이스 갈아끼우기)

LLM/STT/TTS 제공자는 모두 추상 클래스(인터페이스)로 정의되고, 구체 구현은 어댑터로 갈아 끼운다. 기본 제공되는 Dograh 자체 API 키를 쓰다가, 운영 단계에서 자기 OpenAI 키로 바꾸는 게 환경변수 1줄 변경으로 끝난다.

패턴 4 — Cloudflared Tunnel (개발자 첫 5분 자동화)

Twilio가 통화 이벤트를 보낼 때는 인터넷에서 접근 가능한 공개 URL이 필요하다. 로컬 개발에서 보통 ngrok을 따로 깔아야 하는데, Dograh는 docker-compose에 cloudflared 컨테이너를 넣어 "docker compose up"만으로 외부 접근 URL이 자동 생성된다.

Lesson · 설계 교훈
"개발자 첫 5분"에 투자하기

cloudflared 자동 터널, MinIO 자동 버킷 생성, Dograh가 발급한 임시 API 키 자동 주입 — 모두 신규 사용자가 환경 설정에 막혀 떠나는 걸 막기 위한 장치다. 오픈소스 프로젝트에서 "2분 SLA"를 지키려면 이 정도까지 자동화해야 한다는 좋은 사례.

05 — 디렉토리Repo map

레포 구조 해부

어디에 뭐가 있는지.

dograh/
├── api/                       # 백엔드 (FastAPI)
│   ├── requirements.txt        # Python 의존성
│   ├── pyproject.toml          # Python >=3.13,<3.14 요구
│   ├── .env / .env.test        # 환경변수 (개발/테스트 분리)
│   ├── services/               # 비즈니스 로직 모듈
│   ├── routes/ (추정)          # FastAPI 엔드포인트
│   ├── models/ (추정)          # SQLAlchemy 모델
│   ├── alembic/ (추정)         # DB 마이그레이션
│   └── tests/                  # pytest
│
├── ui/                        # 프론트엔드 (Next.js 15)
│   ├── package.json
│   ├── src/                    # 소스 루트
│   │   ├── app/                # App Router 페이지
│   │   ├── components/         # Radix + shadcn 컴포넌트
│   │   └── lib/                # 유틸 / API 클라이언트
│   └── .env                    # 프론트 환경변수
│
├── pipecat/                   # Pipecat 프레임워크 (git submodule)
│                              #   ↑ 음성 파이프라인의 심장
│
├── docs/                      # Mintlify 기반 공식 문서
├── evals/                     # STT 벤치마크(stt/) + 시각화 도구(visualizer/)
├── scripts/                   # 로컬 개발 헬퍼 셸 스크립트
├── nginx/                     # remote 배포용 HTTPS 설정
├── config/coturn/             # WebRTC TURN 서버 설정
├── .claude/                   # Claude Code용 프로젝트 컨텍스트
│
├── docker-compose.yaml         # 9개 컨테이너 (기본 6개 + remote 프로필 3개)
├── docker-compose-local.yaml   # 로컬 개발 전용
│
├── CLAUDE.md → AGENTS.md       # AI 에이전트용 프로젝트 안내
├── AGENTS.md                   # 프로젝트 구조와 환경 설명
├── CONTRIBUTING.md             # 기여 가이드
└── CHANGELOG.md                # release-please 자동 생성
Analogy · 관전 포인트

pipecat/git submodule로 들어와 있다. 원본 Pipecat을 fork해서 Dograh 전용 튜닝을 가하면서도, 원본 업데이트를 추적할 수 있게 분리한 구조. 음성 파이프라인 코드의 "심장"이 별도 레포에 있다고 보면 된다. 또 CLAUDE.md@AGENTS.md로 리다이렉트되는 것도 흥미롭다. Claude Code뿐 아니라 Cursor, Aider 같은 다른 에이전트도 같은 컨텍스트 파일을 읽도록 표준화하려는 시도.

06 — 학습 포인트What to learn

분야별 배울 것

이 레포에서 무엇을 가져갈지.

FastAPI로 실시간 시스템 만들기

  • WebSocket 핸들링 + 비동기 파이프라인 + 백그라운드 잡(ARQ) 세 가지의 조합법
  • api/의 endpoint 구조와 의존성 주입 패턴 — production-grade FastAPI의 모범
  • 단순 CRUD가 아닌 실시간 음성을 다루는 점이 차별점

실습: 내 FastAPI 프로젝트에 ARQ 워커 1개를 추가해 "5초 후 이메일 발송" 같은 지연 작업 구현

SQLAlchemy 2.0 async 패턴

  • 2.0의 새 API(typed Mapped, select() 스타일) + asyncpg 드라이버 조합
  • production 예시가 인터넷에 의외로 적어 참고 가치 큼
  • Alembic 마이그레이션을 async 환경에서 운영하는 정석

실습: 동기 SQLAlchemy 토이 프로젝트를 async로 마이그레이션. session 처리와 트랜잭션 경계가 가장 큰 변화

pgvector로 RAG 구축

  • 별도 벡터 DB(Pinecone, Weaviate) 없이 Postgres 안에 임베딩 저장 + 유사도 검색
  • Dograh는 통화 봇이 회사 문서를 참조해 답변할 때 사용 (코드 미확인, 추정)
  • 인프라 컴포넌트를 줄이고 싶은 스타트업에 좋은 패턴

실습: 블로그 글 100개를 OpenAI embeddings로 벡터화 → pgvector 저장 → "비슷한 글 찾기" API

Next.js 15 + xyflow로 노드 에디터

  • 드래그앤드롭 노드 UI는 의외로 자주 필요해진다(자동화, 결제 흐름, 데이터 파이프라인)
  • @xyflow/react + dagre 자동 레이아웃 = 거의 표준 솔루션
  • 커스텀 노드, 엣지 검증, undo/redo(zundo) 패턴을 한 번에 학습

실습: 자기만의 "조리 레시피 빌더"를 xyflow로 만들기 — 재료/조리 단계/완성 노드 연결

Pipecat 음성 파이프라인

  • STT/LLM/TTS를 직접 조합하는 게 1년 전만 해도 까다로웠다
  • "프레임 처리 노드를 줄로 연결"하는 패턴이 표준이 됐다
  • pipecat/ 서브모듈에서 추상화 설계를 배울 수 있다

실습: Pipecat 공식 quickstart의 echo bot을 띄우고, STT만 Whisper로 교체

docker-compose 멀티 서비스 오케스트레이션

  • profiles, healthcheck, volume mounting, internal network, depends_on (with healthy condition)이 한 파일에
  • healthcheck 체이닝 — postgres → api → ui 순으로 정상 확인 후 다음 컨테이너 기동
  • 모든 docker compose 사용자가 익혀둘 만한 패턴

실습: 내 사이드 프로젝트 docker-compose에 healthcheck 추가로 의존성 체이닝 구현

OpenAPI → TypeScript 자동 동기화

  • @hey-api/openapi-ts로 FastAPI OpenAPI 스펙에서 TS 클라이언트 자동 생성
  • 백엔드 API가 바뀌면 npm run generate-client만 돌리면 프론트 타입 자동 업데이트
  • 풀스택 타입 안전성의 정석
07 — 요구사항Setup

하드웨어·시스템 요구사항

노트북에서 돌릴 수 있나?

로컬 데모는 일반 노트북에서 충분히 돌아간다. LLM/STT/TTS는 Dograh가 발급한 클라우드 API 키를 기본으로 쓰기 때문에 GPU가 필요 없다. 기본 컨테이너 6개(postgres·redis·minio·api·ui·cloudflared)의 메모리 부담만 견디면 된다.

모드최소 사양외부 의존성용도
로컬 개발8GB RAM + DockerDocker Compose v2학습 · 봇 만들기
로컬 + BYOK위에 더해 OpenAI/Deepgram 키외부 API 키품질 비교 · 튜닝
프로덕션2 vCPU + 4GB RAM + 도메인HTTPS + coturn + S3실제 운영

로컬 개발 환경 권장

  • OS: macOS / Linux / Windows (WSL2)
  • RAM: 8GB 이상 (PG + Redis + MinIO + API + UI 합계 약 2~3GB)
  • 디스크: 컨테이너 이미지 + DB 데이터로 5~10GB 여유
  • Docker: Docker Desktop 또는 Docker Engine + Compose v2
  • 네트워크: 첫 실행 시 이미지 다운로드 2~3분 (수 GB)
  • 포트: 3010(UI), 8000(API), 5432(PG), 6379(Redis), 9000/9001(MinIO)

프로덕션 배포 추가 요구

  • 도메인 + HTTPS: WebRTC는 HTTPS에서만 동작. nginx + certbot 또는 클라우드 LB
  • TURN 서버: 사용자 NAT 환경이 다양할 때 필수. coturn 컨테이너 동봉
  • 외부 API 키: OpenAI / Anthropic / Deepgram / ElevenLabs / Twilio 중 본인이 쓸 것
  • S3 대체: 통화량 늘면 MinIO 대신 AWS S3 / GCS / R2로 전환 권장
08 — 실습 과제Hands-on

직접 해볼 수 있는 5단계

난이도별 — Easy → Hard.

실습 1 — 로컬 띄우고 첫 봇 만들기Easy · 30분

1) README의 curl 한 줄로 docker-compose up 2) localhost:3010 접속 3) "고객 불만 1차 응대" 봇 생성 4) Web Call로 직접 통화 5) 봇 대답의 어색한 부분 기록 — 이 어색함이 음성 에이전트의 핵심 과제다.

배우는 것: 컨테이너 6개 동시 기동(기본 프로필), 워크플로우 빌더 UI 기본, 음성 AI의 "어색함" 체감

실습 2 — 노드 5개 이상의 분기 봇Easy · 1시간

1) "인사 → 의도 분류(예약/문의/취소) → 분기 처리 → 마무리" 구조를 노드 5개 이상으로 2) 분기 조건에 LLM이 어떻게 사용되는지 관찰 3) UI에서 노드 간 연결이 백엔드 DB에 어떻게 저장되는지 PostgreSQL을 직접 열어 확인

배우는 것: DAG 구조의 워크플로우 설계, LLM-as-router 패턴, JSON 직렬화

실습 3 — BYOK로 모델 갈아 끼우기Medium · 2~3시간

1) Dograh 기본 키 대신 자기 OpenAI / Deepgram 키를 환경변수에 주입 2) 봇 재실행 3) STT 응답 속도, LLM 답변 품질, TTS 자연스러움 비교 4) api/.env의 어떤 변수가 어디로 전달되는지 grep으로 코드 추적

배우는 것: Provider 추상화 패턴, 환경변수 전파 추적, 모델 품질 비교

실습 4 — 커스텀 노드 타입 만들기Medium · 4~6시간

1) ui/의 xyflow 노드 구현부 분석 2) 새로운 노드 타입 추가 — 예: "외부 API에 GET 요청 후 응답을 다음 노드로 전달" 3) 프론트의 노드 정의 + 백엔드의 노드 실행 핸들러 양쪽 모두 구현

배우는 것: 풀스택 기능 추가의 전체 흐름, xyflow 확장, FastAPI 핸들러 작성

실습 5 — LoopTalk으로 회귀 테스트 자동화Hard · 1~2일

1) evals/ 디렉토리 분석 2) LoopTalk 페르소나 5개 정의 (예: 화난 고객, 영어가 서툰 고객, 사연 길게 말하는 고객) 3) 봇과 실제 통화 → 통과율 측정 4) GitHub Actions로 봇 수정 시 회귀 테스트 자동 실행 CI 구성

배우는 것: AI 페르소나 설계, 음성 회귀 테스트, CI/CD 통합

09 — 학습 로드맵4 weeks

4주 심화 학습 플랜

주차별로 따라가면 Dograh 풀스택 마스터.

Week 01
음성 AI 기초 다지기

Whisper로 음성 받아쓰기 직접 돌려보기(CPU OK) / ElevenLabs API로 텍스트→음성 합성 100자 / VAD를 webrtcvad로 체감 / WebRTC가 P2P · TURN · STUN을 어떻게 쓰는지 개념 학습

Week 02
Pipecat 단독 학습

Pipecat 공식 quickstart의 echo bot 띄우기 / STT → LLM → TTS 파이프라인 직접 조립 / Frame이 어떻게 흐르는지 디버그 모드로 추적 / 토이 봇에 인터럽션(말 끊기 감지) 추가

Week 03
FastAPI + Postgres 풀스택 패턴

SQLAlchemy 2.0 async + Alembic 마이그레이션으로 작은 CRUD API / ARQ로 백그라운드 잡 1개 추가 / pgvector로 100개 문서 검색 API / FastMCP로 첫 MCP 서버 (LLM이 호출 가능한 도구 1~2개)

Week 04
Dograh 코드 정독 + 자기 봇 배포

api/services/ui/app/ 코드 한 번 정독 / Pipecat 파이프라인이 백엔드에서 어떻게 활성화되는지 추적 / 커스텀 노드 타입 1개 추가(위 실습 4) / VPS에 docker-compose remote 프로필로 배포해 외부에서 통화

10 — 키워드 사전Glossary

핵심 용어 한눈에

자주 마주칠 단어들.

Pipecat
Daily.co가 만든 음성 AI 파이프라인 프레임워크. Dograh는 fork해서 tuner-pipecat-sdk로 사용.
STT / TTS / LLM
음성→텍스트 / 텍스트→음성 / 대형 언어 모델. 음성 에이전트의 3종 부품.
VAD
Voice Activity Detection. 사람이 말 시작·끝낸 순간 감지. 자연스러운 대화의 열쇠.
WebRTC
브라우저 간 실시간 음성·영상 통신 표준. Zoom의 기술적 토대.
STUN / TURN
WebRTC가 NAT(공유기) 뒤 사용자끼리 연결할 때 필요한 보조 서버. STUN은 주소 알아내기, TURN은 중계.
BYOK
Bring Your Own Key. 플랫폼이 LLM/STT/TTS 키 대신 사용자가 자기 키를 직접 주입. 비용·데이터 통제권이 사용자에게.
FastAPI
Python 비동기 웹 프레임워크. 자동 OpenAPI 문서 + Pydantic 타입 검증.
SQLAlchemy 2.0 async
Python ORM. 2.0부터 async/await 정식 지원. asyncpg 드라이버와 함께 사용.
Alembic
SQLAlchemy 기반 DB 마이그레이션 도구. Rails migration과 비슷.
ARQ
Asyncio + Redis 기반 백그라운드 잡 큐. Celery의 async 친화 대안.
pgvector
PostgreSQL 벡터 확장. 별도 벡터 DB 없이 PG 안에 임베딩 저장 + 유사도 검색.
MinIO
S3 호환 오브젝트 스토리지의 오픈소스 구현. 회사 서버에 S3를 깐다.
MCP
Model Context Protocol. Anthropic 표준. LLM이 외부 도구를 호출할 수 있게 하는 프로토콜. fastmcp는 파이썬 구현.
Twilio
전화 통신을 API로 제공. 봇이 실제 전화번호로 통화할 때 사용.
cloudflared
Cloudflare Tunnel CLI. 로컬 서비스를 안전하게 외부에 노출. ngrok의 대안.
Next.js App Router
Next.js 13+의 새 라우팅. 서버 컴포넌트가 기본. Dograh는 15.3 사용.
xyflow (구 React Flow)
노드 + 엣지 기반 다이어그램 에디터 React 라이브러리. 자동화 도구 UI 표준.
Zustand + zundo
가벼운 React 전역 상태 관리 + undo/redo 확장.
Radix UI / shadcn/ui
접근성 보장 헤드리스 컴포넌트 + Tailwind 기반 스타일. 모던 UI의 사실상 표준 조합.
LoopTalk
Dograh가 만든 AI 페르소나 테스트 도구. AI가 가짜 고객 역할로 봇과 통화 → 회귀 테스트.
Vapi
음성 AI 에이전트 SaaS 회사. Dograh가 명시적으로 "Vapi의 오픈소스 대안"으로 포지셔닝.
DTMF
Dual-Tone Multi-Frequency. 전화 키패드 톤. "1번 누르세요" 자동응답이 이걸로 동작.
11 — 참고 링크Refs

더 깊이 파고들 자료

공식 · 프레임워크 · 학습.

공식 자료

핵심 프레임워크

관련 학습 리소스

Action · 이번 주에 해볼 것

Dograh를 처음 만났다면 이 순서로 5단계.

  1. 30분 안에 한 번 띄워본다. README의 curl 한 줄을 그대로 복사해 docker compose up. 첫 봇을 만들고 Web Call로 실제 음성을 들어본다. 음성 AI의 "어색함"이 어디서 오는지 체감해야 다음 학습이 의미 있어진다.
  2. "내 OpenAI 키"로 갈아 끼우기. Dograh 기본 키 대신 자기 키를 넣어 BYOK 추상화가 코드 어디서 일어나는지 추적. 환경변수 1줄이 어디까지 전파되는지 grep으로 따라가본다.
  3. docker-compose.yaml 한 번 정독. healthcheck · depends_on · profiles · 두 가지 docker-compose 파일 분리 — 모두 production-grade 패턴이다. 자기 사이드 프로젝트 compose를 이 수준으로 다듬으면 인프라 감각이 한 단계 올라간다.
  4. xyflow 노드 에디터를 작게 흉내 내본다. 자기만의 "결제 흐름 빌더"나 "레시피 빌더"를 100줄 데모로 만들어보면 Dograh 워크플로우 빌더 코드가 갑자기 읽기 쉬워진다.
  5. Pipecat quickstart부터. Dograh 코드를 읽기 전에 Pipecat 단독 echo bot을 먼저 돌려본다. 음성 파이프라인의 기본기를 잡고 나면 Dograh가 그 위에 얹은 레이어가 명확하게 보인다.
원문 · dograh-hq/dograh · 2026-05-20 · TrendShift 23위 · 딥다이브 분석 · 유행레포정리 프로젝트