SvelteKit Custom Skills
SvelteKit 프로젝트에 적용하는 아키텍처와 코드 작성 규칙을 정의한다.
기본 규칙 (Base Rules)
컴포넌트·함수 재사용 정책과 코드 작성 가이드.
핵심 규칙:
- 라우트 우선 배치: 반복 패턴이 보여도
$lib로 바로 빼지 않는다. 해당 라우트 내부에서 먼저 해결한다 $lib/components는 신중하게: 3개 이상 페이지에서 쓰이는 범용 UI만 배치한다- 인라인 타입 금지: 구조 분해 할당에 인라인 타입 금지. 반드시
interface나type으로 분리 정의한다 - 스크립트 섹션 주석: Svelte 파일의
<script>영역은 역할별로 섹션 주석을 단다 - 함수 주석: 함수에는 목적을 설명하는 간단한 주석을 단다
서버 아키텍처 (Server Architecture)
Active Record 도메인 모델, Query Service 조회 패턴, REST API 엔드포인트 규칙, 서브도메인 기반 스키마 조직.
핵심 규칙:
- 레이어 분리:
server/domain/(Active Record CUD) +server/infra/(Query Service 조회) - 직접 ORM 조작 금지:
+server.ts→ Domain Model,+page.server.ts→ Query Service - R/CUD 분리: load는
+page.server.ts, 쓰기는routes/api/REST 엔드포인트 - form actions 미사용: REST API로 분리하여 백엔드 이식성 확보
- 서버 타입이 원천: CUD 타입은 Drizzle 스키마에서 추출, 조회 뷰모델은
infra/view-models/에 정의.$lib/entities/같은 별도 공유 타입 레이어 금지
상세: references/server-architecture.md
파일 처리 (File Handling)
파일 업로드, 저장소 연동, 메타데이터 관리에 관한 패턴 모음. 특정 방식을 강제하지 않으며, 프로젝트 상황에 맞게 참고한다.
주요 내용:
- Active Storage 패턴:
blobs+attachments두 테이블로 파일 원본과 엔티티 관계를 분리. MD5 체크섬으로 중복 파일을 자동 감지한다 - Cloudflare R2 연동: AWS S3 SDK 호환. UUID key를 2-level 디렉토리로 분산 저장하는 방법 포함
- 지배적 색상 추출: Gemini API로 이미지의 대표 색상(hex)을 추출해
blobs.metadataJSON에 저장하는 방법 - 조회 패턴: 서브쿼리로 blob 정보를 함께 조회하고, CDN URL과 색상 값을 뷰모델에 포함하는 방법
상세: references/file-handling.md
UI 컴포넌트 (shadcn-svelte)
shadcn-svelte 기반 UI 컴포넌트 사용 규칙. 화면 구현 시 UI 요소가 필요하면 먼저 설치된 컴포넌트를 확인하고, 없으면 shadcn CLI로 설치한다.
설치된 컴포넌트 ($lib/components/ui/): alert-dialog badge button calendar card checkbox dialog dropdown-menu input input-otp label popover select separator sonner switch table tabs textarea
핵심 규칙:
- 설치 우선: UI 요소 구현 전 위 목록 확인 → 없으면
npx shadcn-svelte@latest add <component>로 설치 - 커스텀 금지: shadcn 컴포넌트를 직접 수정하지 않는다.
classprop으로 스타일만 오버라이드 - 임포트 경로:
$lib/components/ui/<component>에서 named import