๐ค Vivid-AI ํ์ ๋ฐ ์จ๋ณด๋ฉ ๊ฐ์ด๋
Vivid-AI ํ๋ก์ ํธ์ ํฉ๋ฅํ์ ๊ฒ์ ํ์ํฉ๋๋ค! ๐ ์ด ๋ฌธ์๋ ์๋ก์ด ํ์์ด ๊ฐ๋ฐ ํ๊ฒฝ์ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ๊ณ , ๊ธฐ์กด ํ์๋ค๊ณผ ํจ์จ์ ์ผ๋ก ํ์ ํ๊ธฐ ์ํ ํ์ ๊ฐ์ด๋๋ผ์ธ์ ์ ๊ณตํฉ๋๋ค.
1. ํ๋ก์ ํธ ๊ตฌ์กฐ ๋ฐ ๊ฐ์โ
vivid-ai๋ ์ ์ฒด ํ๋ก์ ํธ๋ฅผ ์์ฐ๋ฅด๋ ์์ ๋ ํฌ์งํ ๋ฆฌ(Parent Repository)์ด๋ฉฐ, ๊ฐ ์๋น์ค๋ Git Submodule ํํ๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
| ๋ชจ๋๋ช | ์ญํ ๋ฐ ์ค๋ช | ์คํ ํ์ |
|---|---|---|
backend-vivid-ai | Nest.js ๊ธฐ๋ฐ API ์๋ฒ. ๋น์ฆ๋์ค ๋ก์ง, ์ธ์ฆ, DB/Redis ๊ด๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. | โ |
frontend-vivid-ai | Next.js ๊ธฐ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ . ์ฌ์ฉ์ UI/UX๋ฅผ ์ ๊ณตํฉ๋๋ค. | โ |
post-processing-worker | Python ๊ธฐ๋ฐ ํ์ฒ๋ฆฌ ์์ปค. S3 raw/ ๊ฒฐ๊ณผ๋ฌผ์ ์ธ๋ค์ผ/preview๋ฅผ ๋ง๋ค๊ณ creations/์ ์ต์ข
๊ฒฐ๊ณผ ์ธํธ๋ฅผ ์ ์ฅํฉ๋๋ค. | โ |
ai-server | ComfyUI์ ai-node-agent๋ก ๊ตฌ์ฑ๋ ์์ฑ ์คํ๋ถ. local์์๋ Docker Compose๋ก ์คํํ๋ฉฐ, API ๋
ธ๋ ๊ธฐ๋ฐ workflow๋ฅผ ํ
์คํธํฉ๋๋ค. | โ |
docs-vivid-ai | Docusaurus ๊ธฐ๋ฐ ๋ฌธ์ ์ ์ฅ์. ํ๋ก์ ํธ์ ๋ชจ๋ ๊ธฐ์ ๋ฌธ์๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. | โ |
2. ํ์ ์ค๋น ์ฌํญ (Prerequisites)โ
์์ ์ ์์ํ๊ธฐ ์ ์ ๋ค์ ๋๊ตฌ๋ค์ ์ค์นํ๊ณ ์ค์ ํด์ผ ํฉ๋๋ค.
๐ ์ค์น ๋๊ตฌโ
- Node.js:
v22.20.0๋ฒ์ ์ ๊ถ์ฅํฉ๋๋ค. (nvm์ฌ์ฉ ๊ถ์ฅ) - Docker Desktop: ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค(PostgreSQL) ๋ฐ ๊ฐ์ข ์ปจํ ์ด๋ ์คํ์ ์ํด ํ์์ ๋๋ค.
- Git: ๋ฒ์ ๊ด๋ฆฌ ์์คํ .
- PgAdmin4 (์ ํ): ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ๋ฅผ ์ํ GUI ๋๊ตฌ.
๐ ๋ณด์ ๋ฐ ํ๊ฒฝ ๋ณ์ ์์ฒญโ
๋ณด์์ Git์ ํฌํจ๋์ง ์๋ ๋ฏผ๊ฐํ ์ ๋ณด๋ค์ ๊ธฐ์กด ํ์(๊ด๋ฆฌ์)์๊ฒ ์ง์ ์์ฒญํ์ฌ ๋ฐ์์ผ ํฉ๋๋ค.
.envํ์ผ๋ค:backend-vivid-ai/.env(DB ์ ์ ์ ๋ณด, AWS ํค ๋ฑ)frontend-vivid-ai/.env.local(API URL, ์ธ์ฆ/๊ฒฐ์ ๊ด๋ จ ๊ณต๊ฐ ์ค์ ๋ฑ)ai-server/.envpost-processing-worker/.env
- AWS local ๋ฆฌ์์ค ์ ๊ทผ ๊ถํ:
- local ๊ฐ๋ฐ๋ ์ค์ AWS SQS/S3๋ฅผ ์ฌ์ฉํฉ๋๋ค.
vivid-ai-computation-queue-local,vivid-ai-post-processing-worker-queue-local, local media bucket์ ์ ๊ทผ ๊ฐ๋ฅํ credential์ ์์ฒญํ์ธ์.- local media bucket์ ์์ธ ๋ฆฌ์ (
ap-northeast-2)์ ์์ฑ๋์ด ์์ผ๋ฉฐ,raw/,creations/,generation/source/,generation/work-input/,temp/๋ฑ prefix๋ก ์ญํ ์ ๋ถ๋ฆฌํฉ๋๋ค. ์ธ๋ถ ๊ธฐ์ค์ S3 media bucket ์ค์ ์ ํ์ธํ์ธ์. - local credential์ prod queue/bucket์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ ํ๋์ด์ผ ํฉ๋๋ค.
3. ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ๋ฐ ์คํ (Step-by-Step)โ
Step 1. ์ ์ฅ์ ํด๋ก ๋ฐ ์๋ธ๋ชจ๋ ์ด๊ธฐํโ
# 1. ๋ฉ์ธ ์ ์ฅ์ ํด๋ก (Organization ์ฃผ์ ํ์ธ)
git clone https://github.com/vivid-ai-org/vivid-ai.git
# 2. ํ๋ก์ ํธ ํด๋ ์ด๋
cd vivid-ai
# 3. ์๋ธ๋ชจ๋ ์ด๊ธฐํ ๋ฐ ์
๋ฐ์ดํธ (ํ์)
git submodule update --init --recursive
Step 2. Local infrastructure ์คํโ
๋ก์ปฌ ๊ฐ๋ฐ์ Docker Compose๋ก Postgres, Redis, ComfyUI, ai-node-agent, post-processing-worker๋ฅผ ์คํํ๊ณ , SQS/S3๋ง AWS cloud resource๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ ์ฒด ๊ธฐ์ค์ ํ์ฌ ๊ถ์ฅ ์ธํ๋ผ ํ๋์ ํ์ธํฉ๋๋ค.
Step 3. ๋ชจ๋๋ณ ์คํโ
๐ฅ๏ธ Backend (Nest.js)โ
cd backend-vivid-ai
# 1. ๋ก์ปฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค(PostgreSQL) ์คํ
docker-compose up -d
# 2. ์์กด์ฑ ์ค์น
npm install
# 3. ์๋ฒ ์คํ
npm run start
- ์๋ฒ ์ฃผ์:
http://localhost:3000 - API ๋ฌธ์:
http://localhost:3000/api-docs
๐จ Frontend (Next.js)โ
cd frontend-vivid-ai
# 1. ์์กด์ฑ ์ค์น
npm install
# 2. ๊ฐ๋ฐ ์๋ฒ ์คํ
npm run start
- ์น ์ฃผ์:
http://localhost:4000
โ๏ธ Post-Processing Worker (Python)โ
cd post-processing-worker
# Docker ์ปจํ
์ด๋๋ก ์คํ
docker-compose up -d
๐ง AI Server (ComfyUI + ai-node-agent)โ
cd ai-server
# ComfyUI์ ai-node-agent ์คํ
docker compose up -d --build
4. Git ๋ธ๋์น ์ ๋ต ๋ฐ ํ์ ํ๋ก์ฐโ
์์ ์ ์ธ ๋ฐฐํฌ๋ฅผ ์ํด ์๊ฒฉํ ๋ธ๋์น ์ ๋ต์ ๋ฐ๋ฆ ๋๋ค.
๐ณ ๋ธ๋์น ์ข ๋ฅโ
prod: ์ด์(Production) ๋ฐฐํฌ์ฉ ๋ธ๋์น. ๊ฐ์ฅ ์์ ์ ์ธ ์ํ์ ๋๋ค.dev: ๊ฐ๋ฐ(Development) ํตํฉ ๋ฐ ํ ์คํธ์ฉ ๋ธ๋์น.feature/*: ์๋ก์ด ๊ธฐ๋ฅ ๊ฐ๋ฐ์ฉ (์:feature/login-ui).fix/*: ๋ฒ๊ทธ ์์ ์ฉ.
๐ ์์ ์์ (Workflow) ์์ธโ
1. ๋ธ๋์น ์์ฑ (Start)
์๋ก์ด ๊ธฐ๋ฅ(Feature)์ด๋ ๋ฒ๊ทธ ์์ (Fix)์ ์์ํ ๋๋ ๋ฌด์กฐ๊ฑด ์ต์ prod์์ ๋ธ๋์น๋ฅผ ์์ฑํฉ๋๋ค.
# 1. prod ๋ธ๋์น๋ก ์ด๋ ๋ฐ ์ต์ ํ
git checkout prod
git pull origin prod
# 2. ์์
๋ธ๋์น ์์ฑ (๋ช
๋ช
๊ท์น: feature/๊ธฐ๋ฅ๋ช
, fix/๋ฒ๊ทธ๋ช
)
git checkout -b feature/new-dashboard-ui
2. ์์ ๋ฐ ์ปค๋ฐ (Work) ๋ก์ปฌ์์ ์์ ์ ์งํํฉ๋๋ค. ์ปค๋ฐ ๋ฉ์์ง๋ Conventional Commits ๊ท์น์ ๊ถ์ฅํฉ๋๋ค.
- ์:
feat: ์๋ก์ด ๋์๋ณด๋ ๋ ์ด์์ ์ ์ฉ,fix: ๋ก๊ทธ์ธ ๋ฒํผ ํด๋ฆญ ๋ถ๊ฐ ๋ฌธ์ ์์
3. ๊ฐ๋ฐ ์๋ฒ ๋ฐฐํฌ ๋ฐ ํ ์คํธ (Test on Dev) ์์ ํ ๋ด์ฉ์ ๊ฐ๋ฐ ์๋ฒ(Dev)์ ๋ฐ์ํ์ฌ ํ ์คํธํฉ๋๋ค.
# 1. dev ๋ธ๋์น๋ก ์ด๋ ๋ฐ ์ต์ ํ
git checkout dev
git pull origin dev
# 2. ์์
๋ธ๋์น๋ฅผ dev์ ๋ณํฉ (๋ฐ๋์ --no-ff ์ฌ์ฉ)
git merge --no-ff feature/new-dashboard-ui
# (์ถฉ๋ ๋ฐ์ ์ ํด๊ฒฐ ํ commit)
# 3. dev ์๊ฒฉ ์ ์ฅ์๋ก ํธ์ (CI/CD ์๋ ๋ฐฐํฌ ํธ๋ฆฌ๊ฑฐ)
git push origin dev
๐จ ์ฃผ์: ์ด๋
feature/new-dashboard-ui๋ธ๋์น๋ ์ญ์ ํ์ง ์์ต๋๋ค. Prod ๋ฐฐํฌ๋ฅผ ์ํด ํ์ํฉ๋๋ค.
4. ์ด์ ์๋ฒ ๋ฐฐํฌ (Release to Prod) Dev ํ๊ฒฝ์์ ๊ฒ์ฆ์ด ์๋ฃ๋ ๋ธ๋์น๋ง Prod์ ๋ณํฉํฉ๋๋ค.
# 1. prod ๋ธ๋์น๋ก ์ด๋ ๋ฐ ์ต์ ํ
git checkout prod
git pull origin prod
# 2. ๊ฒ์ฆ๋ ์์
๋ธ๋์น๋ฅผ prod์ ๋ณํฉ
git merge --no-ff feature/new-dashboard-ui
# 3. prod ์๊ฒฉ ์ ์ฅ์๋ก ํธ์
git push origin prod
# 4. (์ ํ) ์์
๋ธ๋์น ์ญ์
git branch -d feature/new-dashboard-ui
5. ํ๋ก์ ํธ ์ปจ๋ฒค์ (Conventions)โ
๐ ์ฝ๋ ์คํ์ผ ๋ฐ ํฌ๋งทํ โ
- ์คํ์ผ๋ง: **MUI (Material UI)**์
sxprops๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ผ๋งํฉ๋๋ค. - ๋ฆฐํ
๋ฐ ํฌ๋งทํ
:
ESLint์Prettier์ค์ ์ด ๋์ด ์์ต๋๋ค.- VS Code ํ์ฅ ํ๋ก๊ทธ๋จ: ์ผ๊ด๋ ์ฝ๋ ์คํ์ผ ์ ์ง๋ฅผ ์ํด ๋ค์ ํ์ฅ ํ๋ก๊ทธ๋จ ์ค์น๋ฅผ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
- ESLint: ์ฝ๋์์ ๋ฐ๊ฒฌ๋ ๋ฌธ์ (๋ฒ๊ทธ, ์คํ์ผ ๋ฌธ์ ๋ฑ)๋ฅผ ์ฆ์ ์๊ฐ์ ์ผ๋ก ํผ๋๋ฐฑํด ์ค๋๋ค.
- Prettier - Code formatter: ํ์ผ์ ์ ์ฅํ ๋ ์๋์ผ๋ก ์ฝ๋ ํฌ๋งทํ ์ ํด์ค๋๋ค.
settings.json์editor.formatOnSave: true์ค์ ์ ์ถ๊ฐํ๋ฉด ํธ๋ฆฌํฉ๋๋ค.
- VS Code ํ์ฅ ํ๋ก๊ทธ๋จ: ์ผ๊ด๋ ์ฝ๋ ์คํ์ผ ์ ์ง๋ฅผ ์ํด ๋ค์ ํ์ฅ ํ๋ก๊ทธ๋จ ์ค์น๋ฅผ ๊ฐ๋ ฅํ ๊ถ์ฅํฉ๋๋ค.
๐ ํด๋ ๊ตฌ์กฐโ
src/featuresํด๋ ํ์์ ๊ธฐ๋ฅ๋ณ๋ก(์:auth,gallery,generation) ์ฝ๋๋ฅผ ๋ชจ์๋๋ Feature-based ๊ตฌ์กฐ๋ฅผ ์งํฅํฉ๋๋ค.
6. ๊ธฐ๋ฅ ๊ตฌํ ๋ฐ ๋ฐฑ์๋ ์ฐ๋ ๊ฐ์ด๋ (Core Features)โ
UI/UX ๊ตฌํ์ ์์ ๋กญ๊ฒ ์งํํ์๋, ๋ฐฑ์๋์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํต์ฌ ๋ก์ง์ ์๋ ๊ฐ์ด๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ๊ธฐ์กด ์ํคํ ์ฒ์ ์ผ๊ด์ฑ์ ์ ์งํด ์ฃผ์ธ์.
๐ 1. ๋์ ํผ(Dynamic Form) ์์ฑ ๋ฐ ์ ์ถโ
์ฐ๋ฆฌ ์๋น์ค๋ ๊ณ ์ ๋ ์ ๋ ฅ ํผ์ด ์๋, ComfyUI ์ํฌํ๋ก์ฐ ํ ํ๋ฆฟ์ ๋ฐ๋ผ ์ ๋ ฅ ํ๋๊ฐ ๋์ ์ผ๋ก ๋ณํ๋ ๊ตฌ์กฐ์ ๋๋ค.
- ํ
ํ๋ฆฟ ์กฐํ:
GET /api/v1/workflows/:idAPI๋ฅผ ํตํด ํ ํ๋ฆฟ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ต๋๋ค. - ์คํค๋ง ํ์ฑ: ์๋ต ๋ฐ์ดํฐ ์ค
userInputsํ๋(JSON Schema)๋ฅผ ๋ถ์ํ์ฌ UI๋ฅผ ๋ ๋๋งํด์ผ ํฉ๋๋ค.widget:text(Input),number(Slider/Input),combo(Select) ๋ฑmin,max: ์ซ์ ์ ๋ ฅ์ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฒ์
- ์์ฑ ์์ฒญ: ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ๋ค์ ๋ชจ์
modifications๊ฐ์ฒด๋ก ๊ตฌ์ฑํ์ฌ ์ ์กํฉ๋๋ค.- API:
POST /api/v1/generation/from-template - Body ์์:
{
"workflowId": "...",
"modifications": {
"seed": 12345,
"prompt": "A futuristic city",
"cfg": 7.5
}
}
- API:
๐ผ๏ธ 2. AI ์นํ์ ํด์๋ ๊ท์น (Image Size)โ
AI ๋ชจ๋ธ์ 8์ ๋ฐฐ์(๊ถ์ฅ 64์ ๋ฐฐ์) ํฝ์ ์์ ์ต์ ์ ์ฑ๋ฅ์ ๋ ๋๋ค. UI์ SD/HD/FHD ๋ฒํผ์ ์๋ ํ ์ด๋ธ์ ๋ง์ถฐ ๋ณํ๋์ด ์ ์ก๋์ด์ผ ํฉ๋๋ค.
- SD (Standard): ๊ธฐ๋ณธ ์์ฑ/์ ๋น์ฉ ์ต์
- HD (High): ์ผ๋ฐ ๊ณ ํ์ง ์ต์
- FHD (Full High): HD๋ณด๋ค ๋์ ๊ณ ํด์๋ ์ต์
| ๋น์จ (W:H) | SD | HD | FHD | ๋น๊ณ |
|---|---|---|---|---|
| 1:2 | 512 x 1024 | 704 x 1408 | 960 x 1920 | |
| 9:16 | 512 x 912 | 768 x 1344 | 1080 x 1920 | ๐ฑ Shorts/Reels ์ต์ ํ |
| 2:3 | 512 x 768 | 832 x 1216 | 1280 x 1920 | |
| 3:4 | 512 x 680 | 896 x 1152 | 1248 x 1664 | |
| 1:1 | 512 x 512 | 1024 x 1024 | 1440 x 1440 | ๐ง ์ธ์คํ๊ทธ๋จ |
| 4:3 | 680 x 512 | 1152 x 896 | 1664 x 1248 | |
| 3:2 | 768 x 512 | 1216 x 832 | 1920 x 1280 | |
| 16:9 | 912 x 512 | 1344 x 768 | 1920 x 1080 | ๐บ ์ ํ๋ธ/์ธ๋ค์ผ ์ต์ ํ |
| 2:1 | 1024 x 512 | 1408 x 704 | 1920 x 960 |
7. ๋ฐฐํฌ (Deployment)โ
- Dev ๋ฐฐํฌ:
dev๋ธ๋์น์ ์ฝ๋๊ฐ ํธ์๋๋ฉด ์๋์ผ๋ก ๊ฐ๋ฐ ์๋ฒ์ ๋ฐฐํฌ๋ฉ๋๋ค. - Prod ๋ฐฐํฌ:
prod๋ธ๋์น์ ์ฝ๋๊ฐ ๋ณํฉ๋๊ณ ๋ฆด๋ฆฌ์ค ํ๊ทธ๊ฐ ์์ฑ๋๋ฉด ์ด์ ์๋ฒ์ ๋ฐฐํฌ๋ฉ๋๋ค. - Docs ๋ฐฐํฌ: ๋ฌธ์ ๋ณ๊ฒฝ ์ฌํญ์ Vercel์ ํตํด ์๋์ผ๋ก ๋ฐฐํฌ๋ฉ๋๋ค.
๐ก ๋ฌธ์ ํด๊ฒฐ (Troubleshooting)โ
- Q: ๋ก์ปฌ ๋ฐฑ์๋๊ฐ ์ผ์ง์ง ์๊ณ Redis ์๋ฌ๊ฐ ๋์.
- A: SSH ํฐ๋๋ง์ด ์ผ์ ธ ์๋์ง ํ์ธํ์ธ์. Bastion Host IP ๋ฑ๋ก ์ฌ๋ถ๋ ํ์ธํด์ผ ํฉ๋๋ค.
- Q: DB ์ ์์ด ์ ๋ผ์.
- A: ๋ก์ปฌ DB๋ผ๋ฉด
docker ps๋ก ์ปจํ ์ด๋ ์ํ๋ฅผ ํ์ธํ์ธ์. Dev/Prod DB๋ผ๋ฉด PgAdmin์์ SSH ํฐ๋๋ง ์ค์ ์ ํ์ธํ์ธ์.
- A: ๋ก์ปฌ DB๋ผ๋ฉด
์ถ๊ฐ์ ์ธ ์ง๋ฌธ์ด๋ ๋ฌธ์ ๋ ํ ์ปค๋ฎค๋์ผ์ด์ ์ฑ๋์ ํตํด ์ธ์ ๋ ๋ฌธ์ํด ์ฃผ์ธ์! ๐