octxxiii
์—ฐ๊ฒฐ ์ค‘โ€ฆ
โ† LAB
May 14, 2026

May 14, 2026

๐Ÿ—ก๏ธ GladiaTalk

๐Ÿ—ก๏ธ GladiaTalk

์ €์žฅ์†Œ: octxxiii/gladiatalk ๐Ÿ—ก๏ธ Words are your weapons, wisdom your shield - Real-time debate platform with enhanced security

๐Ÿ—ก๏ธ GladiaTalk

Words are your weapons, wisdom your shield

๊ธ€๋ž˜๋””์—์ดํ„ฐ ์ •์‹ ์œผ๋กœ ํ† ๋ก ์˜ ์•„๋ ˆ๋‚˜์—์„œ ์ง€ํ˜œ๋ฅผ ๊ฒจ๋ฃจ๋Š” ํ”Œ๋žซํผ

๐ŸŒŸ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

GladiaTalk์€ ์‹ค์‹œ๊ฐ„ ํ† ๋ก ๊ณผ ํˆฌํ‘œ๋ฅผ ํ†ตํ•ด ์ง€ํ˜œ๋ฅผ ๊ฒจ๋ฃจ๋Š” ์†Œ์…œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋“ค์€ ๋‹ค์–‘ํ•œ ์ฃผ์ œ์— ๋Œ€ํ•ด ๋‘ ๊ฐ€์ง€ ์„ ํƒ์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๊ณ , ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ† ๋ก ํ•˜๋ฉฐ ํˆฌํ‘œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  • ๐Ÿ”ฅ ์‹ค์‹œ๊ฐ„ ํ† ๋ก : ํ™œ๋ฐœํ•œ ํ† ๋ก  ํ™˜๊ฒฝ์—์„œ ์ง€ํ˜œ๋ฅผ ๊ฒจ๋ฃจ์„ธ์š”
  • ๐Ÿ—ณ๏ธ ํˆฌํ‘œ ์‹œ์Šคํ…œ: ๋‘ ๊ฐ€์ง€ ์„ ํƒ์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๊ณ  ์ค‘๊ฐ„์— ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ๐Ÿ† ์‹ค์‹œ๊ฐ„ ๋žญํ‚น: ์ฑ”ํ”ผ์–ธ ๋žญํ‚น ์‹œ์Šคํ…œ์œผ๋กœ ๊ฒฝ์Ÿ์„ ์ฆ๊ฒจ๋ณด์„ธ์š”
  • ๐Ÿ’ฐ ํ† ๋ก  ๊ฒฝ์ œ: ํ† ๋ก  ์ฝ”์ธ์œผ๋กœ ๊ฐ€์‹œ์„ฑ์„ ๋†’์ด๊ณ  ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์„ ํ•ด๊ธˆ
  • ๐Ÿ›ก๏ธ ์•ˆ์ „ํ•œ ํ™˜๊ฒฝ: AI ๋ชจ๋”๋ ˆ์ด์…˜๊ณผ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐ€์ด๋“œ๋ผ์ธ
  • ๐Ÿ“ฑ ํฌ๋กœ์Šค ํ”Œ๋žซํผ: ์›น, ๋ชจ๋ฐ”์ผ, ๊ด€๋ฆฌ์ž ํŒจ๋„ ์ง€์›

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

Backend

  • Fastify: ๊ณ ์„ฑ๋Šฅ ์›น ํ”„๋ ˆ์ž„์›Œํฌ
  • tRPC: ํƒ€์ž… ์•ˆ์ „ํ•œ API
  • Prisma: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ORM
  • PostgreSQL: ๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • Redis: ์บ์‹ฑ ๋ฐ ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ
  • WebSocket: ์‹ค์‹œ๊ฐ„ ํ†ต์‹ 

Frontend

  • Next.js: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (PWA)
  • React Native: ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
  • Tailwind CSS: ์Šคํƒ€์ผ๋ง
  • TypeScript: ํƒ€์ž… ์•ˆ์ „์„ฑ

DevOps & Security

  • Docker: ์ปจํ…Œ์ด๋„ˆํ™”
  • Nginx: ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ
  • Prometheus + Grafana: ๋ชจ๋‹ˆํ„ฐ๋ง
  • Helmet: ๋ณด์•ˆ ํ—ค๋”
  • Rate Limiting: API ๋ณดํ˜ธ
  • Fail2ban: ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๋ฐฉ์ง€

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

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

  • Node.js 18+
  • npm ๋˜๋Š” yarn
  • Docker (์„ ํƒ์‚ฌํ•ญ)
  • PostgreSQL
  • Redis

์„ค์น˜ ๋ฐ ์‹คํ–‰

  1. ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/yourusername/gladiatalk.git
cd gladiatalk
  1. ์˜์กด์„ฑ ์„ค์น˜
npm install
  1. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
cp .env.development .env
# .env ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์„ธ์š”
  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •
npm run db:generate
npm run db:push
npm run db:seed
  1. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘
npm run dev

Docker๋ฅผ ์‚ฌ์šฉํ•œ ์‹คํ–‰

# ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
docker-compose -f docker-compose.dev.yml up

# ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ
docker-compose -f docker-compose.prod.yml up

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

