1.8 KiB
1.8 KiB
02. Architecture & FSD Rules
레이어 구조
src/
app/ # 라우트 진입점, 조합 전용
widgets/ # 화면 섹션 단위 조합
features/ # 사용자 액션/유즈케이스 단위
entities/ # 도메인 타입/더미 데이터
shared/ # 공용 UI/유틸
핵심 규칙
page.tsx는 조합만 수행한다.- 비즈니스 로직은
features또는entities로 이동한다. - UI 상태(토글/선택)만 컴포넌트 내부에서 최소 허용한다.
- 파일 길이 500줄 이상이면 즉시 분리한다.
- 하위 레이어가 상위 레이어를 import하지 않는다.
- 전역 상태가 필요하면 먼저 해당 도메인 slice의
model/안에 둔다.
Import 방향 규칙
app->widgets,features,entities,sharedwidgets->features,entities,sharedfeatures->entities,sharedentities->sharedshared-> 외부 의존성 또는shared내부
금지:
features-> 다른features직접 참조 (강한 결합 유발)shared->entities/features/widgets/app참조page.tsx에 도메인 로직/세부 UI 구현 누적- 루트 전역 저장소를 관성적으로 추가하는 것
구현 정책 (이 프로젝트 전용)
- 실제 타이머/오디오/서버/DB 기능은 구현하지 않는다.
- 기능 트리거는 토스트 또는 더미 상태 전환으로 표현한다.
- 도메인 표시는
entities데이터에서 읽고 뷰 하드코딩을 지양한다. - 인증/세션 같은 전역 상태도 가능하면 해당 도메인
entities/*/model안에서 관리한다.
파일 분리 기준
- 조건:
- 파일 500줄 이상
- 하나의 파일에 2개 이상의 독립 관심사가 혼재
- 분리 대상 예시:
- UI 파트 ->
ui/* - 상태/핸들러 ->
model/* - 타입 ->
model/types.ts
- UI 파트 ->