Skip to content
ย 
ย 

Repository files navigation

๐ŸŽ“ Polaryx

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

Polaryx๋Š” ๊ต์œก๊ธฐ๊ด€์„ ์œ„ํ•œ ๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ ํ•™์Šต๊ด€๋ฆฌ์‹œ์Šคํ…œ(Learning Management System)์ž…๋‹ˆ๋‹ค. Slack๊ณผ ์œ ์‚ฌํ•œ ์ง๊ด€์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๊ต์œก๊ธฐ๊ด€๋ณ„ ๋…๋ฆฝ์ ์ธ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ํšจ์œจ์ ์ธ ์˜จ๋ผ์ธ ๊ต์œก ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ ํŠน์ง•

  • ๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜: ๊ต์œก๊ธฐ๊ด€๋ณ„ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ
  • ์—ญํ•  ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ์ œ์–ด(RBAC): ๊ฐœ์ธ/๊ทธ๋ฃน ๋‹จ์œ„์˜ ์„ธ๋ถ„ํ™”๋œ ๊ถŒํ•œ ๊ด€๋ฆฌ
  • ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ ์„ค๊ณ„: DDD ๊ธฐ๋ฐ˜ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜ ์ ์šฉ
  • ์‹ค์‹œ๊ฐ„ ํ˜‘์—…: Slack ์Šคํƒ€์ผ์˜ ์ง๊ด€์ ์ธ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜
  • ์ž๋™ํ™”๋œ ๋ฐฐํฌ: CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•œ ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค ์šด์˜

๐Ÿš€ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ“š 1. ์›Œํฌ์ŠคํŽ˜์ด์Šค & ํƒญ ๊ด€๋ฆฌ

  • ์›Œํฌ์ŠคํŽ˜์ด์Šค: ๊ต์œก๊ธฐ๊ด€๋ณ„ ๋…๋ฆฝ์ ์ธ ํ•™์Šต ๊ณต๊ฐ„
  • ํƒญ: ์นดํ…Œ๊ณ ๋ฆฌ (Anouncements / Courses / Channels / DirectMessage)๋ณ„ ๊ตฌ๋ถ„ ๋‹จ์œ„
  • ์„œ๋ธŒํƒญ: ํƒญ ๋‚ด ์„ธ๋ถ€ ๋ถ„๋ฅ˜ (์ถ”ํ›„ ๋„์ž… ์˜ˆ์ •)
  • ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…: WebSocket ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์ „์†ก/์ˆ˜์‹ 

๐Ÿ’ฌ 2. ๋ฉ”์‹œ์ง• & ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜

  • ๋ฆฌ์น˜ ํ…์ŠคํŠธ ์—๋””ํ„ฐ: TipTap ๊ธฐ๋ฐ˜ ๋‹ค์–‘ํ•œ ํ˜•์‹ ์ง€์› (๊ตต๊ฒŒ, ๊ธฐ์šธ์ž„, ๋งํฌ ๋“ฑ)
  • ํŒŒ์ผ ์—…๋กœ๋“œ: ์ด๋ฏธ์ง€, ๋ฌธ์„œ ์ฒจ๋ถ€ ๊ธฐ๋Šฅ (AWS S3 ์—ฐ๋™)
  • ์ด๋ชจ์ง€ ๋ฐ˜์‘: ์ฒดํฌ, ๋ฐ•์ˆ˜, ์ข‹์•„์š”, ๊ธฐ๋„, ๋ฐ˜์ง ์ด๋ชจ์ง€๋กœ ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ
  • ๋ฉ”์‹œ์ง€ ํŽธ์ง‘/์‚ญ์ œ: ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ๊ธฐ๋Šฅ
  • ๋ฌดํ•œ ์Šคํฌ๋กค: ํŽ˜์ด์ง€๋„ค์ด์…˜ ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง€ ํžˆ์Šคํ† ๋ฆฌ ๋กœ๋”ฉ

