Skip to content

jlinsights/ASCA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

209 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽจ ASCA - ๋™์–‘์„œ์˜ˆํ˜‘ํšŒ ์›น์‚ฌ์ดํŠธ

์ „ํ†ต ๋™์–‘ ์„œ์˜ˆ์˜ ์•„๋ฆ„๋‹ค์›€์„ ํ˜„๋Œ€์ ์ธ ์›น ๊ธฐ์ˆ ๋กœ ๊ตฌํ˜„ํ•œ ์ข…ํ•ฉ ๋ฌธํ™” ํ”Œ๋žซํผ

Vercel Next.js TypeScript Tailwind CSS

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

๐ŸŽฏ ํ•ต์‹ฌ ์‹œ์Šคํ…œ

  • ๐Ÿ—„๏ธ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋ฐ์ดํ„ฐ ์•„ํ‚คํ…์ฒ˜ - Drizzle ORM + PostgreSQL(Supabase) ๊ธฐ๋ฐ˜์˜ ๊ณ ์„ฑ๋Šฅ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด
  • ๐Ÿ›ก๏ธ ๋ณด์•ˆ ๋ฐ ๊ฐ์‚ฌ(Audit) - ํ–‰์œ„ ๊ธฐ๋ฐ˜ ๊ฐ์‚ฌ ๋กœ๊ทธ, ๋ฆฌ์Šคํฌ ํ‰๊ฐ€, ๊ณ„์ธต์  ๊ถŒํ•œ ์ œ์–ด
  • ๐Ÿš€ CQRS & ์ด๋ฒคํŠธ ์•„ํ‚คํ…์ฒ˜ - ํ™•์žฅ์„ฑ ์žˆ๋Š” ์„œ๋น„์Šค ๋กœ์ง ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Command/Query ๋ถ„๋ฆฌ
  • ๐ŸŽจ ์ „๋ฌธ์  ๋ธŒ๋žœ๋“œ ๊ฐ€์ด๋“œ๋ผ์ธ - ๋””์ž์ธ ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉ๋œ ๋ธŒ๋žœ๋“œ ์•„์ด๋ดํ‹ฐํ‹ฐ
  • ๐Ÿ“ธ ์ง€๋Šฅํ˜• ๊ฐค๋Ÿฌ๋ฆฌ ์‹œ์Šคํ…œ - ์—ฐ๋„๋ณ„/์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๋ถ„๋ฅ˜, ๊ณ ๊ธ‰ ํƒœ๊ทธ ๊ธฐ๋Šฅ
  • ๐ŸŒ ํ•œ๊ตญ์–ด ํŠนํ™” UI - ์™„์ „ํ•œ ํ•œ๊ตญ์–ด ํ˜„์ง€ํ™” ๋ฐ ๋ฌธํ™”์  ์ ์‘

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

  • ๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ - ๋ชจ๋“  ๋””๋ฐ”์ด์Šค์—์„œ ์ตœ์ ํ™”๋œ ๊ฒฝํ—˜
  • โ™ฟ ์›น ์ ‘๊ทผ์„ฑ - WCAG 2.1 AA ๊ฐ€์ด๋“œ๋ผ์ธ ์ค€์ˆ˜
  • ๐Ÿ”„ ๋‹คํฌ๋ชจ๋“œ ์‹œ์Šคํ…œ - ์ตœ์ ํ™”๋œ ๋ผ์ดํŠธ/๋‹คํฌ ํ…Œ๋งˆ ์ง€์›
  • ๐Ÿ–ผ๏ธ ๊ณ ๊ธ‰ ๊ฐค๋Ÿฌ๋ฆฌ - AI ๊ธฐ๋ฐ˜ ๋ถ„๋ฅ˜, ์—ฐ๋„๋ณ„ ํ•„ํ„ฐ๋ง, ๊ณ„์ ˆ ํƒœ๊ทธ
  • ๐Ÿ” ์ง€๋Šฅํ˜• ๊ฒ€์ƒ‰ - ์นดํ…Œ๊ณ ๋ฆฌ, ํƒœ๊ทธ, ์—ฐ๋„ ๊ธฐ๋ฐ˜ ๋‹ค์ฐจ์› ๊ฒ€์ƒ‰
  • ๐ŸŽฏ ์ง๊ด€์  ๋„ค๋น„๊ฒŒ์ด์…˜ - ํ•œ๊ตญ์–ด ํ˜„์ง€ํ™”๋œ ๋ฉ”๋‰ด ๊ตฌ์กฐ

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

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

๐Ÿš€ ๊ฐค๋Ÿฌ๋ฆฌ ์‹œ์Šคํ…œ ํ•˜์ด๋ผ์ดํŠธ

๐Ÿ“ˆ ํ†ต๊ณ„ (2026๋…„ ๊ธฐ์ค€)

  • ์ด ์ด๋ฏธ์ง€: 265์žฅ
  • ์นดํ…Œ๊ณ ๋ฆฌ: 9๊ฐœ (์‹ฌ์‚ฌ์œ„์›ํšŒ, ํœ˜ํ˜ธ๋Œ€ํšŒ, ์ „์‹œํšŒ, ์‹œ์ƒ์‹ ๋“ฑ)
  • ์ž๋™ ํƒœ๊ทธ: ๊ณ„์ ˆ, ์—ฐ๋„, ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํŠนํ™” ํƒœ๊ทธ
  • ์—ฐ๋„ ์ง€์›: 2026๋…„ (ํ–ฅํ›„ ์ง€์† ํƒ‘์žฌ ๊ด€๋ฆฌ)