gladiatalk/
โ”œโ”€โ”€ apps/
โ”‚   โ”œโ”€โ”€ web/                 # Next.js ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜
โ”‚   โ”œโ”€โ”€ mobile/             # React Native ๋ชจ๋ฐ”์ผ ์•ฑ
โ”‚   โ”œโ”€โ”€ admin/              # ๊ด€๋ฆฌ์ž ํŒจ๋„
โ”‚   โ””โ”€โ”€ server/             # Fastify API ์„œ๋ฒ„
โ”œโ”€โ”€ packages/
โ”‚   โ”œโ”€โ”€ api/                # tRPC API ์ •์˜
โ”‚   โ”œโ”€โ”€ db/                 # Prisma ์Šคํ‚ค๋งˆ ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
โ”‚   โ”œโ”€โ”€ ui/                 # ๊ณต์œ  UI ์ปดํฌ๋„ŒํŠธ
โ”‚   โ””โ”€โ”€ proto/              # ๊ณต์œ  ํƒ€์ž… ์ •์˜
โ”œโ”€โ”€ scripts/
โ”‚   โ”œโ”€โ”€ security-setup.sh   # ๋ณด์•ˆ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ”œโ”€โ”€ environment-setup.sh # ํ™˜๊ฒฝ ์„ค์ • ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ””โ”€โ”€ test-automation.sh  # ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ nginx/                  # Nginx ์„ค์ •
โ”œโ”€โ”€ monitoring/             # ๋ชจ๋‹ˆํ„ฐ๋ง ์„ค์ •
โ””โ”€โ”€ docs/                   # ๋ฌธ์„œ

๐Ÿ›ก๏ธ ๋ณด์•ˆ

GladiaTalk์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ๋ณด์•ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

์‹œ์Šคํ…œ ๋ณด์•ˆ

  • ๋ฐฉํ™”๋ฒฝ ์„ค์ • (UFW)
  • SSH ๋ณด์•ˆ ๊ฐ•ํ™”
  • Fail2ban ๋ฌด์ฐจ๋ณ„ ๋Œ€์ž… ๋ฐฉ์ง€
  • ์ •๊ธฐ ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ

  • Rate Limiting
  • CORS ์ •์ฑ…
  • ๋ณด์•ˆ ํ—ค๋” (Helmet)
  • ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ
  • SQL Injection ๋ฐฉ์ง€
  • XSS/CSRF ๋ฐฉ์ง€

๋ชจ๋‹ˆํ„ฐ๋ง

  • ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ๋ณด์•ˆ ์ด๋ฒคํŠธ ์•Œ๋ฆผ
  • ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง
  • ๋ฐฑ์—… ์‹œ์Šคํ…œ

๐Ÿ“Š ๋ชจ๋‹ˆํ„ฐ๋ง

Prometheus์™€ Grafana๋ฅผ ์‚ฌ์šฉํ•œ ์ข…ํ•ฉ ๋ชจ๋‹ˆํ„ฐ๋ง:

  • API ์‘๋‹ต ์‹œ๊ฐ„
  • ์˜ค๋ฅ˜์œจ ์ถ”์ 
  • ์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ๋Ÿ‰
  • ์‚ฌ์šฉ์ž ํ™œ๋™ ๋ถ„์„
  • ๋ณด์•ˆ ์ด๋ฒคํŠธ ๋ชจ๋‹ˆํ„ฐ๋ง

๐Ÿ”ง ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ

์ฝ”๋“œ ์Šคํƒ€์ผ

  • TypeScript ์‚ฌ์šฉ
  • ESLint + Prettier
  • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ปจ๋ฒค์…˜
  • PR ๋ฆฌ๋ทฐ ํ•„์ˆ˜

ํ…Œ์ŠคํŠธ

# ์ „์ฒด ํ…Œ์ŠคํŠธ ์‹คํ–‰
npm run test

# ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€
npm run test:coverage

# E2E ํ…Œ์ŠคํŠธ
npm run test:e2e

๋ฐฐํฌ

# ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run build

# Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ
docker build -t gladiatalk .

# ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰
./scripts/deploy.sh

๐Ÿ“ˆ ์„ฑ๋Šฅ ์ตœ์ ํ™”

  • Redis ์บ์‹ฑ
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์‹ฑ
  • CDN ์‚ฌ์šฉ
  • ์ด๋ฏธ์ง€ ์ตœ์ ํ™”
  • ์ฝ”๋“œ ์Šคํ”Œ๋ฆฌํŒ…

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

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

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

๐Ÿ“ž ์—ฐ๋ฝ์ฒ˜

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

  • Fastify - ๊ณ ์„ฑ๋Šฅ ์›น ํ”„๋ ˆ์ž„์›Œํฌ
  • tRPC - ํƒ€์ž… ์•ˆ์ „ํ•œ API
  • Next.js - React ํ”„๋ ˆ์ž„์›Œํฌ
  • Tailwind CSS - CSS ํ”„๋ ˆ์ž„์›Œํฌ
  • Prisma - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ORM

GladiaTalk - ์ง€ํ˜œ์˜ ์•„๋ ˆ๋‚˜์—์„œ ๋‹น์‹ ์˜ ๋ฌด๊ธฐ๋ฅผ ํœ˜๋‘๋ฅด์„ธ์š”! โš”๏ธ