Next.js + Feature-Sliced Design(FSD) 기반 프로젝트입니다.
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS v4
- Architecture: Feature-Sliced Design (FSD)
- Primary:
#48A2E2- 메인 브랜드 컬러 (밝은 파란색) - Secondary:
#C9DAED- 보조 컬러 (연한 하늘색)
Tailwind에서 bg-primary, text-primary, border-primary 등으로 사용 가능합니다.
pubble-client/
├── app/ # Next.js App Router (라우팅 담당)
│ ├── layout.tsx
│ ├── page.tsx
│ └── room/
│ └── [roomId]/
│ └── page.tsx
│
├── pages/ # Pages Router 호환성 유지
│ └── README.md
│
├── src/
│ ├── app/ # FSD app layer (전역 설정, providers)
│ │ ├── globals.css
│ │ └── README.md
│ ├── entities/ # 도메인 모델
│ │ └── README.md
│ ├── features/ # 기능 단위
│ │ └── README.md
│ ├── pages/ # FSD 페이지 컴포넌트
│ │ ├── meeting/
│ │ │ └── MeetingPage.tsx
│ │ └── README.md
│ ├── widgets/ # UI 블록
│ │ └── README.md
│ └── shared/ # 공통 유틸/컴포넌트
│ └── README.md
│
├── public/ # 정적 파일
├── middleware.ts # Next.js middleware
└── README.md
Next.js App Router 전용 폴더로, 실제 라우팅을 담당합니다.
FSD의 src/pages 컴포넌트를 import하여 사용합니다.
애플리케이션 전역 설정을 담당합니다.
- Context Providers
- 전역 상태 관리
- 전역 스타일 (globals.css)
도메인 모델(비즈니스 엔티티)을 관리합니다.
- 예: User, Room, Message 등의 핵심 도메인 객체
- 관련 API 호출, 상태 관리, 타입 정의
사용자 인터랙션과 비즈니스 기능 단위를 관리합니다.
- 예: 로그인, 채팅 전송, 화상 통화 제어
- 사용자 액션과 직접 연결되는 기능
FSD의 페이지 레벨 컴포넌트를 관리합니다.
- 각 라우트별 페이지 컴포넌트
- 페이지별 비즈니스 로직 구성
페이지를 구성하는 독립적인 UI 블록을 관리합니다.
- 예: Header, Sidebar, Footer, VideoGrid
- 재사용 가능한 복합 컴포넌트
프로젝트 전역에서 사용되는 공통 리소스를 관리합니다.
- UI 컴포넌트 (Button, Input 등)
- 유틸리티 함수
- 타입 정의
- 상수
Next.js의 app/ 폴더에서 FSD의 src/pages 컴포넌트를 import하여 연결합니다.
예시:
// app/room/[roomId]/page.tsx
import { MeetingPage } from '@/pages/meeting';
export default function RoomPage({ params }: { params: { roomId: string } }) {
return <MeetingPage roomId={params.roomId} />;
}// src/pages/meeting/ui/MeetingPage.tsx
export function MeetingPage({ roomId }: { roomId: string }) {
return <div>Meeting Room: {roomId}</div>;
}npm run devhttp://localhost:3000에서 결과를 확인할 수 있습니다.
- 홈:
http://localhost:3000 - 미팅 룸:
http://localhost:3000/room/test-room-123
src/pages/에 페이지 컴포넌트 생성app/에 라우트 파일 생성 및 import
src/features/에 기능 폴더 생성- 필요한 경우
src/entities/에 도메인 모델 추가 src/pages/에서 해당 기능 사용
src/shared/ui/에 컴포넌트 생성- export하여 다른 레이어에서 사용
{
"paths": {
"@/*": ["./src/*"]
}
}@/ 를 사용하여 src/ 내부 모듈을 import할 수 있습니다.