๐Ÿ” 3. ๊ถŒํ•œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ

  • 4๋‹จ๊ณ„ ๊ถŒํ•œ ์ฒด๊ณ„:
    • Admin: ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๋Œ€ํ•œ ๊ด€๋ฆฌ ๋ฐ ์„ค์ •
    • Instructor: ๊ณต์ง€, ํ•™์Šต์ž๋ฃŒ ๊ด€๋ฆฌ ๋ฐ ํ˜‘์—… ํ™œ๋™
    • Student: ํ•™์Šต์ž๋ฃŒ ์—ด๋žŒ, ๊ณผ์ œ ์ œ์ถœ ๋ฐ ํ˜‘์—… ํ™œ๋™
    • Guest: ๋ฏธ๋“ฑ๋ก ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ์ œํ•œ์  ์ ‘๊ทผ
  • ๊ทธ๋ฃน ๊ด€๋ฆฌ: ๊ทธ๋ฃน๋ณ„ ๊ถŒํ•œ ์„ค์ •
  • ์„ธ๋ถ„ํ™”๋œ ์ ‘๊ทผ ์ œ์–ด: ํŽ˜์ด์ง€/๊ธฐ๋Šฅ๋ณ„ ๊ถŒํ•œ ์„ค์ •

๐Ÿ“Š 4. ๊ด€๋ฆฌ ๋„๊ตฌ

  • ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ: ํšŒ์› ๋“ฑ๋ก, ์—ญํ•  ํ• ๋‹น, ํ”„๋กœํ•„ ๊ด€๋ฆฌ
  • ๊ทธ๋ฃน ๊ด€๋ฆฌ: ๊ต์œก์ƒ ๋“ฑ๋ก, ํƒญ ์ดˆ๋Œ€ ๋“ฑ ๊ทธ๋ฃน ๋‹จ์œ„ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ์—ญํ•  ๊ด€๋ฆฌ: ์ปค์Šคํ…€ ์—ญํ•  ์ƒ์„ฑ ๋ฐ ๊ถŒํ•œ ์„ค์ •
  • Excel ์ผ๊ด„ ์—…๋กœ๋“œ: ์‚ฌ์šฉ์ž ์ •๋ณด ๋Œ€๋Ÿ‰ ๋“ฑ๋ก ๊ธฐ๋Šฅ

๐Ÿ“ 5. ์ฝ˜ํ…์ธ  ๊ด€๋ฆฌ

  • Canvas (Notion ์—ฐ๋™): ์™ธ๋ถ€ Notion ํŽ˜์ด์ง€ ์ž„๋ฒ ๋”ฉ
  • ๋งํฌ ์ €์žฅ์†Œ: ์ค‘์š” ๋งํฌ ์ˆ˜์ง‘ ๋ฐ ๊ณต์œ 
  • ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ: ๋ฉ”์‹œ์ง€, ์‚ฌ์šฉ์ž, ์ฝ˜ํ…์ธ  ํ†ตํ•ฉ ๊ฒ€์ƒ‰
  • ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€: ์ค‘์š” ๋ฉ”์‹œ์ง€ ๋ถ๋งˆํฌ ๊ธฐ๋Šฅ (์ถ”ํ›„ ๋„์ž… ์˜ˆ์ •)

๐Ÿ”” 6. ์•Œ๋ฆผ ์‹œ์Šคํ…œ

  • ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ: SSE(Server-Sent Events) ๊ธฐ๋ฐ˜ ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ณ„/ํƒญ๋ณ„ ์‹ ๊ทœ ๋ฉ”์„ธ์ง€ ์ฆ‰์‹œ ์•Œ๋ฆผ
  • ํ‘ธ์‹œ ์•Œ๋ฆผ: PWA ๊ธฐ๋ฐ˜ ๋ธŒ๋ผ์šฐ์ € ํ‘ธ์‹œ ์•Œ๋ฆผ

๐Ÿ“ˆ 7. ๋ฆฌํฌํŠธ & ๋ถ„์„

  • ํ™œ๋™ ๋ถ„์„: ์‚ฌ์šฉ์ž๋ณ„ ์ฐธ์—ฌ๋„ ๋ฐ ๋ฉ”์‹œ์ง€ ํ†ต๊ณ„
  • ์›Œํฌ์ŠคํŽ˜์ด์Šค ํ˜„ํ™ฉ: ์ „์ฒด ํ™œ๋™ ํ˜„ํ™ฉ ๋Œ€์‹œ๋ณด๋“œ

๐Ÿ”„ 8. ์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ

  • WebSocket ์—ฐ๊ฒฐ: ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹ 
  • ์ž๋™ ์žฌ์—ฐ๊ฒฐ: ์—ฐ๊ฒฐ ๋Š๊น€ ์‹œ ์ž๋™ ์žฌ์—ฐ๊ฒฐ
  • ์ถœ์„ ์ƒํƒœ: ์ถœ์„ ์‹œ ์ปฌ๋Ÿฌ ํ™”๋ฉด์œผ๋กœ ํ™œ์„ฑํ™” (์ถ”ํ›„ ๋„์ž… ์˜ˆ์ •)
  • ์˜จ๋ผ์ธ ์ƒํƒœ: ์‚ฌ์šฉ์ž ์ ‘์† ์ƒํƒœ ํ‘œ์‹œ (์ถ”ํ›„ ๋„์ž… ์˜ˆ์ •)

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

Frontend

  • TypeScript - ํƒ€์ž… ์•ˆ์ •์„ฑ ๋ณด์žฅ
  • Next.js - Node.js ๋ฐฑ์—”๋“œ ์—†์ด FastAPI ์ง์ ‘ ์—ฐ๋™, App Router ๊ธฐ๋ฐ˜ ํŒŒ์ผ ์‹œ์Šคํ…œ ๋ผ์šฐํŒ…์œผ๋กœ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
  • Tailwind CSS - ์ผ๊ด€๋œ ๋””์ž์ธ ์‹œ์Šคํ…œ๊ณผ ๋น ๋ฅธ UI ๊ฐœ๋ฐœ
  • Zustand - ์›Œํฌ์ŠคํŽ˜์ด์Šค, ํƒญ ์ƒํƒœ์™€ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ์ƒํƒœ์— ๋Œ€ํ•œ ํšจ์œจ์  ๊ด€๋ฆฌ

Backend

  • Python - ๋น ๋ฅธ ํ”„๋กœํ† ํƒ€์ดํ•‘์— ์ตœ์ ํ™”
  • FastAPI - WebSocket ์‹ค์‹œ๊ฐ„ ํ†ต์‹  ๋ฐ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ง€์›
  • Redis - Pub/Sub ๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง€ ํ, ๋ฉ€ํ‹ฐ ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง€ ๋™๊ธฐํ™” ๋ฐ ์„ธ์…˜ ๊ด€๋ฆฌ

Database

  • MySQL - ACID ํŠธ๋žœ์žญ์…˜ ๋ณด์žฅ์œผ๋กœ ๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ ํ™˜๊ฒฝ์—์„œ ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ํ™•๋ณด, JOIN ๊ธฐ๋ฐ˜ ๋ณต์žกํ•œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”

Infrastructure & DevOps

  • Docker & Docker Compose - ๋ฉ€ํ‹ฐ ์„œ๋น„์Šค ์ปจํ…Œ์ด๋„ˆํ™”๋ฅผ ํ†ตํ•œ ๋กœ์ปฌ ๊ฐœ๋ฐœํ™˜๊ฒฝ๊ณผ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ๋ณด์žฅ
  • AWS
    • EC2 - ECS ๋Œ€์‹  ์ง์ ‘ ์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ธํ”„๋ผ ์ „๋ฐ˜์— ๋Œ€ํ•œ ํ•™์Šต
    • ECR - ๋„์ปค ์ด๋ฏธ์ง€ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์ €์žฅ์†Œ
    • ALB - HTTP/HTTPS ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ L7 ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ
    • ASG - ์Šคํ… ์Šค์ผ€์ผ๋ง ์ •์ฑ… ๊ธฐ๋ฐ˜ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ
    • S3 - ์ •์  ํŒŒ์ผ ์ €์žฅ์†Œ
  • GitHub Actions - ๋ธŒ๋žœ์น˜ ์ „๋žต ๊ธฐ๋ฐ˜ ์ž๋™ํ™”๋œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ

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

โ”œโ”€โ”€ BE/                    # ๋ฐฑ์—”๋“œ (FastAPI)
โ”‚   โ”œโ”€โ”€ app/
โ”‚   โ”‚   โ”œโ”€โ”€ core/          # ํ•ต์‹ฌ ์„ค์ • ๋ฐ ์œ ํ‹ธ๋ฆฌํ‹ฐ
โ”‚   โ”‚   โ”œโ”€โ”€ domain/        # ๋„๋ฉ”์ธ ๋ชจ๋ธ (DDD)
โ”‚   โ”‚   โ”œโ”€โ”€ repository/    # ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต
โ”‚   โ”‚   โ”œโ”€โ”€ service/       # ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต
โ”‚   โ”‚   โ”œโ”€โ”€ router/        # API ๋ผ์šฐํ„ฐ (์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์ธต)
โ”‚   โ”‚   โ””โ”€โ”€ schema/        # API ์Šคํ‚ค๋งˆ ์ •์˜
โ”‚   โ””โ”€โ”€ sql/               # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ
โ”œโ”€โ”€ FE/                    # ํ”„๋ก ํŠธ์—”๋“œ (Next.js)
โ”‚   โ”œโ”€โ”€ app/               # App Router
โ”‚   โ”œโ”€โ”€ components/        # ์žฌ์‚ฌ์šฉ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ hooks/             # ์ปค์Šคํ…€ ํ›…
โ”‚   โ”œโ”€โ”€ store/             # ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ””โ”€โ”€ apis/              # API ํด๋ผ์ด์–ธํŠธ
โ””โ”€โ”€ .github/workflows/     # CI/CD ํŒŒ์ดํ”„๋ผ์ธ

๐Ÿ“š ๊ธฐ์ˆ  ๋ฌธ์„œ

๐Ÿ—๏ธ 1. ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

Polaryx แ„‰แ…ตแ„‰แ…ณแ„แ…ฆแ†ท แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ง

๐Ÿ“‘ 2. API ๋ช…์„ธ์„œ ๋งํฌ

๐Ÿ”„ 3. ์‹œํ€€์Šค ๋‹ค์ด์–ด๊ทธ๋žจ (BE/docs/sequence/)

๐Ÿงช 4. WebSocket ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ (BE/docs/test/)

๐Ÿ“Š 4-1. ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ ๋ฐ ๋„๊ตฌ

  • ํ…Œ์ŠคํŠธ ๋„๊ตฌ: K6
  • ํ”„๋กœํ† ์ฝœ: WebSocket (์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง•)
  • ์„œ๋ฒ„ ๊ตฌ์„ฑ: Redis Pub/Sub ๊ธฐ๋ฐ˜ ๋ฉ€ํ‹ฐ ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜

๐ŸŽฏ 4-2. ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค

  • 1๏ธโƒฃ Smoke ํ…Œ์ŠคํŠธ

    • ๋™์‹œ ์‚ฌ์šฉ์ž: 20 VUS
    • ์ด ์„ธ์…˜ ์ˆ˜: 39๊ฐœ
    • ์—ฐ๊ฒฐ ์„ฑ๊ณต๋ฅ : 100% (39/39)
    • ํ‰๊ท  ์—ฐ๊ฒฐ ์ง€์—ฐ์‹œ๊ฐ„: 64ms
    • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ: 756๊ฐœ ์†ก์‹ , 10,419๊ฐœ ์ˆ˜์‹ 
    • ๊ฒ€์ฆ ๋ชฉ์ : ๊ธฐ๋ณธ์ ์ธ WebSocket ์—ฐ๊ฒฐ ๋ฐ ๋ฉ”์‹œ์ง€ ์†ก์ˆ˜์‹  ์•ˆ์ •์„ฑ
    • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ
  • 2๏ธโƒฃ Load ํ…Œ์ŠคํŠธ

    • ๋™์‹œ ์‚ฌ์šฉ์ž: 400 VUS
    • ์ด ์„ธ์…˜ ์ˆ˜: 15,598๊ฐœ
    • ์—ฐ๊ฒฐ ์„ฑ๊ณต๋ฅ : 99.9% (15,587/15,598)
    • ํ‰๊ท  ์—ฐ๊ฒฐ ์ง€์—ฐ์‹œ๊ฐ„: 1,083ms
    • ๊ฒ€์ฆ ๋ชฉ์ : ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ž ๋ถ€ํ•˜๋ฅผ ๊ฐ€์ •ํ•˜์—ฌ ๋นˆ๋ฒˆํ•œ ์—ฐ๊ฒฐ/ํ•ด์ œ ์ƒํ™ฉ์—์„œ์˜ ์‹œ์Šคํ…œ ์•ˆ์ •์„ฑ
    • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ
  • 3๏ธโƒฃ Soak ํ…Œ์ŠคํŠธ

    • ๋™์‹œ ์‚ฌ์šฉ์ž: 1,200 VUS
    • ์ด ์„ธ์…˜ ์ˆ˜: 9,636๊ฐœ
    • ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„: 842์ดˆ (์•ฝ 14๋ถ„)
    • ์—ฐ๊ฒฐ ์„ฑ๊ณต๋ฅ : 100% (9,636/9,636)
    • ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ: 278,118๊ฐœ ์†ก์‹ , 5,435,263๊ฐœ ์ˆ˜์‹ 
    • ๊ฒ€์ฆ ๋ชฉ์ : ๊ณ ๋ถ€ํ•˜ ์ƒํ™ฉ์—์„œ์˜ ์žฅ์‹œ๊ฐ„ ์•ˆ์ •์„ฑ ๊ฒ€์ฆ
    • ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

๐Ÿ“ˆ 4-3. ์„ฑ๋Šฅ ์ง€ํ‘œ ์š”์•ฝ

์œ ํ˜• ๋™์‹œ ์‚ฌ์šฉ์ž
(VUS)
์—ฐ๊ฒฐ
์„ฑ๊ณต๋ฅ 
ํ‰๊ท 
์ง€์—ฐ์‹œ๊ฐ„
p(95)
์ง€์—ฐ์‹œ๊ฐ„
๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋Ÿ‰
Smoke 20 100% 64ms 187ms ์†ก์‹ : 756
์ˆ˜์‹ : 10,419
Load 400 99.9% 61ms 89ms ์†ก์‹ : 15,695
์ˆ˜์‹ : -
Soak 1,200 100% 3,020ms 9,790ms ์†ก์‹ : 278,118
์ˆ˜์‹ : 5,435,263

๐Ÿ‘ค ์—ญํ•  ๋ฐ ๊ธฐ์—ฌ์‚ฌํ•ญ

๐ŸŽฏ ํ•ต์‹ฌ ์—ญํ• : ๋ฐฑ์—”๋“œ & ๋ฐ๋ธŒ์˜ต์Šค ์—”์ง€๋‹ˆ์–ด

1. ๐Ÿ›๏ธ DDD ๊ธฐ๋ฐ˜ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ ์ •๋ฆฝ

  • Domain-Driven Design ์›์น™์„ ์ ์šฉํ•œ ๋ชจ๋“ˆํ™”๋œ ๋ฐฑ์—”๋“œ ๊ตฌ์กฐ ์„ค๊ณ„
  • Router, Service, Domain, Repository ๊ณ„์ธต ๋ถ„๋ฆฌ๋กœ ๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ
  • ํŒ€ ๊ณตํ†ต ๊ฐœ๋ฐœ ๋ฐฉ์‹ ํ‘œ์ค€ํ™”๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ ํ…œํ”Œ๋ฆฟ ๋ฐ ์ปจ๋ฒค์…˜ ๊ตฌ์ถ•

2. ๐Ÿ—๏ธ ์ธํ”„๋ผ ์•„ํ‚คํ…์ฒ˜ ๋ฐ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•

  • Docker ์ปจํ…Œ์ด๋„ˆํ™”๋ฅผ ํ†ตํ•œ ํ™˜๊ฒฝ ์ผ๊ด€์„ฑ ๋ณด์žฅ
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ ๋ฐ ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ณ ๋ คํ•œ ์ธํ”„๋ผ ์„ค๊ณ„
  • GitHub Actions๋ฅผ ํ™œ์šฉํ•œ ๋นŒ๋“œ/๋ฐฐํฌ ์ž๋™ํ™”

3. ๐Ÿข ๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„

  • ์›Œํฌ์ŠคํŽ˜์ด์Šค๋ณ„ ๋ฐ์ดํ„ฐ ๋ฐ ๋น„์ฆˆ๋‹ˆ์Šค๋กœ์ง ๋ถ„๋ฆฌ ๊ตฌํ˜„
  • ๊ต์œก๊ธฐ๊ด€ ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ ์ˆ˜ํ‰์  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ ์„ค๊ณ„

4. ๐Ÿ” ๊ถŒํ•œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์„ค๊ณ„

  • RBAC(Role-Based Access Control) ๋ชจ๋ธ ๊ธฐ๋ฐ˜ ๊ฐœ์ธ ๋ฐ ๊ทธ๋ฃน๋ณ„ ์„ธ๋ถ„ํ™”๋œ ๊ถŒํ•œ ์ฒด๊ณ„ ์„ค๊ณ„
  • ํŽ˜์ด์ง€ ๋‹จ์œ„ ์ ‘๊ทผ ์ œ์–ด ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  • ๋™์  ๊ถŒํ•œ ํ• ๋‹น

5. ๐Ÿค ํ”„๋ก ํŠธ์—”๋“œ ๊ธฐ์ˆ  ์ง€์›

  • ๋ฐฑ์—”๋“œ API์™€ ํ”„๋ก ํŠธ์—”๋“œ ์—ฐ๋™ ์ด์Šˆ ํ•ด๊ฒฐ

About

๐Ÿ“– ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋ฐ˜ LMS ์„œ๋น„์Šค

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages