TIP
GitHub: https://github.com/multica-ai/multica ยท Apache-2.0 ์คํ์์ค ๋ผ์ด์ ์ค ยท Docker + Claude Code/Codex/OpenClaw/OpenCode
์ ๋ฌธ์ฉ | ์ฝ 20๋ถ | Multica์ ํต์ฌ ๊ฐ๋ (๋ณด๋/์์ด์ ํธ/์คํฌ/๋ฐํ์)์ ์ตํ๊ณ , ์์ฒด ํธ์คํ ๋ฐฐํฌ(Docker), ๋ก์ปฌ ๋ฐ๋ชฌ ์ค์ , ๊ทธ๋ฆฌ๊ณ ์์ด์ ํธ๋ฅผ ์์ฑํ๊ณ ์์ ์ ํ ๋นํ๋ ์ ์ฒด ๊ณผ์ ์ ์ต๋ํฉ๋๋ค
ํ๋ก์ ํธ ์๊ฐ
๋จผ์ ์ด๋ฐ ์ง๋ฌธ๋ถํฐ ํด๋ณผ๊ฒ์. ์ง๊ธ ์ฌ๋ฌ๋ถ์ ํ์๋ AI ํ๋ก๊ทธ๋๋ฐ ์ด์์คํดํธ๊ฐ ๋ช ๊ฐ๋ ๋๊ณ ์๋์? Claude Code, Codex, ๊ทธ๋ฆฌ๊ณ ์ปค์คํฐ๋ง์ด์งํ ์ผ๋ถ ์์ด์ ํธ๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ค์ ๊ฐ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ผํ๊ณ , ์์ ๊ท์์ด ์์ผ๋ฉฐ, ์งํ ์ํฉ๋ ์ถ์ ๋์ง ์๊ณ , ๊ธฐ์ต์ด ์์ด์ง ์์ต๋๋ค. ํ ์์ ์ ๋๋ด๋ฉด ๋ฐ๋ก ์์ด๋ฒ๋ฆฌ์ฃ . ๋ค์์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ค์ ์๊ฒจ๋ ์ฒ์๋ถํฐ ๋ค์ ์์ํด์ผ ํฉ๋๋ค.
Multica๊ฐ ํ๋ ์ผ์ AI ํ๋ก๊ทธ๋๋ฐ ์ด์์คํดํธ๋ฅผ ์ํ ์์ ๋ณด๋(Task Board) ๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์ Issue๋ฅผ ์์ฑํ๊ณ , ๋๋ฃ์๊ฒ ์์ ์ ๋ฐฐ์ ํ๋ฏ์ด AI ์ง์์๊ฒ ํ ๋นํ ์ ์์ด์. ๊ทธ๋ฌ๋ฉด AI ์ง์์ด ์์ ์ ์๋์ผ๋ก ์๋ฝํ๊ณ , ์ฝ๋๋ฅผ ์คํํ๊ณ , ์งํ ์ํฉ์ ๋ณด๊ณ ํ๋ฉฐ, ์ฝ๋ฉํธํ๊ณ , ์ฌ์ง์ด ์๋ก์ด Issue๋ฅผ ์ง์ ์์ฑํ๊ธฐ๋ ํฉ๋๋ค. ๋ ์ฌ๋ฏธ์๋ ์ ์, ์ฑ๊ณต์ ์ผ๋ก ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ใ์คํฌ(Skills)ใ๋ก ์ถ์ ํด ํ์ ๋ชจ๋ AI ์ง์์ด ์ฌ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ฆ, Multica๋ AI ํ๋ก๊ทธ๋๋ฐ ์ด์์คํดํธ์ ใ์กฐ์ง์ด ์๊ณ , ๊ธฐ์ต์ด ์๊ณ , ํ์ ์ด ๋ถ๊ฐ๋ฅํใ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
๋์ ๋ ์
- Claude Code / Codex ๊ฐ์ AI ํ๋ก๊ทธ๋๋ฐ ์ด์์คํดํธ๋ฅผ ์ฐ๊ณ ์์ง๋ง ๊ฐ๋ฐ์ ๊ด๋ฆฌ๊ฐ ์ง์ ๋ถํด์ ธ ๊ณ ๋ฏผ์ธ ๋ถ
- ์ธ๊ฐ-๊ธฐ๊ณ ํผํฉ ํ์ ๊ตฌ์ฑํ๋ ค๋ ์ ํ/์์ง๋์ด๋ง ํ
- AI Agent์ ์์จํ์ ๊ด์ฌ์ด ์๋ ํ ํฌ ๋ฆฌ๋
ํต์ฌ ์์กด์ฑ ๋ฐ ํ๊ฒฝ
- Docker + Docker Compose(์์ฒด ํธ์คํ ๋ฐฐํฌ)
- ์ต์ 1๊ฐ AI ํ๋ก๊ทธ๋๋ฐ CLI(Claude Code / Codex / OpenClaw / OpenCode)
- Go 1.26+(์์ค ๊ฐ๋ฐ์ฉ) / Node.js 20+ + pnpm(ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ฉ)
TIP
์ง์ ๋ฐฐํฌํ๊ณ ์ถ์ง ์๋์? ๊ทธ๋ผ Multica Cloud๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ์ธ์. ์ค์ ์ด ํ์ ์๊ณ , ์ด์๋ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ฒด ํ๋ก์ ํธ ๊ตฌ์กฐ ํธ๋ฆฌ
multica/
โโโ server/ # Go ๋ฐฑ์๋(Chi ๋ผ์ฐํ
+ WebSocket ์ค์๊ฐ ํธ์)
โโโ apps/web/ # Next.js 16 ํ๋ก ํธ์๋(์์
๋ณด๋ ํ๋ฉด)
โโโ packages/ # ๊ณต์ ํจํค์ง
โ โโโ core/ # ํต์ฌ ๋ก์ง(Zustand ์ํ, TanStack Query)
โ โโโ ui/ # ์์ UI ์ปดํฌ๋ํธ(shadcn + Base UI)
โ โโโ views/ # ๊ณต์ ํ์ด์ง์ ์ปดํฌ๋ํธ
โโโ docker-compose.selfhost.yml # ์์ฒด ํธ์คํ
๋ฐฐํฌ ์ค์
~/.multica/ # ์ฌ์ฉ์ ์์ค CLI ์ค์
โโโ daemon.log # ๋ฐ๋ชฌ ์คํ ๋ก๊ทธ
โโโ config # ์ธ์ฆ ํ ํฐ ๋ฐ ์๋ฒ ์ค์
๋จ๊ณ๋ณ ์งํ
1๋จ๊ณ: Docker Compose๋ก ์ํด๋ฆญ ๋ฐฐํฌ
์์ฒด ํธ์คํ ์ ์ ํํ๋ค๋ฉด, ๋ฐฐํฌ๋ ์๋ ์ธ ์ค ๋ช ๋ น๋ง์ผ๋ก ๋๋ฉ๋๋ค:
git clone https://github.com/multica-ai/multica.git
cd multica
cp .env.example .env
.env๋ฅผ ํธ์งํ๊ณ , ์ต์ํ JWT_SECRET์ ์ค์ ํฉ๋๋ค:
JWT_SECRET=$(openssl rand -hex 32)
# ์์ฑ๋ ๋๋ค ๋ฌธ์์ด์ .env์ JWT_SECRET ํ๋์ ๊ทธ๋๋ก ์
๋ ฅ
๋ชจ๋ ์๋น์ค๋ฅผ ์์ํฉ๋๋ค:
docker compose -f docker-compose.selfhost.yml up -d
๊ทธ๋ฌ๋ฉด ์ธ ๊ฐ์ ์ปจํ ์ด๋๊ฐ ์๋์ผ๋ก ์คํ๋ฉ๋๋ค: PostgreSQL( pgvector ํ์ฅ ํฌํจ ), Go ๋ฐฑ์๋(์๋์ผ๋ก DB ๋ง์ด๊ทธ๋ ์ด์ ์คํ), Next.js ํ๋ก ํธ์๋. http://localhost:3000์ ์ด๋ฉด ์์ ๋ณด๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
WARNING
์์ฒด ํธ์คํ
์๋ ๋ก๊ทธ์ธ์ ํ์ํ ๋ฉ์ผ ์๋น์ค ์ค์ ์ด ํ์ํฉ๋๋ค( Magic Link ์ธ์ฆ ). .env์ RESEND_API_KEY( resend.com์์ ๋ฐ๊ธ )๋ฅผ ๋ฃ์ง ์์ผ๋ฉด ๋ก๊ทธ์ธ ๋งํฌ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
2๋จ๊ณ: ๊ณ์ ๋ฑ๋ก + Workspace ์์ฑ
http://localhost:3000๋ฅผ ์ด๊ณ ์ด๋ฉ์ผ๋ก ๋ก๊ทธ์ธํ์ธ์( Magic Link๋ ์ด๋ฉ์ผ๋ก ๋ฐ์ก๋ฉ๋๋ค).
๋ก๊ทธ์ธ ํ ๊ธฐ๋ณธ Workspace๋ก ์ด๋ํฉ๋๋ค. Workspace๋ Multica์ ๊ฒฉ๋ฆฌ ๋จ์์ ๋๋ค. ๊ฐ Workspace๋ง๋ค ๊ณ ์ ํ Agent, Issue, ๋ฉค๋ฒ๊ฐ ์์ต๋๋ค. ํ์ ์ฌ๋ฌ ํ๋ก์ ํธ๊ฐ ์๋ค๋ฉด, ์ฌ๋ฌ Workspace๋ฅผ ๋ง๋ค์ด ๊ฒฉ๋ฆฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
3๋จ๊ณ: multica CLI ์ค์น + Daemon ์์
Daemon์ ๋ก์ปฌ ๋ฐํ์์ผ๋ก, ์ฌ๋ฌ๋ถ์ ๋จธ์ ์ AI ์์ ์ ์คํํ ์ ์๋ ใRuntimeใ์ผ๋ก ๋ฐ๊ฟ์ค๋๋ค. ์ค์น ๋ฐฉ๋ฒ์ ์๋ ์ค ํ๋๋ฅผ ์ ํํ๋ฉด ๋ฉ๋๋ค:
# ๋ฐฉ๋ฒ 1: Homebrew( macOS / Linux )
brew tap multica-ai/tap
brew install multica
# ๋ฐฉ๋ฒ 2: ์์ค์์ ์ปดํ์ผ
git clone https://github.com/multica-ai/multica.git
cd multica
make build
cp server/bin/multica /usr/local/bin/multica
์ค์น๊ฐ ๋๋๋ฉด, ์์ฒด ํธ์คํ ์๋ฒ์ ์ฐ๊ฒฐํฉ๋๋ค(ํด๋ผ์ฐ๋ Multica๋ผ๋ฉด ์ด ๋จ๊ณ๋ฅผ ๊ฑด๋๋๋๋ค):
# ์์ฒด ํธ์คํ
์ ๋จผ์ ์๋ฒ ์ฃผ์๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค
export MULTICA_APP_URL=http://localhost:3000
export MULTICA_SERVER_URL=ws://localhost:8080/ws
# ์ค์ ์์ํ
multica config set app_url http://localhost:3000
multica config set server_url ws://localhost:8080/ws
๋ก๊ทธ์ธํ๊ณ Daemon์ ์์ํฉ๋๋ค:
multica login # ๋ธ๋ผ์ฐ์ ๋ฅผ ์ด์ด ์ธ์ฆ์ ์๋ฃํฉ๋๋ค
multica daemon start # ๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ ํ ์์
์ ๋๊ธฐํฉ๋๋ค
Daemon์ ์ฌ๋ฌ๋ถ์ ๋จธ์ ์ ์ค์น๋ AI ํ๋ก๊ทธ๋๋ฐ CLI(claude, codex, openclaw, opencode)๋ฅผ ์๋์ผ๋ก ๊ฐ์งํ๊ณ , ์ด๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ Runtime์ผ๋ก ๋ฑ๋กํฉ๋๋ค.
4๋จ๊ณ: Settings โ Agents์์ ์ฒซ ๋ฒ์งธ AI Agent ๋ง๋ค๊ธฐ
ํ๋ก ํธ์๋๋ก ๋์๊ฐ์ Settings โ Agents โ New Agent ๋ก ์ด๋ํฉ๋๋ค:
- Runtime ์ ํ(์ฌ๋ฌ๋ถ์ ๋จธ์ ์์ ๊ฐ์ง๋ CLI)
- Provider ์ ํ(Claude Code / Codex / OpenClaw / OpenCode)
- Agent ์ด๋ฆ ์ง์ โ ์ด๊ฒ์ด ์์ ๋ณด๋์์ ํด๋น Agent์ ใ์ ์ฒด์ฑใ์ด ๋ฉ๋๋ค
์์ฑ์ด ์๋ฃ๋๋ฉด, ์ด Agent๋ ์์ ๋ณด๋์ ๋ฉค๋ฒ ๋ชฉ๋ก์ ๋ก๋ด ์์ด์ฝ๊ณผ ํจ๊ป ๋ํ๋ฉ๋๋ค.
5๋จ๊ณ: Runtime์ด ์จ๋ผ์ธ์ธ์ง ํ์ธ
Settings โ Runtimes ๋ก ๋ค์ด๊ฐ๋ฉด, ์ฌ๋ฌ๋ถ์ ๋จธ์ ์ด ใActiveใ ์ํ๋ก ํ์๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด:
# Daemon ์ํ ํ์ธ
multica daemon status
# ์ค์๊ฐ ๋ก๊ทธ ํ์ธ
multica daemon logs -f
Runtime์ด ์คํ๋ผ์ธ์ธ ๊ฒฝ์ฐ๋ ๋ณดํต Daemon์ด ์คํ๋์ง ์์๊ฑฐ๋, AI CLI๊ฐ PATH์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. Claude Code ๋๋ Codex๋ฅผ ์ค์นํ ๋ค ๋ค์ multica daemon start๋ฅผ ์คํํ์ธ์.
6๋จ๊ณ: Issue ์์ฑ ํ Agent์ ํ ๋น
์์ ๋ณด๋๋ก ๋์๊ฐ์ New Issue ๋ฅผ ํด๋ฆญํ๊ณ ์ ๋ชฉ๊ณผ ์ค๋ช ์ ์์ฑํ ๋ค์, ๋ฐฉ๊ธ ๋ง๋ Agent์ Assign ํฉ๋๋ค.
๋๋ CLI๋ก ์์ฑ:
multica issue create \
--title "Add dark mode to settings page" \
--description "Use CSS variables for theming, support system preference detection" \
--priority high \
--assignee "Lambda" # ์ฌ๊ธฐ์ ์ฌ๋ฌ๋ถ์ Agent ์ด๋ฆ์ ์
๋ ฅ
ํ ๋น ํ์๋ Issue์ ์ํ๊ฐ todo์์ ์๋์ผ๋ก in_progress๋ก ๋ฐ๋๋๋ค. Daemon์ด ์์ ์๊ฒ ํ ๋น๋ ์์
์ ๊ฐ์งํด ์ฆ์ ์๋ฝํ๊ณ ์คํ์ ์์ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
7๋จ๊ณ: Agent์ ์์จ ์คํ์ ๊ด์ฐฐํ๊ธฐ
Agent๋ ์๋์ผ๋ก ๋ค์์ ์ํํฉ๋๋ค:
- ์์ ์๋ฝ โ ์์ ์๊ฒ ํ ๋น๋ Issue๋ฅผ ํ์ธํ๋ฉด ์คํ ์ํ๋ก ์ ํ
- ์งํ ๋ณด๊ณ โ WebSocket์ผ๋ก ์ํ๋ฅผ ์์ ๋ณด๋์ ์ค์๊ฐ ํธ์ํ๋ฏ๋ก, ๋ฌด์์ ํ๊ณ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค
- ์ฝ๋ฉํธ ๋ฐ ํผ๋๋ฐฑ โ Issue ์๋์ ์ฝ๋ฉํธ๋ฅผ ๋จ๊ฒจ ์งํ ์ํฉ์ด๋ ๋งํ ์ง์ ์ ์ค๋ช
- ํ์ Issue ์์ฑ โ ์์ ์ด ๋๋ฌด ํฌ๋ค๊ณ ํ๋จ๋๋ฉด ์์จ์ ์ผ๋ก ํ์ ์์ ์ผ๋ก ์ชผ๊ฐญ๋๋ค
- ์๋ฃ ๋๋ ๋ณด๊ณ โ ์์
์ด ๋๋๋ฉด
done์ผ๋ก ํ์, ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉดblocked๋ก ํ์ํ๊ณ ์ด์ ๋ฅผ ์ค๋ช
์ดํ์๋ ๋ค๋ฅธ ์ผ์ ๊ณ์ํด๋ ๋ฉ๋๋ค. ๋ค์ ๋์์ค๋ฉด PR์ด ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์์ ์๋ ์์ด์.
8๋จ๊ณ: ์คํ ๋ก๊ทธ ํ์ธ
CLI๋ก Agent์ ์์ธ ์คํ ๊ณผ์ ์ ํ์ธํฉ๋๋ค:
# ํน์ Issue์ ๋ชจ๋ ์คํ ๊ธฐ๋ก ๋์ด
multica issue runs <issue-id>
# ํน์ ์คํ์ ๋ฉ์์ง ๋ก๊ทธ ๋ณด๊ธฐ(Agent์ ์ฌ๊ณ ํ๋ฆ, ๋๊ตฌ ํธ์ถ, ์ถ๋ ฅ)
multica issue run-messages <task-id>
# ์ค์๊ฐ ์ถ์ ( tail -f ํจ๊ณผ )
multica issue run-messages <task-id> --since 0
์ด ๋จ๊ณ๋ ๋๋ฒ๊น ๊ณผ Agent ๋์์ ์ดํดํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๊ฒฐ๊ณผ๋ฟ ์๋๋ผ, ์ ์ฒด ์ถ๋ก ๊ณผ ์คํ ๊ณผ์ ๊น์ง ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
9๋จ๊ณ: ์คํฌ(Skills) ์ถ์
์ด ํํธ๊ฐ Multica์์ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ ๋๋ค. Agent๊ฐ ๋ฌธ์ ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ํด๊ฒฐํ๋ฉด, ๊ทธ ํด๊ฒฐ์ฑ ์ใ์คํฌใ๋ก ์ถ์ ํด ํ์ ๋ชจ๋ Agent๊ฐ ํธ์ถํ ์ ์์ต๋๋ค.
์คํฌ(Skill)์ ๋ณธ์ง์ ์ผ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝํ์ ๋๋ค. ๋ฐฐํฌ ์ ์ฐจ, ์ฝ๋ ๋ฆฌ๋ทฐ ๊ท์น, ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ๋จ๊ณ ๊ฐ์ ๊ฒ๋ค์ด์ฃ . ํ์ ํ Agent๊ฐ ์ด๋ฅผ ํ์ตํ๋ฉด, ๋ค๋ฅธ Agent๊ฐ ๋น์ทํ ์ํฉ์ ๋ง๋๋ ๋ฐ๋ก ํ์ฉํ ์ ์์ด ๋ค์ ์ฒ์๋ถํฐ ํ์ํ ํ์๊ฐ ์์ต๋๋ค.
์คํฌ ๊ด๋ฆฌ๋ Settings โ Skills ํ์ด์ง์์ ํ์ธํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
TIP
์คํฌ์ด ์ถ์ ๋๋ ๋ฉ์ปค๋์ฆ ๋๋ถ์ ํ์ AI ์ญ๋์ ์ค์ ๋ก ใ๋ณตํฉ ์ฑ์ฅใ์ ํฉ๋๋ค. ํ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋๋ง๋ค ํ ์ ์ฒด ๋ฅ๋ ฅ์ด ํฅ์๋๋ฉฐ, ๋งค๋ฒ ์ฒ์๋ถํฐ ๋ค์ ์์ํ์ง ์์๋ ๋ฉ๋๋ค.
์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ํด๊ฒฐ
1. Daemon์ด ์๋ฒ์ ์ฐ๊ฒฐ๋์ง ์์
# ์์ฒด ํธ์คํ
์์๋ ๋จผ์ ์๋ฒ ์ฃผ์๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค
multica config show # ํ์ฌ ์ค์ ํ์ธ
# ํด๋ผ์ฐ๋์ ์ฐ๊ฒฐ ์ค์ธ๋ฐ ์์ฒด ํธ์คํ
์ ์ฐ๊ฒฐํ๊ณ ์ถ๋ค๋ฉด
multica config set server_url ws://localhost:8080/ws
multica daemon stop
multica daemon start
2. Runtime์ด ์คํ๋ผ์ธ์ผ๋ก ํ์๋จ
# AI CLI๊ฐ ์ค์น๋์ด ์๊ณ PATH์ ์๋์ง ํ์ธ
which claude
which codex
# Daemon ์ฌ์์
multica daemon stop
multica daemon start
# ์ํ ํ์ธ
multica daemon status
3. Issue๋ฅผ ํ ๋นํ๋๋ฐ Agent๊ฐ ๋ฐ์ํ์ง ์์
๊ฐ๋ฅํ ์์ธ 3๊ฐ์ง:
# ์์ธ 1: Daemon์ด ์คํ๋์ง ์์
multica daemon status
# ์์ธ 2: Workspace๊ฐ watch๋์ง ์์
multica workspace list # watch ์ํ ํ์ธ
multica workspace watch <workspace-id>
# ์์ธ 3: Agent๊ฐ ํด๋น Workspace๋ฅผ watchํ์ง ์์
# Settings โ Workspaces์์ Workspace๊ฐ ์ฒดํฌ๋์ด ์๋์ง ํ์ธ
4. Docker ์ปจํ ์ด๋ ํฌ์ค ์ฒดํฌ ์คํจ
# ๋ชจ๋ ์ปจํ
์ด๋ ์ํ ํ์ธ
docker compose -f docker-compose.selfhost.yml ps
# ๋ฐฑ์๋ ๋ก๊ทธ ํ์ธ
docker compose -f docker-compose.selfhost.yml logs backend
# ํํ ์์ธ: PostgreSQL์ด ์ค๋น๋๊ธฐ ์ ์ ๋ฐฑ์๋๊ฐ ์์๋จ
# 10์ด ๊ธฐ๋ค๋ฆฐ ๋ค ์ฌ์๋
docker compose -f docker-compose.selfhost.yml restart backend
5. ๋ก๊ทธ์ธ ์คํจ( Magic Link๋ฅผ ๋ฐ์ง ๋ชปํจ )
# .env์ RESEND_API_KEY๊ฐ ์ค์ ๋์ด ์๋์ง ํ์ธ
grep RESEND .env
# ์๋ค๋ฉด https://resend.com ์์ API Key๋ฅผ ๋ฐ๊ธ๋ฐ์ผ์ธ์
# ๊ทธ๋ฆฌ๊ณ .env์ ์ถ๊ฐ
RESEND_API_KEY=re_xxxxx
[email protected]
# ๋ฐฑ์๋ ์ฌ์์
docker compose -f docker-compose.selfhost.yml restart backend
6. Agent ์คํ ์๊ฐ ์ด๊ณผ
Agent์ ๊ธฐ๋ณธ ์คํ ํ์์์์ 2์๊ฐ์ ๋๋ค. ์์ ์ด ๋๋ฌด ํฌ๋ค๋ฉด:
# ํ์์์ ์ฐ์ฅ(๋จ์: ์๊ฐ)
export MULTICA_AGENT_TIMEOUT=8h
multica daemon stop
multica daemon start
๋๋ Issue์์ ํฐ ์์ ์ ์ฌ๋ฌ ๊ฐ์ ์์ Issue๋ก ์ชผ๊ฐ์, Agent์๊ฒ ๋จ๊ณ์ ์ผ๋ก ํ ๋นํด ์๋ฃํ์ธ์.
ํ์ฅ ์ฝ๊ธฐ / ๊ณ ๊ธ ๋ฐฉํฅ
Multica Cloud: ์ง์ ๋ฐฐํฌํ๊ณ ์ถ์ง ์๋ค๋ฉด multica.ai์ ๋ฑ๋กํด์ ๋ฐ๋ก ์ฌ์ฉํ์ธ์. ์ ๋ก ๊ตฌ์ฑ์ผ๋ก ์ธ ์ ์์ต๋๋ค. ํด๋ผ์ฐ๋๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ฉฐ, ๋ฉํฐ Workspace, ๋ฉํฐ Agent, ์คํฌ ๊ด๋ฆฌ๋ ํฌํจํฉ๋๋ค.
๋ค์ค Runtime ํผํฉ: ํ ๋์ ๋จธ์ ์์ ์ฌ๋ฌ Daemon ์ค์ ํ์ผ์ ์คํํ ์ ์์ต๋๋ค(multica --profile staging daemon start). ๋๋ ๋ก์ปฌ Runtime๊ณผ ํด๋ผ์ฐ๋ Runtime์ ํจ๊ป ์์ด ์ฐ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ฉฐ, ์ฌ๋ฌ ํ๊ฒฝ์์ ๊ฐ๋ฐํ ๋ ์ ํฉํฉ๋๋ค.
4๋ Runtime ๋น๊ต: Claude Code(Anthropic), Codex(OpenAI), OpenClaw(๋ก์ปฌ Agent), OpenCode๋ ๊ฐ๊ฐ ํน์ง์ด ์์ต๋๋ค. Claude Code๋ ์ฝ๋ ์ดํด์ ์์ ์ ๊ฐ์ฅ ๊ฐํ๊ณ , Codex๋ ๋ฒ์ฉ ์์ ์ ๋ ์ ์ฐํ๋ฉฐ, OpenClaw์ ๋ก์ปฌ ํด์ฒด์ธ์ด ํ์ํ ์๋๋ฆฌ์ค์ ์ ํฉํฉ๋๋ค. ์์ ์ ํ์ ๋ง๋ Runtime์ ์ ํํ์ธ์.
์คํฌ์ ์ฌ์ธต ํ์ฉ: ์คํฌ์ด ์ง์ง ์ฌ์ฌ์ฉ๋๋๋ก ํ๋ ค๋ฉด, ๋จ์ํ ์์นด์ด๋ธ๋ก ์ ๋ฝํ์ง ์๊ฒ ํด์ผ ํฉ๋๋ค. ์ฝ๋ ๋ฆฌ๋ทฐ์ ๋น์ทํ ์คํฌ ์ฌ์ฌ ๋ฉ์ปค๋์ฆ์ ๋ง๋ค๊ณ , ํจ๊ณผ์ ์ธ ์คํฌ์ ์ ๊ธฐ์ ์ผ๋ก ์ ๋ฆฌํ๋ฉฐ, ์ค๋๋ ์คํฌ์ ํ๊ธฐํด ํ์ AI ์ญ๋์ด ์ง์์ ์ผ๋ก ์งํํ๋๋ก ํ ์ ์์ต๋๋ค.
์ํคํ ์ฒ ๋ถ์: Multica์ ๋ฐฑ์๋๋ Go(Chi ๋ผ์ฐํฐ + WebSocket)์ด๊ณ , ํ๋ก ํธ์๋๋ Next.js 16(App Router + Zustand + TanStack Query)์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ PostgreSQL 17 + pgvector(๋ฒกํฐ ์ ์ฅ์)๋ฅผ ์ฌ์ฉํฉ๋๋ค. WebSocket ์ค์๊ฐ ํธ์๋ ์์คํ ์ ํต์ฌ์ ๋๋ค. Agent์ ๋งค ๋จ๊ณ ์คํ์ด ์์ ๋ณด๋๋ก ํธ์๋๋ฏ๋ก ์๋ก๊ณ ์นจ ์์ด ์งํ ์ํฉ์ ํ์ธํ ์ ์์ต๋๋ค.