Skip to content

bulhwi/quad-chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

45 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ—จ๏ธ Quad Chat - ์‹ค์‹œ๊ฐ„ 4์ธ ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์ตœ๋Œ€ 4๋ช…๊นŒ์ง€ ์ฐธ์—ฌ ๊ฐ€๋Šฅํ•œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์„œ๋น„์Šค

Live Demo Version Korean Release Notes GitHub Actions Deploy with Vercel

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ”— ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • 4๋ช… ์ œํ•œ: ๋ฐฉ๋‹น ์ตœ๋Œ€ 4๋ช…๊นŒ์ง€๋งŒ ์ž…์žฅ ๊ฐ€๋Šฅ
  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…: HTTP Polling ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹ 
  • ํฌ๋กœ์Šค ํ”Œ๋žซํผ: PC, ๋ชจ๋ฐ”์ผ, ํƒœ๋ธ”๋ฆฟ ๋ชจ๋“  ๊ธฐ๊ธฐ์—์„œ ์ ‘์† ๊ฐ€๋Šฅ
  • ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜: Chrome, Safari, Firefox, Edge ๋“ฑ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ € ์ง€์›
  • ์˜๊ตฌ ์ €์žฅ: Upstash Redis๋กœ ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ๋ณด๊ด€

๐ŸŽจ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜

  • ์ง๊ด€์  UI: ๊น”๋”ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ์ธํ„ฐํŽ˜์ด์Šค
  • ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™”๋œ ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ
  • ์‹ค์‹œ๊ฐ„ ์ƒํƒœ: ์—ฐ๊ฒฐ ์ƒํƒœ ๋ฐ ์ฐธ์—ฌ์ž ์ˆ˜ ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ
  • ๋ฉ”์‹œ์ง€ ํžˆ์Šคํ† ๋ฆฌ: ๋Šฆ๊ฒŒ ์ฐธ์—ฌํ•ด๋„ ์ตœ๊ทผ 100๊ฐœ ๋ฉ”์‹œ์ง€ ํ™•์ธ ๊ฐ€๋Šฅ
  • ์ž๋™ ์ •๋ฆฌ: 24์‹œ๊ฐ„ ํ›„ ๋น„ํ™œ์„ฑ ๋ฐฉ ์ž๋™ ์‚ญ์ œ

๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ์ง€์›

  • ํ„ฐ์น˜ ์ตœ์ ํ™”: ๋ชจ๋ฐ”์ผ ํ„ฐ์น˜ ์ธํ„ฐํŽ˜์ด์Šค ์™„์ „ ์ง€์›
  • ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด: ๋ชจ๋ฐ”์ผ์—์„œ ์‚ฌ์ด๋“œ๋ฐ” ํ† ๊ธ€ ๊ธฐ๋Šฅ
  • ๋ฐ˜์‘ํ˜• ํ…์ŠคํŠธ: ํ™”๋ฉด ํฌ๊ธฐ์— ๋”ฐ๋ฅธ ํ…์ŠคํŠธ ํฌ๊ธฐ ์ž๋™ ์กฐ์ •
  • ์•ˆ์ •์  ์—ฐ๊ฒฐ: HTTP Polling์œผ๋กœ ๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ์•ˆ์ •์  ์ž‘๋™

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

Frontend

  • Framework: Next.js 15 (App Router)
  • Library: React 19
  • Language: TypeScript
  • Styling: Tailwind CSS
  • Communication: HTTP REST API + Polling

Backend

  • Runtime: Node.js (Serverless)
  • Database: Upstash Redis (๋ฌด๋ฃŒ)
  • API: REST API Routes
  • Deployment: Vercel (Serverless)

Infrastructure

  • Hosting: Vercel
  • Database: Upstash Redis (Tokyo)
  • CDN: Vercel Edge Network
  • Domain: vercel.app

๋กœ์ปฌ ์‹คํ–‰ ๋ฐฉ๋ฒ•

# 1. ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/bulhwi/quad-chat.git
cd quad-chat

# 2. ์˜์กด์„ฑ ์„ค์น˜
npm install

# 3. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

# 4. ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ ‘์†
http://localhost:3001

๐Ÿ—ƒ๏ธ Upstash Redis ์„ค์ •

์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Upstash Redis๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐํฌํ•˜๊ธฐ ์ „์— Redis ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’Ž Upstash Redis ๋ฌด๋ฃŒ ํ”Œ๋žœ

ํ•ญ๋ชฉ ๋ฌด๋ฃŒ ํ”Œ๋žœ ์ œ๊ณต๋Ÿ‰ ๋น„๊ณ 
์ผ์ผ ์š”์ฒญ ์ˆ˜ 10,000 requests ์ฑ„ํŒ… ์•ฑ์— ์ถฉ๋ถ„
๋ฐ์ดํ„ฐ ํฌ๊ธฐ 256MB ์ˆ˜์ฒœ ๊ฐœ ๋ฐฉ ์ €์žฅ ๊ฐ€๋Šฅ
๋™์‹œ ์—ฐ๊ฒฐ ์ œํ•œ ์—†์Œ ๋ฌด์ œํ•œ ์‚ฌ์šฉ์ž
๋ฐ์ดํ„ฐ ๋ณด๊ด€ ์˜๊ตฌ ๋ณด๊ด€ ์‚ญ์ œ๋˜์ง€ ์•Š์Œ
์ง€์—ญ ์ „ ์„ธ๊ณ„ Tokyo ๋ฆฌ์ „ ์‚ฌ์šฉ ๊ถŒ์žฅ