๐ŸŽฏ ํ•ต์‹ฌ ๊ฐค๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ

  • ์ง€๋Šฅํ˜• ๋ถ„๋ฅ˜: ํด๋” ๊ตฌ์กฐ ๊ธฐ๋ฐ˜ ์ž๋™ ์นดํ…Œ๊ณ ๋ฆฌ ๊ฐ์ง€
  • ์—ฐ๋„๋ณ„ ํ•„ํ„ฐ๋ง: ๋…„๋„ ๊ธฐ๋ฐ˜ ์ฝ˜ํ…์ธ  ์กฐ์งํ™”
  • ๊ณ ๊ธ‰ ํƒœ๊ทธ ์‹œ์Šคํ…œ: ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํŠนํ™” ํƒœ๊ทธ (์‹ฌ์‚ฌ์œ„์›ํšŒ, ํœ˜ํ˜ธ๋Œ€ํšŒ, ์‹œ์ƒ๊ธฐ๋… ๋“ฑ)
  • ๊ณ„์ ˆ ํƒœ๊ทธ: ๋‚ ์งœ ๊ธฐ๋ฐ˜ ๊ณ„์ ˆ ์ •๋ณด ์ž๋™ ์ถ”์ถœ
  • ๋‹คํฌ๋ชจ๋“œ ์ตœ์ ํ™”: ์‹œ์ธ์„ฑ๊ณผ ๊ฐ€์‹œ์„ฑ์„ ๊ณ ๋ คํ•œ ์ƒ‰์ƒ ์‹œ์Šคํ…œ
  • ๋ฐ˜์‘ํ˜• ๋งˆ์‚ฌ์ดํฌ ๋ ˆ์ด์•„์›ƒ: ๋™์  ๊ฒฉ์ž ๋ฐฐ์น˜

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

ํ”„๋ก ํŠธ์—”๋“œ

  • Framework: Next.js 16.0.10 (App Router)
  • Language: TypeScript 5
  • Styling: Tailwind CSS 3.4.17
  • UI Components: Radix UI + Shadcn/ui
  • Animations: Framer Motion
  • State Management: React Context API + Zustand
  • Form Handling: React Hook Form + Zod
  • Image Optimization: Next.js Image + ๊ณ ํ™”์งˆ ์ตœ์ ํ™”

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • ORM: Drizzle ORM 0.43.1
  • Database: PostgreSQL (Supabase / Neon)
  • Architecture: CQRS, Event-Driven, Agent Pattern
  • Migration: Drizzle Kit
  • Type Safety: ์™„์ „ํ•œ TypeScript ์ง€์›

๊ฐœ๋ฐœ ๋„๊ตฌ

  • Package Manager: npm
  • Linting: ESLint + TypeScript ESLint
  • Formatting: Prettier
  • Testing: Jest + React Testing Library
  • Pre-commit: Husky + lint-staged

๋ฐฐํฌ ๋ฐ ์ธํ”„๋ผ

  • Hosting: Vercel (Production)
  • Domain: asca-gallery.vercel.app
  • CI/CD: GitHub Actions + Vercel ์ž๋™ ๋ฐฐํฌ
  • Performance: Edge Runtime + ISR (Incremental Static Regeneration)

์™ธ๋ถ€ ์„œ๋น„์Šค

  • Authentication: Clerk + Custom Admin System
  • Chat Support: ChannelIO
  • Meeting Scheduler: Cal.com
  • PDF Generation: jsPDF + html2canvas
  • Gallery Analytics: ๋ฐฉ๋ฌธ์ž ์ถ”์  ๋ฐ ์ด๋ฏธ์ง€ ์กฐํšŒ ํ†ต๊ณ„

๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ

ํ™˜๊ฒฝ ์š”๊ตฌ์‚ฌํ•ญ

  • Node.js 18+
  • npm 8+

์„ค์น˜

# ์ €์žฅ์†Œ ํด๋ก 
git clone https://github.com/jlinsights/ASCA
cd ASCA

# ์˜์กด์„ฑ ์„ค์น˜
npm install --legacy-peer-deps

# ๊ฐค๋Ÿฌ๋ฆฌ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
npm run gallery:generate

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘
npm run dev

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

.env.local ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋‹ค์Œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค์„ ์„ค์ •ํ•˜์„ธ์š”:

# Database (ํ•„์ˆ˜)
DATABASE_URL="file:./sqlite.db"

# Next.js (ํ•„์ˆ˜)
NEXT_PUBLIC_APP_URL="http://localhost:3000"

# Clerk Authentication (์„ ํƒ์ )
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_your_publishable_key_here
CLERK_SECRET_KEY=sk_test_your_secret_key_here

# ๊ธฐํƒ€ ์„ ํƒ์  ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค
NEXT_PUBLIC_GOOGLE_ANALYTICS_ID=your_ga_id

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์ •

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ƒ์„ฑ
npm run db:generate

