Skip to content

lastdays03/step-zero

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

436 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ StepZero (Core Engine)

StepZero ν”„λ‘œμ νŠΈμ˜ Core Engine(λ°±μ—”λ“œ + κΈ°λ³Έ ν”„λ‘ νŠΈμ—”λ“œ) λ ˆν¬μ§€ν† λ¦¬μž…λ‹ˆλ‹€. 이 λ¬Έμ„œλŠ” ν”„λ‘œμ νŠΈμ— 처음 ν•©λ₯˜ν•œ μ£Όλ‹ˆμ–΄ 개발자 뢄듀을 μœ„ν•΄ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.


πŸ“š 1. ν”„λ‘œμ νŠΈ κ°œμš”

이 ν”„λ‘œμ νŠΈλŠ” 초기 μŠ€νƒ€νŠΈμ—… μ°½μ—…μžλ₯Ό μœ„ν•œ AI μ•‘μ…€λŸ¬λ ˆμ΄νŒ… ν”Œλž«νΌμ˜ 핡심 엔진을 λ‹΄λ‹Ήν•©λ‹ˆλ‹€. μ‚¬μš©μžμ˜ μž…λ ₯을 λ°›μ•„ λ‘œλ“œλ§΅μ„ μƒμ„±ν•˜κ³ , RAG(Retrieval-Augmented Generation)λ₯Ό 톡해 λ§žμΆ€ν˜• 정보λ₯Ό μ œκ³΅ν•˜λŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€.

πŸ› οΈ 기술 μŠ€νƒ (Tech Stack)

ꡬ뢄 기술 μ„€λͺ…
Backend FastAPI (Python 3.13) κ³ μ„±λŠ₯ 비동기 μ›Ή ν”„λ ˆμž„μ›Œν¬. API μ„œλ²„ λ‹΄λ‹Ή.
Frontend Next.js 16 (App Router) React 기반 μ›Ή ν”„λ ˆμž„μ›Œν¬. UI/UX λ‹΄λ‹Ή.
Database PostgreSQL 16 + pgvector κ΄€κ³„ν˜• 데이터 및 벑터 μž„λ² λ”© μ €μž₯μ†Œ.
Cache Redis μ„Έμ…˜ 관리, μž‘μ—… 큐, 캐싱 μš©λ„.
Deploy Docker Compose 둜컬 개발 ν™˜κ²½ 톡일 및 배포 관리.

πŸ“‚ 2. ν”„λ‘œμ νŠΈ ꡬ쑰 (Folder Structure)

이 ν”„λ‘œμ νŠΈλŠ” Monorepo ꡬ쑰λ₯Ό λ”°λ¦…λ‹ˆλ‹€. ν•˜λ‚˜μ˜ μ €μž₯μ†Œ μ•ˆμ— λ°±μ—”λ“œμ™€ ν”„λ‘ νŠΈμ—”λ“œκ°€ ν•¨κ»˜ μžˆμŠ΅λ‹ˆλ‹€.

step-zero/
β”œβ”€β”€ app-backend/            # 🐍 FastAPI λ°±μ—”λ“œ μ½”λ“œ
β”‚   β”œβ”€β”€ app/                # μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜직
β”‚   β”‚   β”œβ”€β”€ api/            # API λΌμš°ν„° (v1)
β”‚   β”‚   β”œβ”€β”€ features/       # feature λ‹¨μœ„ 도메인/μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜직
β”‚   β”‚   β”œβ”€β”€ models/         # SQLModel/ORM λͺ¨λΈ
β”‚   β”‚   β”œβ”€β”€ repositories/   # 데이터 μ ‘κ·Ό 계측
β”‚   β”‚   β”œβ”€β”€ services/       # 곡톡 μ„œλΉ„μŠ€ (RAG, Chat λ“±)
β”‚   β”‚   β”œβ”€β”€ workers/        # ARQ 비동기 μ›Œμ»€
β”‚   β”‚   └── core/           # μ„€μ •(Config), DB μ—°κ²° λ“± 핡심 둜직
β”‚   β”œβ”€β”€ alembic/            # DB λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ (18개 파일)
β”‚   β”œβ”€β”€ scripts/            # 개발/운영 슀크립트
β”‚   β”œβ”€β”€ tests/              # ν…ŒμŠ€νŠΈ μ½”λ“œ (Pytest)
β”‚   └── Dockerfile
β”‚
β”œβ”€β”€ app-frontend/           # βš›οΈ Next.js ν”„λ‘ νŠΈμ—”λ“œ μ½”λ“œ
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ app/            # νŽ˜μ΄μ§€ 및 λΌμš°νŒ… (App Router)
β”‚   β”‚   β”œβ”€β”€ components/     # μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈ
β”‚   β”‚   β”œβ”€β”€ features/       # feature λ‹¨μœ„ λͺ¨λ“ˆ
β”‚   β”‚   β”œβ”€β”€ lib/            # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
β”‚   β”‚   └── providers/      # React Context Providers
β”‚   └── Dockerfile
β”‚
β”œβ”€β”€ docs/                   # πŸ“„ 기획 및 섀계 λ¬Έμ„œ (필독!)
β”œβ”€β”€ scripts/                # 루트 μœ ν‹Έλ¦¬ν‹° 슀크립트 (DB μ΄ˆκΈ°ν™” λ“±)
└── docker-compose.dev.yml  # 🐳 둜컬 개발 ν™˜κ²½ ꡬ성 파일

Backend 슀크립트 (app-backend/scripts/)

슀크립트 μš©λ„
setup_dev.sh 둜컬 κ°œλ°œν™˜κ²½ μ΄ˆκΈ°ν™” (uv sync + .env)
run_alembic.sh Alembic 래퍼 (예: ./scripts/run_alembic.sh upgrade head)
reset_migrations.sh λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 톡합 관리 (fresh / stamp / verify / status / history)
bootstrap_actionkit.sh ActionKit λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ + μ‹œλ“œ 톡합 μ‹€ν–‰
bootstrap_rag.sh RAG λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ + 벑터 μ‹œλ“œ 톡합 μ‹€ν–‰
seed_actionkit.py ActionKit μ‹œλ“œ 데이터 적재
seed_rag_vectors.py RAG 벑터 μž„λ² λ”© 적재
export_openapi.py OpenAPI μŠ€νŽ™ μΆ”μΆœ

πŸƒ 3. μ‹œμž‘ν•˜κΈ° (Quick Start)

κ°€μž₯ 쉽고 λΉ λ₯΄κ²Œ 개발 ν™˜κ²½μ„ μ„ΈνŒ…ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. Dockerκ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

1) ν•„μˆ˜ ν”„λ‘œκ·Έλž¨ μ„€μΉ˜

2) ν”„λ‘œμ νŠΈ μ‹€ν–‰ (ν•œ 방에 μ‹€ν–‰ν•˜κΈ°)

ν„°λ―Έλ„μ—μ„œ ν”„λ‘œμ νŠΈ 루트 경둜둜 μ΄λ™ν•œ λ’€ μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ„Έμš”.

# μ»¨ν…Œμ΄λ„ˆ λΉŒλ“œ 및 λ°±κ·ΈλΌμš΄λ“œ μ‹€ν–‰
docker compose -f docker-compose.dev.yml up -d --build

πŸ’‘ Tip: 둜그 확인이 ν•„μš”ν•˜λ©΄ μ„œλΉ„μŠ€λ³„λ‘œ μ‘°νšŒν•˜μ„Έμš”. docker compose -f docker-compose.dev.yml logs -f app-backend app-worker app-frontend

3) 접속 확인

싀행이 μ™„λ£Œλ˜λ©΄ λΈŒλΌμš°μ €μ—μ„œ μ•„λž˜ μ£Όμ†Œλ‘œ μ ‘μ†ν•΄λ³΄μ„Έμš”.

  • Frontend (메인 μ•±): http://localhost:3000
  • Backend (API λ¬Έμ„œ): http://localhost:8000/docs
  • DB 관리 (ν•„μš” μ‹œ): 별도 DB 툴(DBeaver λ“±) μ‚¬μš© (Port: 5432)
  • μƒνƒœ 확인: docker compose -f docker-compose.dev.yml ps

μ°Έκ³ : λ‘œλ“œλ§΅ 비동기 생성은 app-workerκ°€ μ‹€ν–‰ 쀑이어야 μ§„ν–‰λ©λ‹ˆλ‹€.

4) ν”„λ‘œλ•μ…˜ Compose μ‹€ν–‰

ν”„λ‘œλ•μ…˜μ€ docker-compose.prod.yml을 μ‚¬μš©ν•©λ‹ˆλ‹€.

# 1) μ„œλΉ„μŠ€λ³„ ν™˜κ²½ λ³€μˆ˜ 파일 μ€€λΉ„
cp app-backend/.env.example app-backend/.env
cp app-frontend/.env.example app-frontend/.env
# Docker Compose μ „μš© override (ν•„μš” μ‹œ)
cp app-backend/.env.docker.local.example app-backend/.env.docker.local
cp app-frontend/.env.docker.local.example app-frontend/.env.docker.local

# 2) ν”„λ‘œλ•μ…˜ 이미지 λΉŒλ“œ/기동
docker compose -f docker-compose.prod.yml up -d --build

# 3) λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ (ν•„μš” μ‹œ)
docker compose -f docker-compose.prod.yml exec -T app-backend \
  bash -lc "cd /app && ./scripts/run_alembic.sh upgrade head"

μ°Έκ³ :

  • docker-compose.prod.yml은 μ†ŒμŠ€ λ³Όλ₯¨ λ§ˆμš΄νŠΈμ™€ --reloadλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 배포 ν™˜κ²½μ—μ„œλŠ” docker exec stepzero-backend λŒ€μ‹  docker compose ... exec app-backend μ‚¬μš©μ„ ꢌμž₯ν•©λ‹ˆλ‹€.

πŸ”§ 4. 둜컬 개발 ν™˜κ²½ (심화)

DB와 Redis만 Docker둜 λ„μš°κ³ , ν”„λ‘ νŠΈ/λ°±μ—”λ“œλŠ” λ‘œμ»¬μ—μ„œ 직접 μ‹€ν–‰ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

1) DB & Redis만 μ‹€ν–‰

docker compose -f docker-compose.dev.yml up -d app-db app-redis

2) Backend 둜컬 μ‹€ν–‰

cd app-backend

# (졜초 1회) ν™˜κ²½λ³€μˆ˜ 파일 볡사
cp .env.example .env

# κ°œλ°œν™˜κ²½ μžλ™ μ΄ˆκΈ°ν™” (Python 3.13 + dev μ˜μ‘΄μ„±)
./scripts/setup_dev.sh

# μ„œλ²„ μ‹€ν–‰ / ν…ŒμŠ€νŠΈ / λ§ˆμ΄κ·Έλ ˆμ΄μ…˜
make run              # uvicorn 개발 μ„œλ²„ μ‹€ν–‰
make test             # pytest μ‹€ν–‰
make migrate-up       # alembic upgrade head
make migrate-verify   # λͺ¨λΈ ↔ DB μŠ€ν‚€λ§ˆ diff 검증

3) Frontend 둜컬 μ‹€ν–‰

cd app-frontend
pnpm install
pnpm dev

# λ°±μ—”λ“œ OpenAPI 기반 νƒ€μž… 동기화
pnpm types:sync

types:syncλŠ” μ‹€ν–‰ 쀑인 stepzero-backend μ»¨ν…Œμ΄λ„ˆμ—μ„œ OpenAPIλ₯Ό μΆ”μΆœν•©λ‹ˆλ‹€.

4) ν™˜κ²½λ³€μˆ˜ 파일 뢄리 κ·œμΉ™

둜컬 직접 μ‹€ν–‰κ³Ό Docker Compose 싀행을 파일둜 λΆ„λ¦¬ν•©λ‹ˆλ‹€. 같은 ν‚€κ°€ μ—¬λŸ¬ νŒŒμΌμ— 있으면 λ‚˜μ€‘μ— λ‘œλ“œλœ 파일 값이 μ΅œμ’…κ°’μž…λ‹ˆλ‹€.