๐Ÿš€ 5๋ถ„ ์„ค์ • ๊ฐ€์ด๋“œ

1๋‹จ๊ณ„: Upstash ๊ณ„์ • ์ƒ์„ฑ โฑ๏ธ 2๋ถ„

  1. https://console.upstash.com ์ ‘์†
  2. "Sign up with GitHub" ํด๋ฆญ
  3. GitHub ๊ณ„์ •์œผ๋กœ ๋ฌด๋ฃŒ ํšŒ์›๊ฐ€์ž… ์™„๋ฃŒ

2๋‹จ๊ณ„: Redis ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒ์„ฑ โฑ๏ธ 1๋ถ„

  1. "Create Database" ๋ฒ„ํŠผ ํด๋ฆญ
  2. ์„ค์ •๊ฐ’ ์ž…๋ ฅ:
    Name: quad-chat-db
    Region: Tokyo, Japan (๋˜๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ง€์—ญ)
    Type: Regional (๊ธฐ๋ณธ๊ฐ’)
    
  3. "Create" ๋ฒ„ํŠผ ํด๋ฆญ

3๋‹จ๊ณ„: ์—ฐ๊ฒฐ ์ •๋ณด ๋ณต์‚ฌ โฑ๏ธ 1๋ถ„

  1. ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋ฆญ
  2. "REST API" ํƒญ ์„ ํƒ
  3. ๋‹ค์Œ 2๊ฐœ ๊ฐ’ ๋ณต์‚ฌ:
    UPSTASH_REDIS_REST_URL="https://xxx-xxx-xxx.upstash.io"
    UPSTASH_REDIS_REST_TOKEN="AXXXxxxxxxxxxxxxxxxxxxxxxxxxx"

4๋‹จ๊ณ„: Vercel ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • โฑ๏ธ 1๋ถ„

  1. https://vercel.com/dashboard ์ ‘์†
  2. quad-chat ํ”„๋กœ์ ํŠธ ํด๋ฆญ
  3. Settings โ†’ Environment Variables ์ด๋™
  4. ๋‹ค์Œ 2๊ฐœ ๋ณ€์ˆ˜ ์ถ”๊ฐ€:
    Name: UPSTASH_REDIS_REST_URL
    Value: [3๋‹จ๊ณ„์—์„œ ๋ณต์‚ฌํ•œ URL]
    
    Name: UPSTASH_REDIS_REST_TOKEN
    Value: [3๋‹จ๊ณ„์—์„œ ๋ณต์‚ฌํ•œ ํ† ํฐ]
    
  5. "Save" ํด๋ฆญ

๐Ÿ”ง ๋กœ์ปฌ ๊ฐœ๋ฐœ ์„ค์ •

๋กœ์ปฌ์—์„œ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด .env.local ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์„ธ์š”:

# .env.local ํŒŒ์ผ ์ƒ์„ฑ
UPSTASH_REDIS_REST_URL=your_redis_url_here
UPSTASH_REDIS_REST_TOKEN=your_redis_token_here

๐Ÿ“Š Redis ์‚ฌ์šฉ๋Ÿ‰ ๋ชจ๋‹ˆํ„ฐ๋ง

  • Upstash ์ฝ˜์†”์—์„œ ์‹ค์‹œ๊ฐ„ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ ๊ฐ€๋Šฅ
  • Metrics ํƒญ์—์„œ ์š”์ฒญ ์ˆ˜, ์ €์žฅ ์šฉ๋Ÿ‰ ๋“ฑ ํ™•์ธ
  • ๋ฌด๋ฃŒ ํ•œ๋„ ์ดˆ๊ณผ ์‹œ ์ž๋™ ์•Œ๋ฆผ

๐Ÿ” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

{
  "room:abc123": {
    "users": [
      {
        "id": "user_123",
        "nickname": "์‚ฌ์šฉ์ž1",
        "joinedAt": "2024-01-01T00:00:00Z"
      }
    ],
    "messages": [
      {
        "id": "msg_123",
        "userId": "user_123",
        "nickname": "์‚ฌ์šฉ์ž1",
        "message": "์•ˆ๋…•ํ•˜์„ธ์š”!",
        "timestamp": "2024-01-01T00:00:00Z"
      }
    ]
  }
}

โš ๏ธ ์ฃผ์˜์‚ฌํ•ญ

  • ๋ฌด๋ฃŒ ํ”Œ๋žœ ์ผ์ผ 10,000 ์š”์ฒญ ์ œํ•œ (์ถฉ๋ถ„ํ•จ)
  • TTL 24์‹œ๊ฐ„ ์„ค์ •์œผ๋กœ ์ž๋™ ๋ฐฉ ์ •๋ฆฌ
  • Tokyo ๋ฆฌ์ „ ์‚ฌ์šฉ ์‹œ ํ•œ๊ตญ์—์„œ ๋น ๋ฅธ ์†๋„
  • HTTPS๋งŒ ์ง€์› (HTTP๋Š” ๋ถˆ๊ฐ€)

