Skip to content

FSD 구조 사용 규칙 및 개념

Jung Sun A edited this page Dec 2, 2024 · 1 revision

규칙

  1. 레이어 내의 모듈에서는 오직 하위 레이어의 모듈만 Import 해야 합니다.

    ex. `widgets > work-management > ui > AttendanceFormClient.tsx`에서는 widgets 레이어의 하위 레이어인 features, entities, shared 내의 모듈만 Import할 수 있습니다.


  1. 슬라이스는 동일 레이어에 있는 다른 슬라이스의 모듈을 Import 하면 안 됩니다.

    ex. `widgets > work-management > ui > WorkManagement.tsx`에서는 work-management 슬라이스와 다른 슬라이스인 `widgets > setting > ui > SettingWidget.tsx`를 Import 할 수 없습니다.


  1. shared 레이어에서는 슬라이스를 생성하면 안 됩니다.

    ex. `shared > ui > ToastMessage.tsx`이나 `shared > utils > rnSender.ts`와 같이 레이어 다음 바로 세그먼트를 생성합니다.


  1. 위의 규칙을 지키면서 슬라이스, 세그먼트 폴더를 레이어에 생성하고 그 하위에 파일을 생성해야 합니다.

    ex. `widgets > work-management > WorkManagement.tsx` 또는 `shared > rnSender.ts` 와 같이 레이어 또는 슬라이스에 파일을 생성하지 않아야 합니다.


  1. Export는 각 레이어 바로 아래에 생성된 index.ts 파일에서 진행해야 합니다.

    ex. `widgets > work-management > ui > WorkManagement.tsx`에서 export 후 `widgets > index.ts`로 가져와서 다시 export 하여 `app > [storeId] > manage > page.tsx`에서 import 하는 방식으로 사용됩니다.


Layers

Layer는 어플리케이션 전반에 영향을 미칠 수 있는 구성요소를 각자의 역할에 따라 분류한 것입니다.
얼루가게 프로젝트에서는 app, widgets, features, entities, shared layer를 사용합니다.

app

  • app의 entry point 역할
  • 전체 app의 로직이 초기화 되는 곳

ex. routing, entrypoints, global styles, providers

widgets

  • 하나의 완전한 기능이나 UI 요소를 제공
  • 특정 작업을 완료하는 데 필요한 모든 것을 포함하는 독립적인 구성 요소

ex. Work Management Widget, Inquire Widget, Quit Summary Widget

features

  • app의 여러 부분에서 동일한 방식으로 사용될 수 있는 특정 기능
  • 사용자에게 비즈니스 가치를 제공하는 기능

ex. Check In/Out Feature, Get Random Profile Util

entities

  • 중요한 비즈니스 데이터 개체
  • API 어댑터를 작성하는 곳

ex. Store Entity, User Entity

shared

  • 특정한 비즈니스 로직에 종속되지 않는 재사용 가능한 컴포넌트와 유틸리티 모음

ex. RN Sender Util, Handle Login Token Util


Segments

세그먼트는 코드를 목적에 따라 그룹화 시킵니다.

ui

  • UI 표시와 관련된 모든 것

ex. UI components, date formatters, styles

api

  • 백엔드와 상호작용하는 모든 것

ex. request functions, data types, mappers

model

  • 데이터와 비즈니스 로직을 처리하는 모든 것

ex. schemas, interfaces, stores, and business logic

lib

  • 슬라이스 내에서 필요로 하는 라이브러리 코드

consts

  • 슬라이스 내에서 사용하는 상수

atoms

  • 슬라이스 내에서 사용하는 Atom 값
Clone this wiki locally