0828
FSD
- Feature Sliced Design의 약자로 Layer -> Slices -> Segments로 나눌 수 있음.

Layers
- views
- widgets를 조합한 것, 가장 큰 단위로 페이지 구성
- widgets
- Entities + Features를 조합한 것
- Features
- 사용자 액션과 기능
- Entities
- 순수한 데이터 표현
- Shared
- 모든 레이어에서 공통으로 사용하는 순수 유틸리티
Slices
- 각 Layer 내에서 도메인/기능별(user, post, comment...)로 나누는 것
- 같은 Layer 내에선 다른 Slice를 참조할 수 없음.
- 예를 들어 features 안에 auth와 post가 있을 때 features의 post는 features auth의 slice를 참조할 수 없음.
- 아래와 같은 패턴이 불가능하다는 의미
js
// features/post/ui/PostForm.tsx
import { useAuth } from '../../../auth/lib/useAuth'
// features/comment/api/commentApi.ts
import { postApi } from '../../post/api/postApi'- 하지만 features post에서 entites auth를 참조하는건 가능하다.
- 왜? entities는 features의 하위 레이어니까.
Segments
- 각 Slice 내에서 기술별(보통 ui, api, model, lib, config)로 나누는 것
결론
- layer간 상위 -> 하위로 참조 가능
- 같은 layer의 다른 slice는 참조 불가
- 같은 slice의 다른 segment는 참조 가능
- 왜 이런 규칙을 따르냐면 순환 의존성을 방지하기 위해서. 이 규칙을 따르기에 모듈이 독립되고 의존 관계가 명확해지는거고 이가 FSD 구조를 사용하는 이유와도 귀결.

ETC
- FSD의 app과 next.js의 app routing은 다른 개념
- FSD의 app은 애플리케이션의 전체 설정과 초기화를 담당하는 최상위 레이어를 의미하고, Next.js의 app은 라우팅 시스템을 의미함.
- Layers의 App과 Shared 디렉토리는 Slices 없이 곧바로 segements로 구성됨.