๐Ÿš€ ๋ฐฐํฌ ๋ฐฉ๋ฒ•

๐Ÿ“‹ ํ˜„์žฌ ๋ฐฐํฌ ์ƒํƒœ

  • ๋ผ์ด๋ธŒ ์„œ๋น„์Šค: quad-chat.vercel.app
  • ์ž๋™ ๋ฐฐํฌ: GitHub ํ‘ธ์‹œ ์‹œ ์ž๋™ ๋ฐฐํฌ
  • ๋นŒ๋“œ ์ƒํƒœ: โœ… ์ •์ƒ ๋นŒ๋“œ ์™„๋ฃŒ

๐ŸŽฏ Vercel ์›ํด๋ฆญ ๋ฐฐํฌ

Deploy with Vercel

๐Ÿ“ ์ˆ˜๋™ ๋ฐฐํฌ ๋ฐฉ๋ฒ•

1๏ธโƒฃ Vercel ์›น์‚ฌ์ดํŠธ์—์„œ ๋ฐฐํฌ

# 1. ์ €์žฅ์†Œ ํฌํฌ ๋˜๋Š” ํด๋ก 
git clone https://github.com/bulhwi/quad-chat.git
cd quad-chat

# 2. Vercel ์›น์‚ฌ์ดํŠธ ์ ‘์†
# https://vercel.com ๋ฐฉ๋ฌธ

# 3. GitHub ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ

# 4. "Add New..." โ†’ "Project" ํด๋ฆญ

# 5. GitHub ์ €์žฅ์†Œ ์„ ํƒ
# - bulhwi/quad-chat ๋˜๋Š” ๋ณธ์ธ์˜ ํฌํฌ๋œ ์ €์žฅ์†Œ ์„ ํƒ

# 6. ํ”„๋กœ์ ํŠธ ์„ค์ • (๊ธฐ๋ณธ๊ฐ’ ์œ ์ง€)
# - Framework Preset: Next.js
# - Root Directory: ./
# - Build Command: npm run build
# - Output Directory: .next
# - Install Command: npm install

# 7. "Deploy" ํด๋ฆญ

2๏ธโƒฃ Vercel CLI๋กœ ๋ฐฐํฌ

# 1. Vercel CLI ์„ค์น˜
npm install -g vercel

# 2. Vercel ๋กœ๊ทธ์ธ
vercel login

# 3. ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ฐฐํฌ
vercel

# 4. ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ
vercel --prod

3๏ธโƒฃ Vercel Git ์ž๋™ ๋ฐฐํฌ (๊ถŒ์žฅ)

๊ฐ€์žฅ ๊ฐ„๋‹จํ•˜๊ณ  ์•ˆ์ •์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค:

  1. Vercel์—์„œ ํ”„๋กœ์ ํŠธ ์—ฐ๊ฒฐ:

    • Vercel ๋Œ€์‹œ๋ณด๋“œ์—์„œ "Add New..." โ†’ "Project"
    • GitHub ์ €์žฅ์†Œ bulhwi/quad-chat ์„ ํƒ
    • "Import" ํด๋ฆญ
  2. ์ž๋™ ๋ฐฐํฌ ์„ค์ •:

    • main ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ ์‹œ ์ž๋™ ๋ฐฐํฌ
    • Pull Request ์‹œ ํ”„๋ฆฌ๋ทฐ ๋ฐฐํฌ
    • ํ† ํฐ ์„ค์ • ๋ถˆํ•„์š”

โš™๏ธ ๋ฐฐํฌ ํ™˜๊ฒฝ ์„ค์ •

ํ•„์ˆ˜ ์„ค์ • ์‚ฌํ•ญ

  • Node.js ๋ฒ„์ „: 20.x (์ž๋™ ๊ฐ์ง€)
  • ๋นŒ๋“œ ๋ช…๋ น์–ด: npm run build
  • ์‹œ์ž‘ ๋ช…๋ น์–ด: npm start

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

๋ณ€์ˆ˜๋ช… ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
UPSTASH_REDIS_REST_URL Redis ์—ฐ๊ฒฐ URL ํ•„์ˆ˜ ์„ค์ •
UPSTASH_REDIS_REST_TOKEN Redis ์ธ์ฆ ํ† ํฐ ํ•„์ˆ˜ ์„ค์ •
NODE_ENV ํ™˜๊ฒฝ ๋ชจ๋“œ production

Vercel ์ตœ์ ํ™” ์„ค์ •

// vercel.json (ํ•„์š”์‹œ)
{
  "buildCommand": "npm run build",
  "outputDirectory": ".next",
  "framework": "nextjs",
  "regions": ["icn1"] // ์„œ์šธ ๋ฆฌ์ „
}

๐Ÿ”ง ๋ฐฐํฌ ์•„ํ‚คํ…์ฒ˜

๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ

๋ธŒ๋ผ์šฐ์ € โ†โ†’ Next.js Dev Server (3001) โ†โ†’ REST API Routes โ†โ†’ Upstash Redis

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ (Vercel)

๋ธŒ๋ผ์šฐ์ € โ†โ†’ Vercel Edge โ†โ†’ Next.js App โ†โ†’ API Routes (/api/rooms/[roomId])
                                                    โ†“
                                              Upstash Redis (Tokyo)