# ์Šคํ‚ค๋งˆ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ์šฉ
npm run db:push

# ์‹œ๋“œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ (๊ฐœ๋ฐœ์šฉ)
npm run db:seed

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ŠคํŠธ
npx tsx lib/db/test.ts

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค GUI ๋„๊ตฌ ์‹คํ–‰
npm run db:studio

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

โ”œโ”€โ”€ app/                    # Next.js App Router
โ”‚   โ”œโ”€โ”€ admin/             # ๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€
โ”‚   โ”‚   โ”œโ”€โ”€ login/         # ๊ด€๋ฆฌ์ž ๋กœ๊ทธ์ธ
โ”‚   โ”‚   โ””โ”€โ”€ page.tsx       # ๊ด€๋ฆฌ์ž ๋Œ€์‹œ๋ณด๋“œ
โ”‚   โ”œโ”€โ”€ artworks/          # ์ž‘ํ’ˆ ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ artists/           # ์ž‘๊ฐ€ ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ awards/            # ์ˆ˜์ƒ์ž‘ ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ brand/             # ๋ธŒ๋žœ๋“œ ๊ฐ€์ด๋“œ๋ผ์ธ
โ”‚   โ”œโ”€โ”€ exhibitions/       # ์ „์‹œํšŒ ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ gallery/           # ๐Ÿ“ธ ๊ฐค๋Ÿฌ๋ฆฌ ๋ฉ”์ธ ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ news/              # ๋‰ด์Šค ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ events/            # ์ด๋ฒคํŠธ ํŽ˜์ด์ง€
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ components/            # ์žฌ์‚ฌ์šฉ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”œโ”€โ”€ gallery/          # ๐Ÿ“ธ ๊ฐค๋Ÿฌ๋ฆฌ ์ „์šฉ ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ GalleryGrid.tsx    # ๋ฉ”์ธ ๊ฐค๋Ÿฌ๋ฆฌ ๊ทธ๋ฆฌ๋“œ
โ”‚   โ”‚   โ”œโ”€โ”€ SocialShare.tsx    # ์†Œ์…œ ๊ณต์œ  ๊ธฐ๋Šฅ
โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ”œโ”€โ”€ ui/               # Shadcn/ui + ๋ธŒ๋žœ๋“œ ํŠนํ™” ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ button.tsx    # ๋ธŒ๋žœ๋“œ variants ํฌํ•จ
โ”‚   โ”‚   โ”œโ”€โ”€ badge.tsx     # ์ „ํ†ต/ํ˜์‹ /ํŠน๋ณ„ variants
โ”‚   โ”‚   โ””โ”€โ”€ card.tsx      # ๊ธ€๋ž˜์Šค๋ชจํ”ผ์ฆ˜ ํšจ๊ณผ
โ”‚   โ”œโ”€โ”€ header.tsx        # ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ํ˜„์ง€ํ™” ํ—ค๋”
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ lib/                  # ์œ ํ‹ธ๋ฆฌํ‹ฐ & ์„ค์ •
โ”‚   โ”œโ”€โ”€ data/            # ๐Ÿ“Š ๋ฐ์ดํ„ฐ ํŒŒ์ผ
โ”‚   โ”‚   โ””โ”€โ”€ gallery-data.json  # ๊ฐค๋Ÿฌ๋ฆฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ (265๊ฐœ ์ด๋ฏธ์ง€)
โ”‚   โ”œโ”€โ”€ db/              # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ
โ”‚   โ”‚   โ”œโ”€โ”€ schema.ts    # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ (12๊ฐœ ํ…Œ์ด๋ธ”)
โ”‚   โ”‚   โ”œโ”€โ”€ queries.ts   # ํƒ€์ž… ์•ˆ์ „ ์ฟผ๋ฆฌ ํ•จ์ˆ˜๋“ค
โ”‚   โ”‚   โ””โ”€โ”€ ...
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ public/images/gallery/  # ๐Ÿ“ธ ๊ฐค๋Ÿฌ๋ฆฌ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ
โ”‚   โ”œโ”€โ”€ committee_2025/    # ์‹ฌ์‚ฌ์œ„์›ํšŒ (73์žฅ)
โ”‚   โ”œโ”€โ”€ contest_2025/      # ํœ˜ํ˜ธ๋Œ€ํšŒ (69์žฅ)
โ”‚   โ”œโ”€โ”€ group_2025/        # ๋‹จ์ฒด์‚ฌ์ง„ (16์žฅ)
โ”‚   โ”œโ”€โ”€ award_2025/        # ์‹œ์ƒ๊ธฐ๋… (33์žฅ)
โ”‚   โ”œโ”€โ”€ ceremony_2025/     # ์‹œ์ƒ์‹ (35์žฅ)
โ”‚   โ”œโ”€โ”€ exhibition_2025/   # ์ „์‹œํšŒ (33์žฅ)
โ”‚   โ””โ”€โ”€ ...
โ”œโ”€โ”€ scripts/              # ๐Ÿค– ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ
โ”‚   โ””โ”€โ”€ generate-gallery-data.js  # ๊ฐค๋Ÿฌ๋ฆฌ ๋ฐ์ดํ„ฐ ์ž๋™ ์ƒ์„ฑ
โ”œโ”€โ”€ types/               # TypeScript ํƒ€์ž… ์ •์˜
โ”‚   โ””โ”€โ”€ gallery.ts       # ๊ฐค๋Ÿฌ๋ฆฌ ๊ด€๋ จ ํƒ€์ž…
โ””โ”€โ”€ ...

๐ŸŽจ ๋””์ž์ธ ์‹œ์Šคํ…œ

๋ธŒ๋žœ๋“œ ์ปฌ๋Ÿฌ ํŒ”๋ ˆํŠธ

  • Ink Black (#1a1a1a) - ์ „ํ†ต ๋จน์ƒ‰, ์ฃผ์š” ํ…์ŠคํŠธ
  • Rice Paper White (#f5f5f0) - ํ•œ์ง€ ์ƒ‰์ƒ, ๋ฐฐ๊ฒฝ
  • Celadon Green (#88A891) - ์ฒญ์ž ๋…น์ƒ‰, ์ฃผ์š” ์•ก์…˜
  • Sage Green (#B7C4B7) - ์—ฐํ•œ ๋…น์ƒ‰, ๋ณด์กฐ ์•ก์…˜
  • Terra Red (#9B4444) - ๋ถ‰์€ ํ™์ƒ‰, ๊ฒฝ๊ณ /์‚ญ์ œ
  • Stone Gray (#6B7280) - ํšŒ์ƒ‰, ์ค‘์„ฑ ์š”์†Œ

UI ์ปดํฌ๋„ŒํŠธ ์‹œ์Šคํ…œ

  • Button Variants: celadon, sage, terra, traditional, rice, touch
  • Badge Variants: traditional, innovation, special, neutral
  • Card Variants: traditional, artwork, glass, elevated
  • Hover Effects: lift, scale, glow

ํƒ€์ดํฌ๊ทธ๋ž˜ํ”ผ

  • Primary Font: Inter (Google Fonts)
  • Traditional Class: font-traditional (๋ธŒ๋žœ๋“œ ์ผ๊ด€์„ฑ)
  • Font Weights: 400 (normal), 500 (medium), 600 (semibold)

๏ฟฝ๏ฟฝ๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ

์ฃผ์š” ํ…Œ์ด๋ธ” (12๊ฐœ)

  1. users - ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ ์—ญํ•  ๊ด€๋ฆฌ
  2. artists - ์ž‘๊ฐ€ ์ƒ์„ธ ์ •๋ณด (๋‹ค๊ตญ์–ด ์ง€์›)
  3. artworks - ์ž‘ํ’ˆ ์ •๋ณด (๋‹ค๊ตญ์–ด ์ง€์›)
  4. exhibitions - ์ „์‹œํšŒ ์ •๋ณด
  5. news - ๋‰ด์Šค ๋ฐ ๊ณต์ง€์‚ฌํ•ญ
  6. events - ์ด๋ฒคํŠธ ๋ฐ ์›Œํฌ์ˆ
  7. galleries - ์˜จ๋ผ์ธ ๊ฐค๋Ÿฌ๋ฆฌ
  8. exhibition_artworks - ์ „์‹œํšŒ-์ž‘ํ’ˆ ๊ด€๊ณ„
  9. exhibition_artists - ์ „์‹œํšŒ-์ž‘๊ฐ€ ๊ด€๊ณ„
  10. gallery_artworks - ๊ฐค๋Ÿฌ๋ฆฌ-์ž‘ํ’ˆ ๊ด€๊ณ„
  11. event_participants - ์ด๋ฒคํŠธ ์ฐธ๊ฐ€์ž
  12. admin_permissions - ๊ด€๋ฆฌ์ž ๊ถŒํ•œ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํฌ๋ฆฝํŠธ

# ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑ
npm run db:generate

# ์Šคํ‚ค๋งˆ ์ ์šฉ
npm run db:push

# ์‹œ๋“œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
npm run db:seed

# ์™„์ „ ๋ฆฌ์…‹ (์ดˆ๊ธฐํ™” + ์Šคํ‚ค๋งˆ + ์‹œ๋“œ)
npm run db:reset

# GUI ๋„๊ตฌ ์‹คํ–‰
npm run db:studio

# ์—ฐ๊ฒฐ ํ…Œ์ŠคํŠธ
npx tsx lib/db/test.ts

๐Ÿ” ๊ด€๋ฆฌ์ž ์‹œ์Šคํ…œ

ํŠน๋ณ„ ๊ด€๋ฆฌ์ž ๊ณ„์ •

  • ์ด๋ฉ”์ผ: info@orientalcalligraphy.org
  • ํŠน์ง•: ๋น„๋ฐ€๋ฒˆํ˜ธ ์—†์ด ์ž๋™ ๋กœ๊ทธ์ธ
  • ๊ถŒํ•œ: ๋ชจ๋“  CMS ๊ธฐ๋Šฅ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ์ ‘๊ทผ: /admin ํŽ˜์ด์ง€ ์ž๋™ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ

๊ถŒํ•œ ์‹œ์Šคํ…œ

  • CMS ๊ด€๋ฆฌ (์ฝ๊ธฐ/์“ฐ๊ธฐ/์‚ญ์ œ)
  • ์ž‘๊ฐ€ ๊ด€๋ฆฌ
  • ์ž‘ํ’ˆ ๊ด€๋ฆฌ
  • ์ „์‹œํšŒ ๊ด€๋ฆฌ
  • ๋‰ด์Šค ๊ด€๋ฆฌ
  • ์ด๋ฒคํŠธ ๊ด€๋ฆฌ
  • ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ

๐Ÿงช ํ…Œ์ŠคํŒ…

# ๋ชจ๋“  ํ…Œ์ŠคํŠธ ์‹คํ–‰
npm test

# ํ…Œ์ŠคํŠธ ๊ฐ์‹œ ๋ชจ๋“œ
npm run test:watch

# ์ปค๋ฒ„๋ฆฌ์ง€ ๋ฆฌํฌํŠธ ์ƒ์„ฑ
npm run test:coverage

# CI ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ ์‹คํ–‰
npm run test:ci

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ŠคํŠธ
npx tsx lib/db/test.ts

๐Ÿ”ง ๊ฐœ๋ฐœ ์Šคํฌ๋ฆฝํŠธ

์ผ๋ฐ˜ ๊ฐœ๋ฐœ

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘
npm run dev

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

# ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„ ์‹œ์ž‘
npm start

# ๊ฐค๋Ÿฌ๋ฆฌ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ๐Ÿš€
npm run gallery:generate

# ํƒ€์ž… ๊ฒ€์‚ฌ
npm run type-check

# ๋ฆฐํŒ…
npm run lint
npm run lint:fix

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ

# ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑ
npm run db:generate

# ์Šคํ‚ค๋งˆ ์ ์šฉ
npm run db:push

# ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์‹คํ–‰
npm run db:migrate

# ์‹œ๋“œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
npm run db:seed

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฆฌ์…‹
npm run db:reset

# GUI ๋„๊ตฌ ์‹คํ–‰
npm run db:studio

# ์Šคํ‚ค๋งˆ ๊ฒ€์ฆ
npm run db:check

# ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ดˆ๊ธฐํ™”
npm run db:drop

๐ŸŒ ํ˜„์ง€ํ™” ์‹œ์Šคํ…œ

๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ํŠนํ™” UI

ํ˜„์žฌ ์ƒํƒœ: ์™„์ „ํ•œ ํ•œ๊ตญ์–ด ํ˜„์ง€ํ™” ์™„๋ฃŒ

  • โœ… ํ—ค๋” ๋ฉ”๋‰ด: ์ „์‹œํšŒ, ์ž‘ํ’ˆ, ์ž‘๊ฐ€, ํ–‰์‚ฌ, ๊ฐค๋Ÿฌ๋ฆฌ, ๊ฒ€์ƒ‰
  • โœ… ๋‹ค๊ตญ์–ด ๋ฒ„ํŠผ ์ œ๊ฑฐ: ๊น”๋”ํ•œ ํ•œ๊ตญ์–ด ์ „์šฉ ์ธํ„ฐํŽ˜์ด์Šค
  • โœ… ๊ฐค๋Ÿฌ๋ฆฌ ์นดํ…Œ๊ณ ๋ฆฌ: ์‹ฌ์‚ฌ์œ„์›ํšŒ, ํœ˜ํ˜ธ๋Œ€ํšŒ, ์‹œ์ƒ๊ธฐ๋… ๋“ฑ ํ•œ๊ตญ์–ด ๋ช…์นญ
  • โœ… ๋ฌธํ™”์  ์ ์‘: ๋™์–‘์„œ์˜ˆ ๋ฌธํ™”์— ๋งž๋Š” UI/UX

๋‹ค๊ตญ์–ด ์ง€์› ์ธํ”„๋ผ (ํ–ฅํ›„ ํ™•์žฅ์šฉ)

์ง€์› ๊ฐ€๋Šฅ ์–ธ์–ด:

  • ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด (ko) - ๊ธฐ๋ณธ ์–ธ์–ด (ํ˜„์žฌ ํ™œ์„ฑํ™”)
  • ๐Ÿ‡บ๐Ÿ‡ธ ์˜์–ด (en) - ์ธํ”„๋ผ ์ค€๋น„๋จ
  • ๐Ÿ‡ฏ๐Ÿ‡ต ์ผ๋ณธ์–ด (ja) - ์ธํ”„๋ผ ์ค€๋น„๋จ
  • ๐Ÿ‡จ๐Ÿ‡ณ ์ค‘๊ตญ์–ด (zh) - ์ธํ”„๋ผ ์ค€๋น„๋จ

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

๋ชจ๋“  ์ฃผ์š” ์ฝ˜ํ…์ธ  ํ…Œ์ด๋ธ”์—์„œ ๋‹ค๊ตญ์–ด ํ•„๋“œ ์ง€์›:

  • title, titleKo, titleEn, titleCn, titleJp
  • description, descriptionKo, descriptionEn, descriptionCn, descriptionJp
  • name, nameKo, nameEn, nameCn, nameJp

๊ฐค๋Ÿฌ๋ฆฌ ๋‹ค๊ตญ์–ด ์ง€์›:

  • ์นดํ…Œ๊ณ ๋ฆฌ๋ช… ํ•œ๊ตญ์–ด ํŠนํ™” (์‹ฌ์‚ฌ์œ„์›ํšŒ, ํœ˜ํ˜ธ๋Œ€ํšŒ ๋“ฑ)
  • ์ด๋ฏธ์ง€ ์ œ๋ชฉ ์ž๋™ ํ•œ๊ตญ์–ด ์ƒ์„ฑ
  • ํƒœ๊ทธ ์‹œ์Šคํ…œ ํ•œ๊ตญ์–ด ์ตœ์ ํ™”

๐Ÿ“ฆ ๋นŒ๋“œ & ๋ฐฐํฌ

๐Ÿš€ ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ (Vercel)

ํ˜„์žฌ ๋ฐฐํฌ ์ƒํƒœ: โœ… Live at https://asca-gallery.vercel.app

# ์ž๋™ ๋ฐฐํฌ (GitHub push ์‹œ)
git push origin main  # Vercel์ด ์ž๋™์œผ๋กœ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ

# ์ˆ˜๋™ ๋ฐฐํฌ (Vercel CLI)
vercel --prod

๋ฐฐํฌ ํŒŒ์ดํ”„๋ผ์ธ

  1. GitHub Push โ†’ main ๋ธŒ๋žœ์น˜
  2. Vercel ์ž๋™ ๊ฐ์ง€ โ†’ ๋นŒ๋“œ ์‹œ์ž‘
  3. Next.js ๋นŒ๋“œ โ†’ ์ตœ์ ํ™” ๋ฐ ์ •์  ์ƒ์„ฑ
  4. ๊ฐค๋Ÿฌ๋ฆฌ ์ด๋ฏธ์ง€ ์ตœ์ ํ™” โ†’ Next.js Image ์ฒ˜๋ฆฌ
  5. Edge ๋ฐฐํฌ โ†’ ์ „ ์„ธ๊ณ„ CDN ๋ฐฐํฌ
  6. ์ž๋™ ๋„๋ฉ”์ธ ์—…๋ฐ์ดํŠธ โ†’ asca-gallery.vercel.app

๋กœ์ปฌ ๋นŒ๋“œ

# ๊ฐค๋Ÿฌ๋ฆฌ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
npm run gallery:generate

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

# ๋กœ์ปฌ์—์„œ ํ”„๋กœ๋•์…˜ ํ…Œ์ŠคํŠธ
npm start

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

  • ๊ฐœ๋ฐœ: npm run dev (localhost:3000)
  • ํ”„๋กœ๋•์…˜: ์ž๋™ ๋ฐฐํฌ โ†’ Vercel
  • ํ…Œ์ŠคํŠธ: npm run test:ci

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

๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ๋ผ์ธ

  1. ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋Š” TypeScript๋กœ ์ž‘์„ฑ
  2. Prettier์™€ ESLint ๊ทœ์น™ ์ค€์ˆ˜
  3. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ ์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑ
  4. ๋ธŒ๋žœ๋“œ ๊ฐ€์ด๋“œ๋ผ์ธ ์ค€์ˆ˜
  5. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๊ถŒ์žฅ
  6. ์ปค๋ฐ‹ ์ „ npm run pre-commit ์‹คํ–‰
  7. ๊ฐค๋Ÿฌ๋ฆฌ ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ์‹œ npm run gallery:generate ์‹คํ–‰

๐Ÿ–ผ๏ธ ๊ฐค๋Ÿฌ๋ฆฌ ์ฝ˜ํ…์ธ  ์ถ”๊ฐ€ํ•˜๊ธฐ

์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ ํ”„๋กœ์„ธ์Šค:

  1. ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ: /public/images/gallery/ ํ•˜์œ„ ํด๋”์— ์ด๋ฏธ์ง€ ์ถ”๊ฐ€

    # ์˜ˆ์‹œ: 2026๋…„ ์‹ฌ์‚ฌ์œ„์›ํšŒ ์‚ฌ์ง„ ์ถ”๊ฐ€
    /public/images/gallery/committee_2026/
  2. ํด๋” ๊ตฌ์กฐ ๊ทœ์น™:

    • {category}_{year}/ ํ˜•์‹ ์‚ฌ์šฉ
    • ์ง€์› ์นดํ…Œ๊ณ ๋ฆฌ: committee, contest, group, award, ceremony, exhibition
  3. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž๋™ ์ƒ์„ฑ:

    npm run gallery:generate
  4. ์ž๋™ ์ƒ์„ฑ๋˜๋Š” ์ •๋ณด:

    • ์—ฐ๋„๋ณ„ ์ž๋™ ๋ถ„๋ฅ˜
    • ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํ•œ๊ตญ์–ด ์ œ๋ชฉ
    • ๊ณ„์ ˆ ํƒœ๊ทธ ์ž๋™ ์ถ”๊ฐ€
    • ๊ณ ํ™”์งˆ ์ตœ์ ํ™” ์„ค์ •

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ

  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ:

    • lib/db/schema.ts ์ˆ˜์ •
    • npm run db:generate ์‹คํ–‰
    • lib/db/queries.ts์— ์ฟผ๋ฆฌ ํ•จ์ˆ˜ ์ถ”๊ฐ€
  2. ๊ฐค๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ ํ™•์žฅ:

    • types/gallery.ts์— ํƒ€์ž… ์ •์˜ ์ถ”๊ฐ€
    • scripts/generate-gallery-data.js์— ๋กœ์ง ์ถ”๊ฐ€
    • components/gallery/์— UI ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€
  3. UI ์ปดํฌ๋„ŒํŠธ ์ถ”๊ฐ€:

    • ๋ธŒ๋žœ๋“œ variants ๊ณ ๋ ค
    • ๋‹คํฌ๋ชจ๋“œ ์ƒ‰์ƒ ์ตœ์ ํ™”
    • ๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๊ตฌํ˜„

์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

feat: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
fix: ๋ฒ„๊ทธ ์ˆ˜์ •
docs: ๋ฌธ์„œ ๋ณ€๊ฒฝ
style: ์ฝ”๋“œ ํฌ๋งทํŒ…, ์„ธ๋ฏธ์ฝœ๋ก  ๋ˆ„๋ฝ ๋“ฑ
refactor: ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง
test: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€/์ˆ˜์ •
chore: ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ๋ณด์กฐ ๋„๊ตฌ ๋ณ€๊ฒฝ
db: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ
gallery: ๊ฐค๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ ์ถ”๊ฐ€/์ˆ˜์ • ๐Ÿ–ผ๏ธ
i18n: ๋‹ค๊ตญ์–ด/ํ˜„์ง€ํ™” ๊ด€๋ จ ๋ณ€๊ฒฝ ๐ŸŒ
ui: UI/UX ๊ฐœ์„  ๋ฐ ๋””์ž์ธ ๋ณ€๊ฒฝ ๐ŸŽจ

๐Ÿ–ผ๏ธ ๊ฐค๋Ÿฌ๋ฆฌ ๊ด€๋ จ ์ปค๋ฐ‹ ์˜ˆ์‹œ

# ๊ฐค๋Ÿฌ๋ฆฌ ์ด๋ฏธ์ง€ ์ถ”๊ฐ€
git commit -m "gallery: 2025๋…„ ์‹œ์ƒ์‹ ์‚ฌ์ง„ 35์žฅ ์ถ”๊ฐ€"

# ๊ฐค๋Ÿฌ๋ฆฌ ๊ธฐ๋Šฅ ๊ฐœ์„ 
git commit -m "feat: ์—ฐ๋„๋ณ„ ํ•„ํ„ฐ๋ง ๊ธฐ๋Šฅ ์ถ”๊ฐ€"

# ๋‹คํฌ๋ชจ๋“œ ์ตœ์ ํ™”
git commit -m "ui: ๊ฐค๋Ÿฌ๋ฆฌ ๋‹คํฌ๋ชจ๋“œ ์ƒ‰์ƒ ์ตœ์ ํ™”"

# ํ˜„์ง€ํ™” ์ž‘์—…
git commit -m "i18n: ํ—ค๋” ๋ฉ”๋‰ด ํ•œ๊ตญ์–ด ํ˜„์ง€ํ™” ์™„๋ฃŒ"

๐Ÿ“š ๋ฌธ์„œ

๐Ÿ“– ์ƒ์„ธ ๊ฐ€์ด๋“œ

๐Ÿ”ง API ์ฐธ์กฐ

๐ŸŽฏ ๊ตฌํ˜„๋œ ์ฃผ์š” ๊ธฐ๋Šฅ

โœ… ์™„๋ฃŒ๋œ ๊ธฐ๋Šฅ๋“ค:

  • ๐Ÿ“ธ ๊ฐค๋Ÿฌ๋ฆฌ ์‹œ์Šคํ…œ: 265๊ฐœ ์ด๋ฏธ์ง€, 9๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ ์ž๋™ ๋ถ„๋ฅ˜
  • ๐Ÿท๏ธ ํƒœ๊ทธ ์‹œ์Šคํ…œ: ์—ฐ๋„, ๊ณ„์ ˆ, ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํŠนํ™” ํƒœ๊ทธ
  • ๐ŸŒ™ ๋‹คํฌ๋ชจ๋“œ: ์ตœ์ ํ™”๋œ ๊ฐค๋Ÿฌ๋ฆฌ ์ƒ‰์ƒ ์‹œ์Šคํ…œ
  • ๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด ํ˜„์ง€ํ™”: ์™„์ „ํ•œ ํ•œ๊ตญ์–ด UI ๋ฐ ๋ฉ”๋‰ด ์‹œ์Šคํ…œ
  • ๐Ÿ“ฑ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ: ๋ชจ๋“  ๋””๋ฐ”์ด์Šค ์ตœ์ ํ™”
  • ๐Ÿš€ ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ: Vercel ์ž๋™ ๋ฐฐํฌ ์‹œ์Šคํ…œ

๐Ÿ”„ ์ง„ํ–‰ ์ค‘์ธ ์ž‘์—…:

  • ์—ฐ๋„๋ณ„ ํ•„ํ„ฐ๋ง UI ๊ตฌํ˜„
  • ๊ฐค๋Ÿฌ๋ฆฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ณ ๋„ํ™”
  • ์„ฑ๋Šฅ ์ตœ์ ํ™” ๋ฐ ์บ์‹ฑ

๐Ÿ”— ๊ด€๋ จ ๋งํฌ

๊ธฐ์ˆ  ๋ฌธ์„œ

๊ฐœ๋ฐœ ๋„๊ตฌ

๐Ÿ“ž ์ง€์›

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ๋‹ค์Œ ๋ฐฉ๋ฒ•์œผ๋กœ ์—ฐ๋ฝํ•ด์ฃผ์„ธ์š”:

๐ŸŽ‰ ํ”„๋กœ์ ํŠธ ํ˜„ํ™ฉ

๐Ÿ“Š ํ˜„์žฌ ํ†ต๊ณ„ (2026๋…„ 4์›” ๊ธฐ์ค€)

  • โœ… ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ: https://asca-gallery.vercel.app
  • ๐Ÿ“ธ ๊ฐค๋Ÿฌ๋ฆฌ ์ด๋ฏธ์ง€: 265์žฅ (9๊ฐœ ์นดํ…Œ๊ณ ๋ฆฌ)
  • ๐ŸŽจ UI ๊ตฌ์„ฑ์š”์†Œ: ๋ธŒ๋žœ๋“œ ๊ฐ€์ด๋“œ๋ผ์ธ ์ ์šฉ ์ตœ์ ํ™”๋œ ์ปดํฌ๋„ŒํŠธ
  • ๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค: Supabase ๊ธฐ๋ฐ˜ Drizzle ORM ์™„์ „ํ•œ ํƒ€์ž… ์•ˆ์ „์„ฑ
  • ๐Ÿ” ์ธ์ฆ ์‹œ์Šคํ…œ: Clerk ๊ธฐ๋ฐ˜ ๊ฐ•ํ™”๋œ ๊ด€๋ฆฌ์ž ์‹œ์Šคํ…œ ํ†ตํ•ฉ
  • ๐ŸŒ™ ๋‹คํฌ๋ชจ๋“œ: ์™„์ „ ์ตœ์ ํ™” ์™„๋ฃŒ
  • ๐Ÿ‡ฐ๐Ÿ‡ท ํ˜„์ง€ํ™”: 100% ํ•œ๊ตญ์–ด UI ์™„์„ฑ
  • ๐Ÿ“ฑ ๋ฐ˜์‘ํ˜•: ๋ชจ๋“  ๋””๋ฐ”์ด์Šค ์ง€์›

๐Ÿš€ ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ

2026.05:

  • โœ… ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์•„ํ‚คํ…์ฒ˜(CQRS, Event Bus) ๋„์ž… ๋ฐ ๊ธฐ์ˆ  ๋ฌธ์„œํ™” ์™„๋ฃŒ
  • โœ… ๊ฐ์‚ฌ ๋กœ๊ทธ(Audit Trail) ๋ฐ ๋ฆฌ์Šคํฌ ๊ธฐ๋ฐ˜ ๋ณด์•ˆ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
  • โœ… ์‹œ์Šคํ…œ ํ—ฌ์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ AI ์—์ด์ „ํŠธ ๊ด€์ œ ๋Œ€์‹œ๋ณด๋“œ ๊ตฌํ˜„

2026.04:

  • โœ… Clerk ์ธ์ฆ ์‹œ์Šคํ…œ ํ†ตํ•ฉ ์™„๋ฃŒ ๋ฐ Supabase Auth ์ „๋ฉด ์ œ๊ฑฐ
  • โœ… Webflow ์ปจํ…์ธ  ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์™„๋ฃŒ ๋ฐ ์Šคํ‚ค๋งˆ ํ™•์žฅ
  • โœ… ๋ธŒ๋žœ๋“œ ๊ฐ€์ด๋“œ๋ผ์ธ ๊ธฐ๋ฐ˜ ๋””์ž์ธ ์‹œ์Šคํ…œ ์ „๋ฉด ๊ฐœํŽธ
  • โœ… Turbopack ESM ์ถฉ๋Œ ํšŒํ”ผ๋ฅผ ์œ„ํ•œ Webpack ๋ชจ๋“œ dev ์„œ๋ฒ„ ์•ˆ์ •์„ฑ ๊ฐ•ํ™”
  • โœ… API ์‘๋‹ต ํ†ต์ผ์„ฑ ๋ฐ ๋ณด์•ˆ ๊ฐ•ํ™” (Server Actions ์ผ๋ถ€ ๋Œ€์ฒด)

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

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


๐ŸŽจ ์ •๋ฒ•์˜ ๊ณ„์Šน๊ณผ ์ฐฝ์‹ ์˜ ์กฐํ™”

์ „ํ†ต ๋™์–‘ ์„œ์˜ˆ์˜ ์•„๋ฆ„๋‹ค์›€์„ ํ˜„๋Œ€ ๊ธฐ์ˆ ๋กœ ๊ตฌํ˜„ํ•œ ์ข…ํ•ฉ ๋ฌธํ™” ํ”Œ๋žซํผ

Made with โค๏ธ by ๋™์–‘์„œ์˜ˆํ˜‘ํšŒ ๊ฐœ๋ฐœํŒ€

Releases

No releases published

Packages

 
 
 

Contributors