Skip to content

gguip1/ArcanaWhisper-Back

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

90 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

ArcanaWhisper Backend

AI ํƒ€๋กœ ๋ฆฌ๋”ฉ ์„œ๋น„์Šค ๋ฐฑ์—”๋“œ API

Python 3.11 AWS Lambda API Gateway Firebase Gemini

Service โ€ข Frontend Repo


์†Œ๊ฐœ

ArcanaWhisper Backend๋Š” AI ํƒ€๋กœ ๋ฆฌ๋”ฉ ์„œ๋น„์Šค์˜ API ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. AWS Lambda ๊ธฐ๋ฐ˜ ์„œ๋ฒ„๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜๋กœ ๊ตฌ์ถ•๋˜์—ˆ์œผ๋ฉฐ, Google Gemini์™€ LangChain์„ ํ™œ์šฉํ•˜์—ฌ ํƒ€๋กœ ํ•ด์„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŠน์ง•

  • ์„œ๋ฒ„๋ฆฌ์Šค - AWS Lambda๋กœ ์šด์˜ ๋น„์šฉ ์ตœ์ ํ™”
  • ํ™•์žฅ์„ฑ - API Gateway + Lambda ์ž๋™ ์Šค์ผ€์ผ๋ง
  • ๋ณด์•ˆ - Firebase Auth ํ† ํฐ ๊ฒ€์ฆ, SSM Parameter Store ์‹œํฌ๋ฆฟ ๊ด€๋ฆฌ

์•„ํ‚คํ…์ฒ˜

image

๊ธฐ์ˆ  ์Šคํƒ

Backend

Category Technology
Language Python 3.11
Compute AWS Lambda (Serverless)
API API Gateway HTTP API
AI/LLM LangChain + Google Gemini
Database Firebase Firestore
Auth Firebase Authentication
Secrets AWS SSM Parameter Store
IaC AWS SAM

DevOps

Category Technology
CI/CD GitHub Actions
Deployment AWS SAM CLI
Monitoring CloudWatch Logs

์ฃผ์š” ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ ์„ค๋ช…
AI ํƒ€๋กœ ๋ฆฌ๋”ฉ Gemini ๊ธฐ๋ฐ˜ ํƒ€๋กœ ํ•ด์„
์‚ฌ์šฉ์ž ์ธ์ฆ Firebase ID Token ๊ฒ€์ฆ (Google, Apple)
Rate Limiting Guest 1ํšŒ/์ผ, ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž 10ํšŒ/์ผ
ํžˆ์Šคํ† ๋ฆฌ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž ํƒ€๋กœ ๊ธฐ๋ก ์ €์žฅ ๋ฐ ์กฐํšŒ
์‚ฌ์šฉ๋Ÿ‰ ์กฐํšŒ ์ผ์ผ ์‚ฌ์šฉ๋Ÿ‰ ๋ฐ ๋ฆฌ์…‹ ์‹œ๊ฐ„ ํ™•์ธ
๊ฒฐ๊ณผ ๊ณต์œ  ์นด์นด์˜คํ†ก ๋“ฑ ์™ธ๋ถ€ ๊ณต์œ  ๋งํฌ ์ƒ์„ฑ (30์ผ ๋งŒ๋ฃŒ)

API ์—”๋“œํฌ์ธํŠธ

Method Endpoint Description Auth
GET /health ํ—ฌ์Šค ์ฒดํฌ -
POST /tarot ํƒ€๋กœ ๋ฆฌ๋”ฉ ์š”์ฒญ Required
GET /usage ์‚ฌ์šฉ๋Ÿ‰ ์กฐํšŒ Required
GET /tarot/history ํžˆ์Šคํ† ๋ฆฌ ์กฐํšŒ Login Only
POST /readings ๊ณต์œ  ๋งํฌ ์ƒ์„ฑ Required
GET /readings/{share_id} ๊ณต์œ  ๊ฒฐ๊ณผ ์กฐํšŒ -

์ธ์ฆ ๋ฐฉ์‹

# ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž
Authorization: Bearer <firebase_id_token>

# Guest (๋น„๋กœ๊ทธ์ธ)
X-Guest-Token: <uuid>

Rate Limit

