framework-adapter
framework-adapter
fsd-workshop 파이프라인의 최종 단계. 프레임워크가 강제하는 폴더 구조와 FSD 레이어를 통합해 실제 폴더 트리를 생성한다.
프레임워크마다 라우팅 폴더가 다르고 FSD의 pages / app 레이어와 충돌이 생기는 문제를 해결하는 것이 이 스킬의 핵심 역할이다.
사전 조건
fsd-blueprint.md가 존재하고 structure-planner 단계까지 완료되어야 한다. 파일을 먼저 읽어 프레임워크, 페이지 목록, 레이아웃, 공용 컴포넌트 정보를 파악한다.
파일이 없거나 structure-planner 섹션이 비어 있으면:
fsd-blueprint.md의 레이아웃 구조 / 공용 컴포넌트 섹션이 비어 있습니다.
먼저 `fsd-workshop:structure-planner`를 실행해 주세요.
1. 프레임워크 확인
fsd-blueprint.md의 메타 섹션에서 프레임워크를 읽는다. 미정이거나 다른 프레임워크를 쓰고 싶다면 확인한다.
현재 선택된 프레임워크: [값 또는 미정]
다른 프레임워크로 변경하거나 미정이면 선택해 주세요.
1) Next.js (App Router)
2) Next.js (Pages Router)
3) SvelteKit
4) Nuxt
5) Angular
6) React + Vite (TanStack Router / React Router)
7) Vue + Vite (Vue Router)
8) 현재 값 유지
2. 프레임워크별 통합 패턴
공통 원칙
모든 SSR/파일기반 라우팅 프레임워크에서 공통으로 적용되는 패턴:
프레임워크 라우팅 폴더는 얇은 re-export 껍데기다.
실제 구현은src/아래 FSD 레이어에 있고, 라우팅 파일은 FSDpages레이어를 import만 한다.
Next.js App Router
FSD와의 충돌: app/ 폴더가 Next.js 라우팅을 담당하며 FSD의 app 레이어와 이름이 겹친다.
해결책:
[project-root]/
├── app/ # Next.js 라우팅 껍데기 (re-export만)
│ ├── (auth)/
│ │ ├── login/
│ │ │ └── page.tsx # export { LoginPage as default } from '@/pages/login'
│ │ └── layout.tsx # export { AuthLayout as default } from '@/app/layouts/auth'
│ ├── (main)/
│ │ ├── dashboard/
│ │ │ └── page.tsx
│ │ └── layout.tsx
│ └── not-found.tsx
├── pages/ # 빈 폴더 (Next.js Pages Router 오인 방지용)
│ └── README.md
└── src/
├── app/ # FSD app 레이어
│ ├── layouts/
│ │ ├── auth-layout.tsx
│ │ └── main-layout.tsx
│ ├── providers/
│ └── styles/
├── pages/ # FSD pages 레이어
│ ├── login/
│ │ ├── ui/
│ │ │ └── LoginPage.tsx
│ │ └── index.ts
│ └── dashboard/
├── widgets/
├── features/
├── entities/
└── shared/
Route Group (auth), (main), (admin) 등을 활용해 레이아웃을 분리한다.
Next.js Pages Router
[project-root]/
├── pages/ # Next.js 라우팅 껍데기
│ ├── _app.tsx # export { App as default } from '@/app/custom-app'
│ ├── login.tsx # export { LoginPage as default } from '@/pages/login'
│ └── dashboard.tsx
└── src/
├── app/
│ └── custom-app/
├── pages/ # FSD pages 레이어
├── widgets/
├── features/
├── entities/
└── shared/
SvelteKit
config 변경으로 라우팅 폴더를 src/app/routes로 이동한다.
# svelte.config.ts 변경 필요
files: {
routes: 'src/app/routes',
lib: 'src',
appTemplate: 'src/app/app.html'
}
alias: { '@/*': 'src/*' }
src/
├── app/
│ ├── routes/ # SvelteKit 라우팅 껍데기
│ │ ├── (auth)/
│ │ │ ├── login/
│ │ │ │ └── +page.svelte # <script>import { LoginPage } from '@/pages/login'</script>
│ │ │ └── +layout.svelte
│ │ └── (main)/
│ │ └── +layout.svelte
│ ├── layouts/
│ └── app.html
├── pages/ # FSD pages 레이어
├── widgets/
├── features/
├── entities/
└── shared/
Nuxt
config 변경으로 라우팅과 레이아웃 폴더를 src/app/ 안으로 이동한다.
# nuxt.config.ts 변경 필요
dir: {
pages: './src/app/routes',
layouts: './src/app/layouts'
}
alias: { '@': '../src' }
src/
├── app/
│ ├── routes/ # Nuxt 라우팅 껍데기
│ ├── layouts/ # Nuxt 레이아웃
│ └── router.config.ts
├── pages/ # FSD pages 레이어
├── widgets/
├── features/
├── entities/
└── shared/
Angular
Angular는 파일 기반 라우팅이 없으므로 FSD와의 구조적 충돌이 적다. 라우팅 설정은 app/routes 세그먼트에 둔다.
src/
├── app/ # FSD app 레이어 (= Angular root module)
│ ├── routes/ # 라우팅 설정 (RouterModule 또는 provideRouter)
│ │ └── app.routes.ts
│ ├── layouts/
│ │ ├── auth-layout/
│ │ └── main-layout/
│ └── app.config.ts
├── pages/
│ ├── login/
│ │ ├── ui/
│ │ │ └── login-page.component.ts
│ │ └── index.ts
│ └── dashboard/
├── widgets/
├── features/
├── entities/
└── shared/
├── ui/
├── api/
├── auth/ # 토큰 관리 복잡 시
└── lib/
React + Vite (TanStack Router / React Router)
파일 기반 라우팅이 없으므로 순수 FSD 구조에 가장 가깝다.
src/
├── app/
│ ├── router.tsx # createBrowserRouter 설정
│ ├── providers/
│ └── styles/
├── pages/
├── widgets/
├── features/
├── entities/
└── shared/
3. 폴더 트리 생성
fsd-blueprint.md의 정보(페이지 목록, 레이아웃, shared/ui, widgets)를 기반으로 실제 폴더 트리를 작성한다.
폴더 트리 작성 규칙:
- FSD
pages레이어: 페이지 목록의 모든 항목을 슬라이스로 생성 - FSD
widgets레이어: widgets 후보 목록의 모든 항목 생성 - FSD
shared/ui: shared/ui 후보 목록 기반 - FSD
shared/api: 기본 생성 (API 클라이언트) - FSD
shared/auth: 토큰 관리가 중간 이상인 경우만 생성 features,entities: 빈 폴더로만 표시 (구현 시 채움)
공통 표시 규칙:
# [설명]형태로 중요한 파일/폴더에 주석 추가- re-export 파일(
index.ts)은 슬라이스마다 표시 - 프레임워크 라우팅 껍데기 파일에 "re-export only" 주석 추가
4. 산출물 — fsd-blueprint.md 완성
기존 파일에 폴더 트리 섹션을 추가하고 진행 상태를 업데이트한다.
## 폴더 트리
> 프레임워크: [프레임워크명]
> FSD 통합 패턴: [패턴 설명]
\`\`\`
[실제 폴더 트리]
\`\`\`
### 주요 파일 설명
| 파일/폴더 | 역할 |
|---------|------|
| `app/[route]/page.tsx` | Next.js 라우팅 껍데기 — FSD pages 레이어 re-export |
| `src/app/layouts/` | 레이아웃 컴포넌트 (FSD app 레이어) |
| `src/shared/auth/` | 토큰 관리 전용 세그먼트 |
| ... | ... |
### 설정 파일 변경 사항
[프레임워크별 필요한 config 변경 내용 요약]
업데이트 후 진행 상태:
> **현재 단계**: 3/3 — 완료 ✅
5. 강제 체크리스트
□ fsd-blueprint.md 읽기 완료 (메타, 페이지, 레이아웃, 공용컴포넌트 파악)
□ 프레임워크 확정됨
□ 프레임워크 충돌 해결 방식 적용됨 (re-export 패턴)
□ 모든 페이지가 pages 레이어 슬라이스로 매핑됨
□ 모든 레이아웃이 올바른 레이어에 배치됨
□ shared/ui 후보가 shared/ui 폴더에 반영됨
□ widgets 후보가 widgets 폴더에 반영됨
□ shared/auth 생성 여부 토큰 복잡도에 따라 결정됨
□ 프레임워크 config 변경 사항 명시됨
□ 기존 fsd-blueprint.md 내용 보존됨
□ 진행 단계 3/3 완료로 업데이트됨
6. 절대 하지 말 것
- 파일/클래스/함수명까지 생성하기 — 폴더 구조만 다룬다.
- features / entities 하위 슬라이스를 미리 채우기 — 빈 폴더 표시만.
- 프레임워크 충돌 해결 없이 FSD 구조를 그대로 적용하기.
- 사용자 확인 없이 프레임워크를 임의로 변경하기.
More from dev-goraebap/skills
claude-hook-notify-setup
>
23media-storage
파일 업로드·저장소·첨부 관리 패턴. Actions: 파일 업로드, 이미지 업로드, 파일 처리, 저장소 연동, 썸네일 첨부, 색상 추출, file upload, image upload, storage, attachment, thumbnail. Patterns: Active Storage, blobs 테이블, attachments 테이블, 다형적 첨부, 중복 파일 감지. Storage: Cloudflare R2, AWS S3, @aws-sdk/client-s3, UUID key, 2-level 디렉토리, CDN URL, presigned URL. DB: Drizzle ORM, blob, checksum, MD5, metadata JSON, MIME, byte_size. Color: 지배적 색상 추출, dominant color, Gemini API, hex, blobs.metadata. Query: 썸네일 조회, 서브쿼리, leftJoin, view-model, CDN URL 변환.
22mvp-preview
아이디어나 기능을 빠르게 만들어 링크로 공유하는 MVP 워크플로우. 사용자가 '프로토타입 만들어줘', '데모 페이지 필요해', '빠르게 만들어줘', '클라이언트한테 보여줄 거 만들어줘', '아이디어 구체화해줘', '링크 공유해야 해', '배포해줘', 'MVP 만들기', '기획 검토용 화면'처럼 말하면 반드시 이 스킬을 사용한다. 아이디어가 막연해도 괜찮다. 토론으로 범위를 좁히고, 최소 코드로 가치를 증명하고, 링크 하나로 전달하는 전 과정을 다룬다.
12vscode-claude-notify
VSCode Claude 익스텐션은 알림 hook이 Windows/macOS 모두에서 발화하지 않는 알려진 버그가 있다. 이 스킬은 OS 네이티브 알림(Windows BalloonTip, macOS 알림 센터)으로 우회하여 작업 완료·오류 발생 시 알림을 받을 수 있도록 hooks를 설정한다. 사용자가 'Claude 알림 설정', '작업 완료 알림', 'VSCode 알림 안 와요', 'hooks 알림', 'Claude 끝나면 알려줘' 등을 언급하면 이 스킬을 사용한다. Windows(WSL 포함)와 macOS 모두 지원한다.
10screen-design-doc
>
9pdf-parser
>
8