νμ /μΈν°νμ΄μ€ λ νΌλ°μ€
μΌλ° νλ‘μ νΈμ νμ μΈλ±μ€μ ν΄λΉνλ λ¬Έμμ λλ€.
02-reusable-code(TypeScript/React) λ°02-reusable-code-python(Python) λΌμ΄λΈλ¬λ¦¬μ μ£Όμ νμ μ κ΄λ¦¬ν©λλ€.
TypeScript (02-reusable-code)
01-ui-components
shadcn/ui v4 (new-york μ€νμΌ) κΈ°λ°. κ° μ»΄ν¬λνΈλ Radix UI ν리미ν°λΈλ₯Ό λννλ©° μ체 Props νμ μ exportν©λλ€.
| μλΈμΉ΄ν κ³ λ¦¬ | μ£Όμ μ»΄ν¬λνΈ | Props νμ μμ |
|---|---|---|
| shadcn-core | Button, Dialog, Tabs, Separator λ± | ButtonProps, DialogProps |
| shadcn-form | Input, Select, Checkbox, RadioGroup λ± | InputProps, SelectProps |
| shadcn-overlay | Sheet, Drawer, Popover, Tooltip λ± | SheetProps, DrawerProps |
| shadcn-nav | NavigationMenu, Breadcrumb, Menubar λ± | NavigationMenuProps |
| shadcn-data | Table, Card, Badge, Avatar λ± | TableProps, CardProps |
| shadcn-misc | Calendar, Carousel, Chart λ± | CalendarProps |
| web3 | κ²°μ μ»΄ν¬λνΈ | Web3 κ²°μ κ΄λ ¨ νμ |
02-hooks
| ν | κ²½λ‘ | μκ·Έλμ² |
|---|---|---|
| useDebounce | 02-hooks/useDebounce.ts | <T>(value: T, delay: number) => T |
| useInfiniteScroll | 02-hooks/useInfiniteScroll.ts | (options: InfiniteScrollOptions) => InfiniteScrollReturn |
| useAutoSave | 02-hooks/useAutoSave.ts | <T>(data: T, saveFn: (data: T) => Promise<void>, delay?: number) => AutoSaveReturn |
| useUnsavedChangesWarning | 02-hooks/useUnsavedChangesWarning.ts | (hasChanges: boolean) => void |
| useGeolocation | 02-hooks/useGeolocation.ts | () => GeolocationReturn |
03-utils
| μ νΈ | κ²½λ‘ | μκ·Έλμ² |
|---|---|---|
| cn | 03-utils/cn.ts | (...inputs: ClassValue[]) => string |
| formatPrice | 03-utils/formatters/price.ts | (amount: number, options?: PriceFormatOptions) => string |
| formatDate | 03-utils/formatters/date.ts | (date: Date, labels?: DateLabels) => string |
| exportExcel | 03-utils/export/excel.ts | (data: ExportData, options?: ExcelOptions) => Promise<Blob> |
| exportPdf | 03-utils/export/pdf.ts | (data: ExportData, options?: PdfOptions) => Promise<Blob> |
| exportCsv | 03-utils/export/csv.ts | (data: ExportData) => string |
04-supabase-patterns
| ν¨ν΄ | κ²½λ‘ | μ£Όμ νμ |
|---|---|---|
| client | 04-supabase-patterns/client.ts | SupabaseClient |
| server | 04-supabase-patterns/server.ts | ServerSupabaseClient |
| middleware | 04-supabase-patterns/middleware.ts | MiddlewareConfig |
05-auth-rbac
| ν¨ν΄ | κ²½λ‘ | μ£Όμ νμ |
|---|---|---|
| Edge JWT | 05-auth-rbac/edge-jwt/ | JWTPayload, AuthConfig |
| λ―Έλ€μ¨μ΄ | 05-auth-rbac/middleware/ | AuthMiddlewareOptions, ProtectedRoute |
06-api-middleware
| ν¨ν΄ | κ²½λ‘ | μ£Όμ νμ |
|---|---|---|
| API Client | 06-api-middleware/api-client.ts | ApiClientConfig, ApiResponse<T> |
| Retry Policy | 06-api-middleware/retry-policy.ts | RetryOptions, RetryPolicy |
| Error Handler | 06-api-middleware/error-handler.ts | AppError, ErrorCode |
08-services
| μλΉμ€ | κ²½λ‘ | μ£Όμ νμ |
|---|---|---|
| Cloudinary | 08-services/cloudinary/ | CloudinaryConfig, UploadOptions |
10-stripe-saas
| ν¨ν΄ | κ²½λ‘ | μ£Όμ νμ |
|---|---|---|
| Stripe API | 10-stripe-saas/api/ | StripeConfig, PlanConfig, SubscriptionStatus |
| μ»΄ν¬λνΈ | 10-stripe-saas/components/ | PricingCardProps, CheckoutFormProps |
Python (02-reusable-code-python)
ai/
| λͺ¨λ | κ²½λ‘ | μ£Όμ ν΄λμ€/νμ |
|---|---|---|
| WhisperSTTEngine | ai/whisper_engine.py | WhisperSTTEngine (μ±κΈν€) |
api/
| λͺ¨λ | κ²½λ‘ | μ£Όμ ν΄λμ€/νμ |
|---|---|---|
| FastAPI μΈμ¦ | api/fastapi_auth.py | AuthConfig, TokenPayload |
| WebSocket | api/websocket_handler.py | WSHandler, WSMessage |
utils/
| λͺ¨λ | κ²½λ‘ | μ£Όμ ν΄λμ€/νμ |
|---|---|---|
| Excel 리λ | utils/excel_reader.py | ExcelReader, SheetData |
| PDF 리λ | utils/pdf_reader.py | PdfReader, PageContent |
| HWPX μμ±κΈ° | utils/hwpx_generator.py | HwpxGenerator, DocumentSection |
| μ€λμ€ νλ‘μΈμ | utils/audio_processor.py | AudioProcessor, AudioConfig |
| μΈμ λ§€λμ | utils/session_manager.py | SQLiteSessionManager |
| λλ°μ΄μ€ κ°μ§ | utils/device_detector.py | DeviceDetector, DeviceInfo |
μ΅μ’ κ°±μ
- 2026-02-16: μ΄ν μμ±