์‚ฌ์šฉ์ž ์ผ์ผ ์ œํ•œ ๋ฆฌ์…‹ ์‹œ๊ฐ„
Guest 1ํšŒ KST 00:00
๋กœ๊ทธ์ธ 10ํšŒ KST 00:00

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ lambda_handler.py        # Lambda ์—”ํŠธ๋ฆฌํฌ์ธํŠธ, ๋ผ์šฐํŒ…
โ”‚   โ”œโ”€โ”€ services/                # ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง
โ”‚   โ”‚   โ”œโ”€โ”€ tarot_service.py     # ํƒ€๋กœ ๋ฆฌ๋”ฉ ์„œ๋น„์Šค
โ”‚   โ”‚   โ”œโ”€โ”€ history_service.py   # ํžˆ์Šคํ† ๋ฆฌ ์„œ๋น„์Šค
โ”‚   โ”‚   โ””โ”€โ”€ usage_service.py     # Rate Limit ์„œ๋น„์Šค
โ”‚   โ”œโ”€โ”€ repository/              # ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต
โ”‚   โ”‚   โ”œโ”€โ”€ history_repository.py
โ”‚   โ”‚   โ””โ”€โ”€ reading_repository.py # ๊ณต์œ  ๋งํฌ ๊ด€๋ฆฌ
โ”‚   โ””โ”€โ”€ schema/                  # Pydantic ๋ชจ๋ธ
โ”‚       โ””โ”€โ”€ tarot.py
โ”œโ”€โ”€ infra/
โ”‚   โ””โ”€โ”€ template.yaml            # AWS SAM ํ…œํ”Œ๋ฆฟ
โ”œโ”€โ”€ docs/                        # API ๋ฌธ์„œ
โ”œโ”€โ”€ .github/workflows/           # CI/CD
โ””โ”€โ”€ requirements.txt

์‹œ์ž‘ํ•˜๊ธฐ

์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ

  • Python 3.11+
  • AWS CLI & SAM CLI
  • Firebase ํ”„๋กœ์ ํŠธ (Firestore, Auth ํ™œ์„ฑํ™”)

์„ค์น˜

# ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/gguip1/ArcanaWhisper-Back.git
cd ArcanaWhisper-Back

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

# SSM Parameter Store์— ์‹œํฌ๋ฆฟ ์ €์žฅ (AWS CLI)
aws ssm put-parameter --name "/arcana-whisper/gemini-api-key" --value "your-api-key" --type SecureString
aws ssm put-parameter --name "/arcana-whisper/firebase-credentials" --value "base64-encoded-json" --type SecureString

๋ฐฐํฌ

cd infra
sam build
sam deploy --guided

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์กฐ

Firestore Collections

guest_usage/
  โ””โ”€โ”€ {guest_token}/
        โ”œโ”€โ”€ count: number
        โ”œโ”€โ”€ date: "YYYY-MM-DD"
        โ””โ”€โ”€ updated_at: "ISO8601"

user_usage/
  โ””โ”€โ”€ {firebase_uid}/
        โ”œโ”€โ”€ count: number
        โ”œโ”€โ”€ date: "YYYY-MM-DD"
        โ””โ”€โ”€ updated_at: "ISO8601"

tarot_history/
  โ””โ”€โ”€ {history_id}/
        โ”œโ”€โ”€ user_id: string
        โ”œโ”€โ”€ provider: string
        โ”œโ”€โ”€ question: string
        โ”œโ”€โ”€ cards: { cards: number[], reversed: boolean[] }
        โ”œโ”€โ”€ result: string
        โ”œโ”€โ”€ created_at: timestamp
        โ””โ”€โ”€ is_shared: boolean        # ๊ณต์œ  ์—ฌ๋ถ€

readings/
  โ””โ”€โ”€ {share_id}/                     # UUID
        โ”œโ”€โ”€ history_id: string        # tarot_history ์ฐธ์กฐ
        โ”œโ”€โ”€ created_at: timestamp
        โ””โ”€โ”€ expires_at: timestamp     # 30์ผ ํ›„ ๋งŒ๋ฃŒ (TTL)

๊ด€๋ จ ์ €์žฅ์†Œ

Repository Description
ArcanaWhisper-Front React + TypeScript ํ”„๋ก ํŠธ์—”๋“œ

About

๐Ÿ”ฎ LLM ๊ธฐ๋ฐ˜ ํƒ€๋กœ ๋ฆฌ๋”ฉ ์„œ๋น„์Šค ๋ฐฑ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages