media-storage
Media Storage
파일 업로드·저장소 연동·첨부 관리를 위한 패턴 모음. 특정 방식을 강제하지 않으며, 프로젝트 상황에 맞게 참고한다.
언제 적용하나
- 파일 또는 이미지 업로드 기능을 구현할 때
- 파일과 엔티티를 연결(첨부)하는 구조를 설계할 때
- Cloudflare R2 등 오브젝트 스토리지를 연동할 때
- 썸네일·색상 등 파일 메타데이터를 관리할 때
- 조회 시 파일 URL이나 색상 값을 함께 반환할 때
카테고리
| 카테고리 | 적용 상황 | 참조 파일 |
|---|---|---|
| DB 스키마 | blobs/attachments 테이블 설계, Drizzle ORM 스키마 작성 | schema.md |
| 저장소 | R2/S3 클라이언트 초기화, 파일 업로드·삭제, 경로 분산 | storage.md |
| 업로드 | 업로드 서비스 함수, 중복 감지, 지배적 색상 추출, 썸네일 첨부 | upload.md |
| 조회 | 썸네일 서브쿼리, 뷰모델 변환, CDN URL·색상 값 포함 | query.md |
핵심 규칙 요약
DB 스키마
- blobs: 파일 원본 메타데이터 (key, checksum, metadata JSON 등)
- attachments: 파일과 엔티티의 다형적 연결 (record_type, record_id, name)
- checksum(MD5) 으로 동일 파일 재사용 — blob은 하나만 저장
저장소
- R2는 AWS S3 SDK 호환 —
@aws-sdk/client-s3그대로 사용 - UUID key를 2-level 디렉토리(
ab/cd/key)로 분산 저장 - 환경 변수:
R2_BUCKET_NAME,R2_ENDPOINT,R2_ACCESS_KEY_ID,R2_SECRET_ACCESS_KEY,R2_PUBLIC_URL
업로드
- 비즈니스 로직은 프레임워크 무관 함수(
uploadMedia)로 분리 - 이미지 업로드 시 Gemini API로 지배적 색상 추출 →
blobs.metadataJSON에 저장 - 썸네일 교체 시 기존 첨부 삭제 후 재연결
조회
- 서브쿼리로 blob 정보를 함께 가져와 뷰모델로 변환
blobs.key→ CDN URL,blobs.metadataJSON → 색상 값 파싱
실행 방법
Step 1: 작업 분류
| 요청 예시 | 카테고리 |
|---|---|
| DB 테이블 설계, ORM 스키마 작성 | DB 스키마 |
| R2/S3 연동, 파일 업로드·삭제 구현 | 저장소 |
| 업로드 API, 중복 감지, 색상 추출, 첨부 연결 | 업로드 |
| 썸네일 URL·색상 포함 조회, 뷰모델 반환 | 조회 |
| 파일 업로드 전체 흐름 구현 | 모두 |
Step 2: 참조 파일 로드
카테고리 테이블에서 해당 참조 파일을 읽는다. 스키마 정의와 코드 예시가 포함되어 있다.
Step 3: 패턴 적용
참조 파일의 패턴을 프로젝트 스택에 맞게 적용한다. SQL 스키마, ORM 코드, 서비스 함수는 그대로 활용할 수 있다.
More from dev-goraebap/sveltekit-custom-skills
sveltekit-custom-skills
SvelteKit 프로젝트의 서버 아키텍처와 코드 작성 규칙. 서버 레이어(Active Record, Query Service, REST API), 컴포넌트 재사용 정책, 코드 가독성 가이드를 정의한다. SvelteKit 코드를 작성하거나 리뷰할 때 참고한다.
11sveltekit-progressive-architecture
SvelteKit 프로젝트 아키텍처·코드 규칙. Actions: 작성, 구현, 리뷰, 리팩터, 검토, 추가, 설계, 수정, write, implement, review, refactor, fix. Base Rules: 컴포넌트 재사용, $lib, 라우트 배치, 인라인 타입 금지, interface, type, script 섹션, 주석, 가독성, code style, TypeScript. Server Architecture: 서버 아키텍처, Active Record, Query Service, REST API, Drizzle, +server.ts, +page.server.ts, server/domain, server/infra, 뷰모델, view-model, form actions, ORM, schema, 레이어 분리, CUD, load.
10wiki-creator
도메인 지식베이스(위키)를 git 레포로 만들고 팀 스킬로 배포하는 워크플로우. 사용자가 '/wiki-creator', '위키 만들어줘', '지식베이스 만들어줘', '도메인 정보 정리해줘', '위키 초기화', '도메인 문서화해줘', '위키 업데이트', '프로젝트 정보 추출해서 위키에 저장', '위키 동기화' 등을 언급하면 반드시 이 스킬을 사용한다. 개발 레포(프론트엔드/백엔드/앱)에서 도메인 정보를 추출하거나, 빈 폴더를 위키 레포로 초기화하거나, 팀이 공유하는 도메인 지식베이스를 스킬로 패키징할 때 항상 이 스킬을 사용한다. 참고: 이 스킬은 위키를 만드는 도구다. 이미 설치된 도메인 위키 스킬(예: pokitwork-wiki)과는 다르다.
5mvp-preview
아이디어나 기능을 빠르게 만들어 링크로 공유하는 MVP 워크플로우. 사용자가 '프로토타입 만들어줘', '데모 페이지 필요해', '빠르게 만들어줘', '클라이언트한테 보여줄 거 만들어줘', '아이디어 구체화해줘', '링크 공유해야 해', '배포해줘', 'MVP 만들기', '기획 검토용 화면'처럼 말하면 반드시 이 스킬을 사용한다. 아이디어가 막연해도 괜찮다. 토론으로 범위를 좁히고, 최소 코드로 가치를 증명하고, 링크 하나로 전달하는 전 과정을 다룬다.
3html-prototype
>
1agent-wiki
>
1