๐Ÿšจ ๋ฐฐํฌ ์ฃผ์˜์‚ฌํ•ญ

  1. Redis ์„ค์ •: Upstash Redis ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํ•„์ˆ˜ ์„ค์ • (URL, TOKEN)
  2. CORS ์„ค์ •: ๋ชจ๋“  ์˜ค๋ฆฌ์ง„ ํ—ˆ์šฉ์œผ๋กœ ์„ค์ •๋จ (Access-Control-Allow-Origin: *)
  3. ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ: Upstash Redis ๊ธฐ๋ฐ˜ ์˜๊ตฌ ์ €์žฅ (24์‹œ๊ฐ„ TTL)
  4. ์Šค์ผ€์ผ๋ง: ์„œ๋ฒ„๋ฆฌ์Šค ํŠน์„ฑ์ƒ Redis๋กœ ์ƒํƒœ ๊ณต์œ 
  5. ์š”์ฒญ ์ œํ•œ: ๋ฌด๋ฃŒ ํ”Œ๋žœ ์ผ์ผ 10,000 ์š”์ฒญ ํ•œ๋„

๐Ÿ“Š ๋ฐฐํฌ ํ›„ ํ™•์ธ์‚ฌํ•ญ

โœ… ๊ธฐ๋Šฅ ํ…Œ์ŠคํŠธ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • ๋ฉ”์ธ ํŽ˜์ด์ง€ ๋กœ๋”ฉ
  • ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ๋ฐ ๋ฐฉ ์ƒ์„ฑ
  • ๋ฐฉ ์ฝ”๋“œ๋กœ ์ฐธ์—ฌ
  • ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹ 
  • 4๋ช… ์ œํ•œ ํ™•์ธ
  • ๋ชจ๋ฐ”์ผ์—์„œ ์ ‘์† ํ…Œ์ŠคํŠธ
  • ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ…Œ์ŠคํŠธ

๐Ÿ” ๋””๋ฒ„๊น… ๋„๊ตฌ

  • Vercel ๋กœ๊ทธ: Vercel ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ•จ์ˆ˜ ๋กœ๊ทธ ํ™•์ธ
  • ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”: HTTP ์š”์ฒญ/์‘๋‹ต ์ƒํƒœ ํ™•์ธ
  • Network ํƒญ: REST API ํ˜ธ์ถœ ๋ชจ๋‹ˆํ„ฐ๋ง
  • Upstash ์ฝ˜์†”: Redis ๋ฐ์ดํ„ฐ ๋ฐ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ

๐Ÿ“– ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

๐ŸŽฎ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

1๏ธโƒฃ ๋ฐฉ ์ƒ์„ฑํ•˜๊ธฐ

  1. quad-chat.vercel.app ์ ‘์†
  2. ์›ํ•˜๋Š” ๋‹‰๋„ค์ž„ ์ž…๋ ฅ (์ตœ๋Œ€ 20์ž)
  3. "์ƒˆ ๋ฐฉ ๋งŒ๋“ค๊ธฐ" ๋ฒ„ํŠผ ํด๋ฆญ
  4. ์ƒ์„ฑ๋œ 7์ž๋ฆฌ ๋ฐฉ ์ฝ”๋“œ๋ฅผ ์นœ๊ตฌ๋“ค์—๊ฒŒ ๊ณต์œ 

2๏ธโƒฃ ๋ฐฉ ์ฐธ์—ฌํ•˜๊ธฐ

  1. ์‚ฌ์ดํŠธ ์ ‘์† ํ›„ ๋‹‰๋„ค์ž„ ์ž…๋ ฅ
  2. "๊ธฐ์กด ๋ฐฉ ์ฐธ์—ฌํ•˜๊ธฐ" ํด๋ฆญ
  3. ๋ฐ›์€ ๋ฐฉ ์ฝ”๋“œ ์ž…๋ ฅ
  4. "๋ฐฉ ์ฐธ์—ฌํ•˜๊ธฐ" ํด๋ฆญ

3๏ธโƒฃ ์ฑ„ํŒ…ํ•˜๊ธฐ

  • ํ•˜๋‹จ ์ž…๋ ฅ์ฐฝ์— ๋ฉ”์‹œ์ง€ ์ž…๋ ฅ
  • Enter ํ‚ค ๋˜๋Š” "์ „์†ก" ๋ฒ„ํŠผ์œผ๋กœ ๋ฉ”์‹œ์ง€ ์ „์†ก
  • ์šฐ์ธก ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ์ฐธ์—ฌ์ž ๋ชฉ๋ก ํ™•์ธ
  • ๋ชจ๋ฐ”์ผ์—์„œ๋Š” ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด๋กœ ์‚ฌ์ด๋“œ๋ฐ” ํ† ๊ธ€

๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ์‚ฌ์šฉ๋ฒ•

  • ์‚ฌ์ด๋“œ๋ฐ” ์—ด๊ธฐ: ์ขŒ์ƒ๋‹จ ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด ํƒญ
  • ๋ฐฉ ์ฝ”๋“œ ๋ณต์‚ฌ: ๋ฐฉ ์ •๋ณด์—์„œ "๋ณต์‚ฌ" ๋ฒ„ํŠผ ํƒญ
  • ๋ฉ”์‹œ์ง€ ์Šคํฌ๋กค: ํ„ฐ์น˜๋กœ ๋ฉ”์‹œ์ง€ ํžˆ์Šคํ† ๋ฆฌ ์Šคํฌ๋กค

๐Ÿ—๏ธ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

quad-chat/
โ”œโ”€โ”€ ๐Ÿ“ app/                         # Next.js App Router
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ layout.tsx              # ๊ธ€๋กœ๋ฒŒ ๋ ˆ์ด์•„์›ƒ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ page.tsx                # ๋ฉ”์ธ ํŽ˜์ด์ง€ (๋ฐฉ ์ƒ์„ฑ/์ฐธ์—ฌ)
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ globals.css             # ๊ธ€๋กœ๋ฒŒ ์Šคํƒ€์ผ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ chat/[roomId]/          # ๋™์  ์ฑ„ํŒ…๋ฐฉ ๋ผ์šฐํŠธ
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“„ page.tsx           # ์ฑ„ํŒ…๋ฐฉ ํŽ˜์ด์ง€
โ”œโ”€โ”€ ๐Ÿ“ pages/                      # Pages Router (API ์ „์šฉ)
โ”‚   โ””โ”€โ”€ ๐Ÿ“ api/
โ”‚       โ””โ”€โ”€ ๐Ÿ“ rooms/
โ”‚           โ””โ”€โ”€ ๐Ÿ“„ [roomId].js    # REST API ๋ผ์šฐํŠธ (Redis ์—ฐ๋™)
โ”œโ”€โ”€ ๐Ÿ“ lib/                        # ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ redis.ts               # Redis ์—ฐ๊ฒฐ ๋ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ api.ts                 # HTTP ํด๋ผ์ด์–ธํŠธ
โ”‚   โ””โ”€โ”€ ๐Ÿ“„ socket.ts              # Socket.io (๋กœ์ปฌ ๊ฐœ๋ฐœ์šฉ)
โ”œโ”€โ”€ ๐Ÿ“ .github/workflows/          # GitHub Actions
โ”‚   โ””โ”€โ”€ ๐Ÿ“„ korean-release.yml     # ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ž๋™ํ™”
โ”œโ”€โ”€ ๐Ÿ“ scripts/                    # ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ””โ”€โ”€ ๐Ÿ“„ generate-korean-release.js # ํ•œ๊ตญ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ƒ์„ฑ๊ธฐ
โ”œโ”€โ”€ ๐Ÿ“ docs/                       # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ
โ”‚   โ””โ”€โ”€ ๐Ÿ“„ VERSIONING.md          # ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ฐ€์ด๋“œ๋ผ์ธ
โ”œโ”€โ”€ ๐Ÿ“„ CHANGELOG.md               # ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ธฐ๋ก
โ”œโ”€โ”€ ๐Ÿ“„ server.js                   # ๋กœ์ปฌ ๊ฐœ๋ฐœ์šฉ ์ปค์Šคํ…€ ์„œ๋ฒ„
โ”œโ”€โ”€ ๐Ÿ“„ package.json               # ํ”„๋กœ์ ํŠธ ์„ค์ • (v1.0.1)
โ”œโ”€โ”€ ๐Ÿ“„ tailwind.config.ts         # Tailwind CSS ์„ค์ •
โ”œโ”€โ”€ ๐Ÿ“„ tsconfig.json              # TypeScript ์„ค์ •
โ””โ”€โ”€ ๐Ÿ“„ next.config.js             # Next.js ์„ค์ •

๐Ÿ”ง ์ฃผ์š” ํŒŒ์ผ ์„ค๋ช…

ํŒŒ์ผ ์—ญํ• 
app/page.tsx ๋ฉ”์ธ ํŽ˜์ด์ง€: ๋‹‰๋„ค์ž„ ์ž…๋ ฅ, ๋ฐฉ ์ƒ์„ฑ/์ฐธ์—ฌ
app/chat/[roomId]/page.tsx ์ฑ„ํŒ…๋ฐฉ: HTTP Polling ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…
pages/api/rooms/[roomId].js REST API: ๋ฐฉ ๊ด€๋ฆฌ, ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹ 
lib/redis.ts Redis ์—ฐ๊ฒฐ: ๋ฐ์ดํ„ฐ ์ €์žฅ/์กฐํšŒ ๊ด€๋ฆฌ
lib/api.ts HTTP ํด๋ผ์ด์–ธํŠธ: API ํ˜ธ์ถœ ๊ด€๋ฆฌ
CHANGELOG.md ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ธฐ๋ก ๋ฐ ๋ฆด๋ฆฌ์ฆˆ ํžˆ์Šคํ† ๋ฆฌ
.github/workflows/korean-release.yml ๐Ÿค– ํ•œ๊ตญ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ
scripts/generate-korean-release.js ํ•œ๊ตญ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ƒ์„ฑ ์Šคํฌ๋ฆฝํŠธ
docs/VERSIONING.md Semantic Versioning ๊ฐ€์ด๋“œ๋ผ์ธ
server.js ๋กœ์ปฌ ๊ฐœ๋ฐœ ์„œ๋ฒ„: Socket.io + Next.js (๋กœ์ปฌ์šฉ)

๐Ÿ› ๏ธ ๊ฐœ๋ฐœ ์Šคํฌ๋ฆฝํŠธ

# ๐Ÿš€ ๊ฐœ๋ฐœ ๊ด€๋ จ
npm run dev          # ๋กœ์ปฌ ๊ฐœ๋ฐœ ์„œ๋ฒ„ (์ปค์Šคํ…€ ์„œ๋ฒ„ + Socket.io)
npm run dev:next     # Next.js ๊ฐœ๋ฐœ ์„œ๋ฒ„๋งŒ ์‹คํ–‰

# ๐Ÿ—๏ธ ๋นŒ๋“œ ๊ด€๋ จ
npm run build        # ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run start        # ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„ ์‹คํ–‰

# ๐Ÿงน ์ฝ”๋“œ ํ’ˆ์งˆ
npm run lint         # ESLint ์‹คํ–‰
npm run type-check   # TypeScript ํƒ€์ž… ๊ฒ€์‚ฌ

# ๐Ÿ“ฆ ์˜์กด์„ฑ ๊ด€๋ฆฌ
npm install          # ์˜์กด์„ฑ ์„ค์น˜
npm update           # ์˜์กด์„ฑ ์—…๋ฐ์ดํŠธ

๐Ÿš€ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ

๐Ÿ”„ ๊ฐœ๋ฐœ ๋ฐ ๋ฆด๋ฆฌ์ฆˆ ํ”„๋กœ์„ธ์Šค

๐Ÿ“‹ ๋ธŒ๋žœ์น˜ ์ „๋žต

# main - ํ”„๋กœ๋•์…˜ ์•ˆ์ • ๋ฒ„์ „
# develop - ๊ฐœ๋ฐœ ํ†ตํ•ฉ ๋ธŒ๋žœ์น˜
# feature/* - ๊ธฐ๋Šฅ๋ณ„ ๊ฐœ๋ฐœ ๋ธŒ๋žœ์น˜

๐Ÿ› ๏ธ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋ฐœ ๊ณผ์ •

# 1. ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/bulhwi/quad-chat.git
cd quad-chat

# 2. ์˜์กด์„ฑ ์„ค์น˜
npm install

# 3. ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ
git checkout develop
git checkout -b feature/new-feature

# 4. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

# 5. ์ฝ”๋“œ ์ˆ˜์ • ๋ฐ ํ…Œ์ŠคํŠธ
# http://localhost:3001์—์„œ ์‹ค์‹œ๊ฐ„ ํ™•์ธ

# 6. ๋นŒ๋“œ ํ…Œ์ŠคํŠธ
npm run build

# 7. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹
git add .
git commit -m "feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€"

# 8. develop ๋ธŒ๋žœ์น˜๋กœ PR ์ƒ์„ฑ
git push origin feature/new-feature
# GitHub์—์„œ feature/* โ†’ develop PR ์ƒ์„ฑ

# 9. develop์—์„œ ํ…Œ์ŠคํŠธ ํ›„ main์œผ๋กœ ๋ฆด๋ฆฌ์ฆˆ PR
# develop โ†’ main PR ์ƒ์„ฑ ๋ฐ ๋จธ์ง€

# 10. ๋ฆด๋ฆฌ์ฆˆ ํƒœ๊ทธ ์ƒ์„ฑ (์ž๋™ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ƒ์„ฑ)
git checkout main
git pull origin main
git tag v1.x.x -m "๋ฆด๋ฆฌ์ฆˆ ๋ฉ”์‹œ์ง€"
git push origin v1.x.x

๐Ÿท๏ธ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

Semantic Versioning (SemVer)

  • MAJOR (1.0.0 โ†’ 2.0.0): ํ˜ธํ™˜์„ฑ ์ค‘๋‹จ ๋ณ€๊ฒฝ์‚ฌํ•ญ
  • MINOR (1.0.0 โ†’ 1.1.0): ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ (ํ•˜์œ„ ํ˜ธํ™˜)
  • PATCH (1.0.0 โ†’ 1.0.1): ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ์„ฑ๋Šฅ ๊ฐœ์„ 

๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ž๋™ํ™”

# ํƒœ๊ทธ ํ‘ธ์‹œ ์‹œ ์ž๋™ ์‹คํ–‰๋˜๋Š” GitHub Actions
git tag v1.1.0 -m "์ด๋ชจํ‹ฐ์ฝ˜ ๊ธฐ๋Šฅ ์ถ”๊ฐ€"
git push origin v1.1.0

# โ†“ ์ž๋™์œผ๋กœ ์‹คํ–‰๋จ
# 1. CHANGELOG.md์—์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ถ”์ถœ
# 2. ํ•œ๊ตญ์–ด ์นœํ™”์  ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ƒ์„ฑ
# 3. GitHub Release ์ž๋™ ์ƒ์„ฑ
# 4. ํ•œ๊ตญ์–ด ์šฐ์„  ์ •์ฑ… ์ ์šฉ

๐Ÿ“ CHANGELOG.md ๊ด€๋ฆฌ

# ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์™„๋ฃŒ ์‹œ CHANGELOG.md ์—…๋ฐ์ดํŠธ
## [๋ฏธ๋ฐฐํฌ] - Unreleased
### ์ถ”๊ฐ€๋จ
- ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์„ค๋ช…

# ๋ฆด๋ฆฌ์ฆˆ ์‹œ ๋ฒ„์ „๊ณผ ๋‚ ์งœ ์—…๋ฐ์ดํŠธ
## [1.1.0] - 2025-09-28 - โœจ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ

๐Ÿ”ง ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

๊ถŒ์žฅ ๊ฐœ๋ฐœ ๋„๊ตฌ

  • ์—๋””ํ„ฐ: VS Code
  • ํ™•์žฅ: ES7+ React/Redux/React-Native snippets, Tailwind CSS IntelliSense
  • ๋ธŒ๋ผ์šฐ์ €: Chrome (๊ฐœ๋ฐœ์ž ๋„๊ตฌ)
  • ํ„ฐ๋ฏธ๋„: ํ†ตํ•ฉ ํ„ฐ๋ฏธ๋„ ๋˜๋Š” ๋ณ„๋„ ํ„ฐ๋ฏธ๋„

ํ•„์ˆ˜ Node.js ๋ฒ„์ „

  • Node.js: 20.x ์ด์ƒ
  • npm: 10.x ์ด์ƒ

๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ์šฐ์„  ๋ฆด๋ฆฌ์ฆˆ ์‹œ์Šคํ…œ

โœจ ํŠน์ง•

  • ํ•œ๊ตญ์–ด ์šฐ์„  ์ •์ฑ…: ๋ชจ๋“  ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ๋Š” ํ•œ๊ตญ์–ด๋กœ ๋จผ์ € ์ž‘์„ฑ
  • ์‚ฌ์šฉ์ž ์นœํ™”์ : ๊ธฐ์ˆ  ์šฉ์–ด๋ณด๋‹ค ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ํ‘œํ˜„
  • ์ž๋™ํ™”: GitHub Actions๋ฅผ ํ†ตํ•œ ์™„์ „ ์ž๋™ํ™”
  • Semantic Versioning: ๋ฒ„์ „๋ณ„ ์ด๋ชจ์ง€์™€ ์นœํ™”์  ์ œ๋ชฉ ์ž๋™ ์ƒ์„ฑ

๐Ÿ“‹ ํ•œ๊ตญ์–ด ๊ธฐ์ˆ  ์šฉ์–ด ํ‘œ์ค€ํ™”

์˜์–ด ์šฉ์–ด ํ•œ๊ตญ์–ด ์šฉ์–ด
Breaking Changes ํ˜ธํ™˜์„ฑ ์ค‘๋‹จ ๋ณ€๊ฒฝ์‚ฌํ•ญ
Migration ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐฉ๋ฒ•
Deprecated ์‚ฌ์šฉ ์ค‘๋‹จ ์˜ˆ์ •
Performance ์„ฑ๋Šฅ ์ตœ์ ํ™”
Security ๋ณด์•ˆ ๊ฐ•ํ™”
Bug Fix ์˜ค๋ฅ˜ ์ˆ˜์ •

๐ŸŽฏ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์˜ˆ์‹œ

# ๐Ÿ› Quad Chat v1.0.1 - ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ๊ฐœ์„ 

์•ˆ๋…•ํ•˜์„ธ์š”! Quad Chat์˜ ์ƒˆ๋กœ์šด ์—…๋ฐ์ดํŠธ๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ๐ŸŽ‰

## ๐Ÿ”ง ์ˆ˜์ •์‚ฌํ•ญ
- GitHub Actions ๊ถŒํ•œ ๋ฌธ์ œ ํ•ด๊ฒฐ
- ๋ฆด๋ฆฌ์ฆˆ ์ž๋™ํ™” ๊ฐœ์„ 
- ์›Œํฌํ”Œ๋กœ์šฐ ์•ˆ์ •์„ฑ ํ–ฅ์ƒ

## ๐Ÿ”„ ์—…๊ทธ๋ ˆ์ด๋“œ ๋ฐฉ๋ฒ•
๋ณ„๋„ ์ž‘์—… ์—†์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜๋ฉด ์ƒˆ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”!

๐Ÿ”ง ์ˆ˜๋™ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ์ƒ์„ฑ

# ๋กœ์ปฌ์—์„œ ๋ฆด๋ฆฌ์ฆˆ ๋…ธํŠธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
node scripts/generate-korean-release.js v1.1.0

# ์ƒ์„ฑ๋œ release-notes-ko.md ํŒŒ์ผ ํ™•์ธ
cat release-notes-ko.md

๐Ÿ“– ๊ด€๋ จ ๋ฌธ์„œ

  • CHANGELOG.md: ํ•œ๊ตญ์–ด ๋ณ€๊ฒฝ์‚ฌํ•ญ ๊ธฐ๋ก
  • docs/VERSIONING.md: ๋ฒ„์ „ ๊ด€๋ฆฌ ๊ฐ€์ด๋“œ๋ผ์ธ
  • GitHub Releases: ๋ชจ๋“  ๋ฆด๋ฆฌ์ฆˆ ๋ชฉ๋ก

๐Ÿ“š ์ถ”๊ฐ€ ์ž๋ฃŒ

๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ

๐Ÿ†˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

  • ์—ฐ๊ฒฐ ๋ฌธ์ œ: ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์—์„œ HTTP ์š”์ฒญ ์ƒํƒœ ํ™•์ธ
  • Redis ์˜ค๋ฅ˜: Upstash ์ฝ˜์†”์—์„œ ์—ฐ๊ฒฐ ์ƒํƒœ ๋ฐ ์‚ฌ์šฉ๋Ÿ‰ ํ™•์ธ
  • ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์˜ค๋ฅ˜: Vercel ๋Œ€์‹œ๋ณด๋“œ์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ํ™•์ธ
  • ๋ชจ๋ฐ”์ผ ์ด์Šˆ: ๋‹ค๋ฅธ ๋ธŒ๋ผ์šฐ์ €(Safari, Chrome)์—์„œ ํ…Œ์ŠคํŠธ
  • ๋ฐฐํฌ ๋ฌธ์ œ: Vercel ๋Œ€์‹œ๋ณด๋“œ์—์„œ ๋นŒ๋“œ ๋กœ๊ทธ ํ™•์ธ

๐Ÿค ๊ธฐ์—ฌ ๋ฐฉ๋ฒ•

  1. ์ด ์ €์žฅ์†Œ๋ฅผ ํฌํฌ
  2. develop ๋ธŒ๋žœ์น˜์—์„œ ์ƒˆ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ (git checkout -b feature/amazing-feature)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ปค๋ฐ‹ (git commit -m 'Add some amazing feature')
  4. ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œ (git push origin feature/amazing-feature)
  5. develop ๋ธŒ๋žœ์น˜๋กœ Pull Request ์ƒ์„ฑ
  6. ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ ์Šน์ธ ํ›„ ๋จธ์ง€

๐Ÿ”’ ๋ธŒ๋žœ์น˜ ๋ณดํ˜ธ ๊ทœ์น™: main ๋ฐ develop ๋ธŒ๋žœ์น˜๋Š” PR์„ ํ†ตํ•ด์„œ๋งŒ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ชจ๋“  PR์€ ๋ฆฌ๋ทฐ ์Šน์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” MIT ๋ผ์ด์„ ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ‘จโ€๐Ÿ’ป ๊ฐœ๋ฐœ์ž

๋ฐ•๋ถˆํœ˜ (bulhwi)

  • GitHub: @bulhwi
  • ๐Ÿงช Admin ๊ถŒํ•œ ํ…Œ์ŠคํŠธ ์™„๋ฃŒ: CLI๋ฅผ ํ†ตํ•œ PR ๋จธ์ง€ ๊ฐ€๋Šฅ
  • ํ”„๋กœ์ ํŠธ: quad-chat

๐Ÿ™ ๊ฐ์‚ฌ์˜ ๋ง

์ด ํ”„๋กœ์ ํŠธ๋Š” ์‹ค์‹œ๊ฐ„ ์›น ์ฑ„ํŒ…์˜ ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ํšจ๊ณผ์ ์ธ ๊ตฌํ˜„์„ ๋ชฉํ‘œ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•ด์ฃผ์‹œ๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๋‚จ๊ฒจ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๐Ÿš€ ํ–ฅํ›„ ๊ณ„ํš

๐ŸŽฏ ๋‹ค์Œ ๋ฒ„์ „ ๋ชฉํ‘œ (v1.1.0 - v1.5.0)

  • ๐ŸŽญ ์ด๋ชจํ‹ฐ์ฝ˜ ๊ธฐ๋Šฅ - ๋‹ค์–‘ํ•œ ์ด๋ชจ์ง€ ๋ฐ˜์‘ ์ถ”๊ฐ€
  • ๐Ÿ“ท ์ด๋ฏธ์ง€ ์ฒจ๋ถ€ ๊ธฐ๋Šฅ - ์‚ฌ์ง„ ๊ณต์œ  ๊ฐ€๋Šฅ
  • ๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™” - ๋”์šฑ ๊ฐœ์„ ๋œ ๋ชจ๋ฐ”์ผ UX
  • ๐Ÿ”” ์•Œ๋ฆผ ์‹œ์Šคํ…œ - ์ƒˆ ๋ฉ”์‹œ์ง€ ์•Œ๋ฆผ ๊ธฐ๋Šฅ
  • โŒจ๏ธ ํƒ€์ดํ•‘ ์ธ๋””์ผ€์ดํ„ฐ - ์‹ค์‹œ๊ฐ„ ์ž…๋ ฅ ์ƒํƒœ ํ‘œ์‹œ

๐Ÿ› ๏ธ ๊ธฐ์ˆ ์  ๊ฐœ์„  ๊ณ„ํš

  • WebSocket ์—ฐ๊ฒฐ ์˜ต์…˜ ์ถ”๊ฐ€ (์„ ํƒ์ )
  • ๋ฐฉ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ ํ™•์žฅ (๋น„๊ณต๊ฐœ๋ฐฉ, ์ดˆ๋Œ€ ๋งํฌ)
  • ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์‹œ์Šคํ…œ ๋„์ž…
  • ์ฑ„ํŒ… ํžˆ์Šคํ† ๋ฆฌ ์˜๊ตฌ ๋ณด๊ด€ ์˜ต์…˜

๐Ÿค– Generated with Claude Code


๐Ÿ’ก ํŒ: ์ด README๋Š” ํ”„๋กœ์ ํŠธ์™€ ํ•จ๊ป˜ ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. Star โญ๋ฅผ ๋ˆŒ๋Ÿฌ ์ตœ์‹  ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์•„๋ณด์„ธ์š”!