파일 μš©λ„
app-backend/.env 곡유 κ°€λŠ₯ν•œ κΈ°λ³Έκ°’ (민감킀 κΈˆμ§€)
app-backend/.env.local 둜컬 μ „μš© λΉ„λ°€κ°’ (Git 좔적 μ œμ™Έ)
app-backend/.env.docker.local Docker Compose μ „μš© override (host=app-db λ“±)
app-frontend/.env NEXT_PUBLIC_* κΈ°λ³Έκ°’
app-frontend/.env.local ν”„λ‘ νŠΈ 둜컬 μ „μš© λΉ„λ°€κ°’
app-frontend/.env.docker.local ν”„λ‘ νŠΈ Docker Compose μ „μš© override
# μ΅œμ†Œ μ…‹μ—…
cp app-backend/.env.example app-backend/.env
cp app-frontend/.env.example app-frontend/.env

# Docker Compose μ „μš© (선택)
cp app-backend/.env.docker.local.example app-backend/.env.docker.local
cp app-frontend/.env.docker.local.example app-frontend/.env.docker.local

μ°Έκ³ :

  • λ°±μ—”λ“œλŠ” uvλ₯Ό νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €λ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. uvκ°€ μ„€μΉ˜λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ„€μΉ˜: curl -LsSf https://astral.sh/uv/install.sh | sh

πŸ—„οΈ 5. 데이터 관리 (λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ / μ‹œλ“œ)

Docker μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ μ‹€ν–‰ν•˜λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€. μ•„λž˜ μ˜ˆμ‹œλŠ” docker compose exec 기쀀이며, docker exec -it stepzero-backend bash -lc "cd /app && ..." ν˜•νƒœλ‘œλ„ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

DB λ§ˆμ΄κ·Έλ ˆμ΄μ…˜

# μƒˆ DB에 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ 전체 적용
docker compose -f docker-compose.dev.yml exec -T app-backend \
  bash -lc "cd /app && ./scripts/reset_migrations.sh fresh"

# κΈ°μ‘΄ DB에 alembic_version만 μ΅œμ‹ μœΌλ‘œ stamp (μŠ€ν‚€λ§ˆ λ³€κ²½ μ—†μŒ)
docker compose -f docker-compose.dev.yml exec -T app-backend \
  bash -lc "cd /app && ./scripts/reset_migrations.sh stamp"

# λͺ¨λΈ ↔ DB μŠ€ν‚€λ§ˆ diff 검증
docker compose -f docker-compose.dev.yml exec -T app-backend \
  bash -lc "cd /app && ./scripts/reset_migrations.sh verify"

ActionKit 데이터 μ‹œλ“œ

# λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ + μ‹œλ“œ 톡합 μ‹€ν–‰
cd app-backend
ACTIONKIT_BOOTSTRAP_MODE=docker ./scripts/bootstrap_actionkit.sh

# λ˜λŠ” κ°œλ³„ μ‹€ν–‰
docker compose -f docker-compose.dev.yml exec -T app-backend \
  bash -lc "cd /app && ./scripts/run_alembic.sh upgrade head"
docker compose -f docker-compose.dev.yml exec -T app-backend \
  bash -lc "cd /app && python scripts/seed_actionkit.py"

seed_actionkit.pyλŠ” 데이터가 이미 μ‘΄μž¬ν•˜λ©΄ skip ν•˜λ―€λ‘œ 초기 적재/리셋 후에 주둜 μ‹€ν–‰ν•©λ‹ˆλ‹€.

RAG 벑터 μ‹œλ“œ

RAGλŠ” DB λ§ˆμ΄κ·Έλ ˆμ΄μ…˜(pgvector extension 보μž₯)κ³Ό 벑터 적재λ₯Ό ν•¨κ»˜ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

# λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ + 벑터 μ‹œλ“œ 톡합 μ‹€ν–‰
cd app-backend
RAG_BOOTSTRAP_MODE=docker ./scripts/bootstrap_rag.sh

# ν…ŒμŠ€νŠΈμš© μΌλΆ€λ§Œ 적재 (예: 20개)
RAG_BOOTSTRAP_LIMIT=20 RAG_BOOTSTRAP_MODE=docker ./scripts/bootstrap_rag.sh
  • bootstrap_rag.sh λͺ¨λ“œ: RAG_BOOTSTRAP_MODE=docker|local|auto (κΈ°λ³Έ: auto)
  • κΈ°λ³Έ μ†ŒμŠ€ 경둜: app-backend/.temp/rag (PDF/Markdown μž¬κ·€ 탐색)

πŸ› 6. νŠΈλŸ¬λΈ”μŠˆνŒ… (자주 κ²ͺλŠ” 였λ₯˜)

Q1. "docker-credential-desktop ... executable file not found" 였λ₯˜

~/.docker/config.json νŒŒμΌμ„ μ—΄μ–΄ "credsStore": "desktop" 뢀뢄을 μ‚­μ œν•˜μ„Έμš”.

Q2. DB μ—°κ²° 였λ₯˜ λ˜λŠ” "database files are incompatible" 였λ₯˜

PostgreSQL 버전이 μ•ˆ λ§žκ±°λ‚˜ 데이터가 꼬인 κ²½μš°μž…λ‹ˆλ‹€. λ³Όλ₯¨μ„ μ§€μš°κ³  λ‹€μ‹œ μ‹œμž‘ν•˜μ„Έμš”.

docker compose -f docker-compose.dev.yml down -v
docker compose -f docker-compose.dev.yml up -d --build

Q3. "permission denied" (슀크립트 μ‹€ν–‰ 였λ₯˜)

# Mac/Linux
chmod +x scripts/init_db.sh

# Windows (Git Bash)
git update-index --add --chmod=+x scripts/init_db.sh

Q4. "Node.js version >=20.9.0 is required" 였λ₯˜

둜컬 μ‹€ν–‰ μ‹œ Node.js 20.9.0 이상이 ν•„μš”ν•©λ‹ˆλ‹€. Docker μ‹€ν–‰ μ‹œμ—λŠ” Dockerfile의 node:20-alpine 이미지λ₯Ό μœ μ§€ν•˜μ„Έμš”.


πŸ“ 7. 개발 κ°€μ΄λ“œ (Convention)

  • 컀밋 λ©”μ‹œμ§€: feat:, fix:, docs: λ“±μ˜ Conventional Commits κ·œμΉ™μ„ λ”°λ¦…λ‹ˆλ‹€.
  • μ½”λ“œ μŠ€νƒ€μΌ:
    • Backend: black, isort 포맷터 μ‚¬μš©
    • Frontend: Prettier 포맷터 μ‚¬μš© (μ„€μ •λœ 경우)
  • λ¬Έμ„œ: μž‘μ—… μ „ docs/ ν΄λ”μ˜ 섀계 λ¬Έμ„œλ₯Ό λ¨Όμ € μ½μ–΄λ³΄μ„Έμš”.

ν˜‘μ—… κ·œμΉ™ (Git-Flow + Commit Convention)

  1. 브랜치 μ „λž΅

    • main: 배포 κ°€λŠ₯ν•œ μ•ˆμ • 브랜치 (직접 push κΈˆμ§€, PR만 ν—ˆμš©, developμ—μ„œλ§Œ λ¨Έμ§€)
    • develop: κΈ°λ³Έ 브랜치이자 개발 톡합 브랜치
    • feature/*: κΈ°λŠ₯ 브랜치 (μž‘μ—… ν›„ develop으둜 PR)
    • 브랜치λͺ…: feature/<issue-number>-<short-slug> (예: feature/1-login-page)
  2. 컀밋 λ©”μ‹œμ§€ κ·œμΉ™

    • ν˜•μ‹: type: subject
    • ν—ˆμš© νƒ€μž…: feat, fix, docs, refactor, test, chore, perf, ci, build, revert
  3. 둜컬 ν›… ν™œμ„±ν™”

    # μ €μž₯μ†Œ λ£¨νŠΈμ—μ„œ 1회 μ‹€ν–‰
    pnpm install
    • commit-msg: Conventional Commits 검사
    • pre-push: backend smoke subset(tests/services, tests/repositories, tests/integration) + frontend lint 검사
  4. CI 검사

    • PR μ‹œ 브랜치λͺ… κ·œμΉ™ 검사
    • PR 컀밋 λ©”μ‹œμ§€(commitlint) 검사
    • backend 전체 νšŒκ·€ pytest -q -m "not slow and not requires_openai"
    • frontend lint, test, build 검사

Made with ❀️ by StepZero Team

About

StepZero Service Planning Documents

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors