์ต๋ 4๋ช ๊น์ง ์ฐธ์ฌ ๊ฐ๋ฅํ ํฌ๋ก์ค ํ๋ซํผ ์ค์๊ฐ ์ฑํ ์๋น์ค
- 4๋ช ์ ํ: ๋ฐฉ๋น ์ต๋ 4๋ช ๊น์ง๋ง ์ ์ฅ ๊ฐ๋ฅ
- ์ค์๊ฐ ์ฑํ : HTTP Polling ๊ธฐ๋ฐ ์ค์๊ฐ ๋ฉ์์ง ์ก์์
- ํฌ๋ก์ค ํ๋ซํผ: PC, ๋ชจ๋ฐ์ผ, ํ๋ธ๋ฆฟ ๋ชจ๋ ๊ธฐ๊ธฐ์์ ์ ์ ๊ฐ๋ฅ
- ๋ธ๋ผ์ฐ์ ํธํ: Chrome, Safari, Firefox, Edge ๋ฑ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ง์
- ์๊ตฌ ์ ์ฅ: Upstash Redis๋ก ์์ ์ ์ธ ๋ฐ์ดํฐ ๋ณด๊ด
- ์ง๊ด์ UI: ๊น๋ํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ์ธํฐํ์ด์ค
- ๋ฐ์ํ ๋์์ธ: ๋ชจ๋ฐ์ผ ์ต์ ํ๋ ๋ฐ์ํ ๋ ์ด์์
- ์ค์๊ฐ ์ํ: ์ฐ๊ฒฐ ์ํ ๋ฐ ์ฐธ์ฌ์ ์ ์ค์๊ฐ ํ์
- ๋ฉ์์ง ํ์คํ ๋ฆฌ: ๋ฆ๊ฒ ์ฐธ์ฌํด๋ ์ต๊ทผ 100๊ฐ ๋ฉ์์ง ํ์ธ ๊ฐ๋ฅ
- ์๋ ์ ๋ฆฌ: 24์๊ฐ ํ ๋นํ์ฑ ๋ฐฉ ์๋ ์ญ์
- ํฐ์น ์ต์ ํ: ๋ชจ๋ฐ์ผ ํฐ์น ์ธํฐํ์ด์ค ์์ ์ง์
- ํ๋ฒ๊ฑฐ ๋ฉ๋ด: ๋ชจ๋ฐ์ผ์์ ์ฌ์ด๋๋ฐ ํ ๊ธ ๊ธฐ๋ฅ
- ๋ฐ์ํ ํ ์คํธ: ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ฅธ ํ ์คํธ ํฌ๊ธฐ ์๋ ์กฐ์
- ์์ ์ ์ฐ๊ฒฐ: HTTP Polling์ผ๋ก ๋ชจ๋ ํ๊ฒฝ์์ ์์ ์ ์๋
- Framework: Next.js 15 (App Router)
- Library: React 19
- Language: TypeScript
- Styling: Tailwind CSS
- Communication: HTTP REST API + Polling
- Runtime: Node.js (Serverless)
- Database: Upstash Redis (๋ฌด๋ฃ)
- API: REST API Routes
- Deployment: Vercel (Serverless)
- 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๋ฅผ ์ฌ์ฉํ์ฌ ์ค์๊ฐ ์ฑํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค. ๋ฐฐํฌํ๊ธฐ ์ ์ Redis ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
| ํญ๋ชฉ | ๋ฌด๋ฃ ํ๋ ์ ๊ณต๋ | ๋น๊ณ |
|---|---|---|
| ์ผ์ผ ์์ฒญ ์ | 10,000 requests | ์ฑํ ์ฑ์ ์ถฉ๋ถ |
| ๋ฐ์ดํฐ ํฌ๊ธฐ | 256MB | ์์ฒ ๊ฐ ๋ฐฉ ์ ์ฅ ๊ฐ๋ฅ |
| ๋์ ์ฐ๊ฒฐ | ์ ํ ์์ | ๋ฌด์ ํ ์ฌ์ฉ์ |
| ๋ฐ์ดํฐ ๋ณด๊ด | ์๊ตฌ ๋ณด๊ด | ์ญ์ ๋์ง ์์ |
| ์ง์ญ | ์ ์ธ๊ณ | Tokyo ๋ฆฌ์ ์ฌ์ฉ ๊ถ์ฅ |
- https://console.upstash.com ์ ์
- "Sign up with GitHub" ํด๋ฆญ
- GitHub ๊ณ์ ์ผ๋ก ๋ฌด๋ฃ ํ์๊ฐ์ ์๋ฃ
- "Create Database" ๋ฒํผ ํด๋ฆญ
- ์ค์ ๊ฐ ์
๋ ฅ:
Name: quad-chat-db Region: Tokyo, Japan (๋๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ญ) Type: Regional (๊ธฐ๋ณธ๊ฐ) - "Create" ๋ฒํผ ํด๋ฆญ
- ์์ฑ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ฆญ
- "REST API" ํญ ์ ํ
- ๋ค์ 2๊ฐ ๊ฐ ๋ณต์ฌ:
UPSTASH_REDIS_REST_URL="https://xxx-xxx-xxx.upstash.io" UPSTASH_REDIS_REST_TOKEN="AXXXxxxxxxxxxxxxxxxxxxxxxxxxx"
- https://vercel.com/dashboard ์ ์
- quad-chat ํ๋ก์ ํธ ํด๋ฆญ
- Settings โ Environment Variables ์ด๋
- ๋ค์ 2๊ฐ ๋ณ์ ์ถ๊ฐ:
Name: UPSTASH_REDIS_REST_URL Value: [3๋จ๊ณ์์ ๋ณต์ฌํ URL] Name: UPSTASH_REDIS_REST_TOKEN Value: [3๋จ๊ณ์์ ๋ณต์ฌํ ํ ํฐ] - "Save" ํด๋ฆญ
๋ก์ปฌ์์ ๊ฐ๋ฐํ๋ ค๋ฉด .env.local ํ์ผ์ ์์ฑํ์ธ์:
# .env.local ํ์ผ ์์ฑ
UPSTASH_REDIS_REST_URL=your_redis_url_here
UPSTASH_REDIS_REST_TOKEN=your_redis_token_here- 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 ํธ์ ์ ์๋ ๋ฐฐํฌ
- ๋น๋ ์ํ: โ ์ ์ ๋น๋ ์๋ฃ
# 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" ํด๋ฆญ# 1. Vercel CLI ์ค์น
npm install -g vercel
# 2. Vercel ๋ก๊ทธ์ธ
vercel login
# 3. ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ์์ ๋ฐฐํฌ
vercel
# 4. ํ๋ก๋์
๋ฐฐํฌ
vercel --prod๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์์ ์ ์ธ ๋ฐฉ๋ฒ์ ๋๋ค:
-
Vercel์์ ํ๋ก์ ํธ ์ฐ๊ฒฐ:
- Vercel ๋์๋ณด๋์์ "Add New..." โ "Project"
- GitHub ์ ์ฅ์
bulhwi/quad-chat์ ํ - "Import" ํด๋ฆญ
-
์๋ ๋ฐฐํฌ ์ค์ :
- 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.json (ํ์์)
{
"buildCommand": "npm run build",
"outputDirectory": ".next",
"framework": "nextjs",
"regions": ["icn1"] // ์์ธ ๋ฆฌ์
}๋ธ๋ผ์ฐ์ โโ Next.js Dev Server (3001) โโ REST API Routes โโ Upstash Redis
๋ธ๋ผ์ฐ์ โโ Vercel Edge โโ Next.js App โโ API Routes (/api/rooms/[roomId])
โ
Upstash Redis (Tokyo)
- Redis ์ค์ : Upstash Redis ํ๊ฒฝ๋ณ์ ํ์ ์ค์ (URL, TOKEN)
- CORS ์ค์ : ๋ชจ๋ ์ค๋ฆฌ์ง ํ์ฉ์ผ๋ก ์ค์ ๋จ (
Access-Control-Allow-Origin: *) - ๋ฐ์ดํฐ ์ ์ฅ์: Upstash Redis ๊ธฐ๋ฐ ์๊ตฌ ์ ์ฅ (24์๊ฐ TTL)
- ์ค์ผ์ผ๋ง: ์๋ฒ๋ฆฌ์ค ํน์ฑ์ Redis๋ก ์ํ ๊ณต์
- ์์ฒญ ์ ํ: ๋ฌด๋ฃ ํ๋ ์ผ์ผ 10,000 ์์ฒญ ํ๋
- ๋ฉ์ธ ํ์ด์ง ๋ก๋ฉ
- ๋๋ค์ ์ ๋ ฅ ๋ฐ ๋ฐฉ ์์ฑ
- ๋ฐฉ ์ฝ๋๋ก ์ฐธ์ฌ
- ์ค์๊ฐ ๋ฉ์์ง ์ก์์
- 4๋ช ์ ํ ํ์ธ
- ๋ชจ๋ฐ์ผ์์ ์ ์ ํ ์คํธ
- ๋ค์ํ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธ
- Vercel ๋ก๊ทธ: Vercel ๋์๋ณด๋์์ ํจ์ ๋ก๊ทธ ํ์ธ
- ๋ธ๋ผ์ฐ์ ์ฝ์: HTTP ์์ฒญ/์๋ต ์ํ ํ์ธ
- Network ํญ: REST API ํธ์ถ ๋ชจ๋ํฐ๋ง
- Upstash ์ฝ์: Redis ๋ฐ์ดํฐ ๋ฐ ์ฌ์ฉ๋ ํ์ธ
- quad-chat.vercel.app ์ ์
- ์ํ๋ ๋๋ค์ ์ ๋ ฅ (์ต๋ 20์)
- "์ ๋ฐฉ ๋ง๋ค๊ธฐ" ๋ฒํผ ํด๋ฆญ
- ์์ฑ๋ 7์๋ฆฌ ๋ฐฉ ์ฝ๋๋ฅผ ์น๊ตฌ๋ค์๊ฒ ๊ณต์
- ์ฌ์ดํธ ์ ์ ํ ๋๋ค์ ์ ๋ ฅ
- "๊ธฐ์กด ๋ฐฉ ์ฐธ์ฌํ๊ธฐ" ํด๋ฆญ
- ๋ฐ์ ๋ฐฉ ์ฝ๋ ์ ๋ ฅ
- "๋ฐฉ ์ฐธ์ฌํ๊ธฐ" ํด๋ฆญ
- ํ๋จ ์ ๋ ฅ์ฐฝ์ ๋ฉ์์ง ์ ๋ ฅ
- 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- 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 ์
๋ฐ์ดํธ
## [๋ฏธ๋ฐฐํฌ] - Unreleased
### ์ถ๊ฐ๋จ
- ์๋ก์ด ๊ธฐ๋ฅ ์ค๋ช
# ๋ฆด๋ฆฌ์ฆ ์ ๋ฒ์ ๊ณผ ๋ ์ง ์
๋ฐ์ดํธ
## [1.1.0] - 2025-09-28 - โจ ์๋ก์ด ๊ธฐ๋ฅ- ์๋ํฐ: VS Code
- ํ์ฅ: ES7+ React/Redux/React-Native snippets, Tailwind CSS IntelliSense
- ๋ธ๋ผ์ฐ์ : Chrome (๊ฐ๋ฐ์ ๋๊ตฌ)
- ํฐ๋ฏธ๋: ํตํฉ ํฐ๋ฏธ๋ ๋๋ ๋ณ๋ ํฐ๋ฏธ๋
- 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.mdCHANGELOG.md: ํ๊ตญ์ด ๋ณ๊ฒฝ์ฌํญ ๊ธฐ๋กdocs/VERSIONING.md: ๋ฒ์ ๊ด๋ฆฌ ๊ฐ์ด๋๋ผ์ธ- GitHub Releases: ๋ชจ๋ ๋ฆด๋ฆฌ์ฆ ๋ชฉ๋ก
- ์ฐ๊ฒฐ ๋ฌธ์ : ๋ธ๋ผ์ฐ์ ์ฝ์์์ HTTP ์์ฒญ ์ํ ํ์ธ
- Redis ์ค๋ฅ: Upstash ์ฝ์์์ ์ฐ๊ฒฐ ์ํ ๋ฐ ์ฌ์ฉ๋ ํ์ธ
- ํ๊ฒฝ๋ณ์ ์ค๋ฅ: Vercel ๋์๋ณด๋์์ ํ๊ฒฝ๋ณ์ ์ค์ ํ์ธ
- ๋ชจ๋ฐ์ผ ์ด์: ๋ค๋ฅธ ๋ธ๋ผ์ฐ์ (Safari, Chrome)์์ ํ ์คํธ
- ๋ฐฐํฌ ๋ฌธ์ : Vercel ๋์๋ณด๋์์ ๋น๋ ๋ก๊ทธ ํ์ธ
- ์ด ์ ์ฅ์๋ฅผ ํฌํฌ
- develop ๋ธ๋์น์์ ์ ๊ธฐ๋ฅ ๋ธ๋์น ์์ฑ (
git checkout -b feature/amazing-feature) - ๋ณ๊ฒฝ์ฌํญ ์ปค๋ฐ (
git commit -m 'Add some amazing feature') - ๋ธ๋์น์ ํธ์ (
git push origin feature/amazing-feature) - develop ๋ธ๋์น๋ก Pull Request ์์ฑ
- ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ์น์ธ ํ ๋จธ์ง
๐ ๋ธ๋์น ๋ณดํธ ๊ท์น: main ๋ฐ develop ๋ธ๋์น๋ PR์ ํตํด์๋ง ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ฉฐ, ๋ชจ๋ PR์ ๋ฆฌ๋ทฐ ์น์ธ์ด ํ์ํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฆ ๋๋ค. ์์ธํ ๋ด์ฉ์ LICENSE ํ์ผ์ ์ฐธ์กฐํ์ธ์.
๋ฐ๋ถํ (bulhwi)
- GitHub: @bulhwi
- ๐งช Admin ๊ถํ ํ ์คํธ ์๋ฃ: CLI๋ฅผ ํตํ PR ๋จธ์ง ๊ฐ๋ฅ
- ํ๋ก์ ํธ: quad-chat
์ด ํ๋ก์ ํธ๋ ์ค์๊ฐ ์น ์ฑํ ์ ๊ฐ๋จํ๋ฉด์๋ ํจ๊ณผ์ ์ธ ๊ตฌํ์ ๋ชฉํ๋ก ์ ์๋์์ต๋๋ค. ์ฌ์ฉํด์ฃผ์๊ณ ํผ๋๋ฐฑ์ ๋จ๊ฒจ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
- ๐ญ ์ด๋ชจํฐ์ฝ ๊ธฐ๋ฅ - ๋ค์ํ ์ด๋ชจ์ง ๋ฐ์ ์ถ๊ฐ
- ๐ท ์ด๋ฏธ์ง ์ฒจ๋ถ ๊ธฐ๋ฅ - ์ฌ์ง ๊ณต์ ๊ฐ๋ฅ
- ๐ฑ ๋ชจ๋ฐ์ผ ์ต์ ํ - ๋์ฑ ๊ฐ์ ๋ ๋ชจ๋ฐ์ผ UX
- ๐ ์๋ฆผ ์์คํ - ์ ๋ฉ์์ง ์๋ฆผ ๊ธฐ๋ฅ
- โจ๏ธ ํ์ดํ ์ธ๋์ผ์ดํฐ - ์ค์๊ฐ ์ ๋ ฅ ์ํ ํ์
- WebSocket ์ฐ๊ฒฐ ์ต์ ์ถ๊ฐ (์ ํ์ )
- ๋ฐฉ ๊ด๋ฆฌ ๊ธฐ๋ฅ ํ์ฅ (๋น๊ณต๊ฐ๋ฐฉ, ์ด๋ ๋งํฌ)
- ์ฌ์ฉ์ ํ๋กํ ์์คํ ๋์
- ์ฑํ ํ์คํ ๋ฆฌ ์๊ตฌ ๋ณด๊ด ์ต์
๐ค Generated with Claude Code
๐ก ํ: ์ด README๋ ํ๋ก์ ํธ์ ํจ๊ป ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค. Star โญ๋ฅผ ๋๋ฌ ์ต์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์๋ณด์ธ์!