![]()
FSD 아키텍처란 무엇인가?

FSD(Feature Sliced Design)는 애플리케이션을 기능에 따라 분할하여 구성하는 설계 원칙입니다. 이는 대규모 애플리케이션을 개발하면서 발생할 수 있는 복잡성을 줄이고, 유지보수성을 높이기 위해 고안되었습니다.
FSD는 주로 비즈니스 로직과 UI를 명확하게 분리하고, 재사용성을 고려한 구조로 설계합니다. 이러한 접근은 팀원 간의 협업을 용이하게 하고, 코드의 가독성을 향상시킵니다.FSD 아키텍처의 주요 요소는 다음과 같습니다.- 레이어(Layer): 애플리케이션의 최상위 디렉토리로, 전체 구조를 나누는 역할을 합니다.
- 슬라이스(Slice): 기능별로 모듈화된 디렉토리로, 각각의 기능을 그룹화합니다.
- 세그먼트(Segment): 슬라이스 내부에서 더욱 세부적인 코드 구조를 나누는 역할을 합니다.
이러한 구조적 접근은 특히 팀원 간의 협업 시 유용합니다. 각 팀원이 자신이 담당하는 부분에 집중할 수 있고, 변경 사항이 발생하더라도 다른 부분에 미치는 영향을 최소화할 수 있습니다.
| 요소 | 설명 |
|---|---|
| 레이어 | 애플리케이션의 최상위 디렉토리로, 전체 구조를 나눔 |
| 슬라이스 | 기능별로 모듈화된 디렉토리 |
| 세그먼트 | 슬라이스 내부에서 더욱 세부적인 코드 구조를 나누는 역할 |
FSD의 레이어 구성

FSD 아키텍처의 레이어는 최대 7단계로 제한되지만, 일반적으로 6개의 주요 레이어로 나뉘어집니다. 이 레이어들은 각각 특정한 역할을 가지고 있으며, 애플리케이션의 구조를 체계적으로 정리하는 데 도움을 줍니다.
각 레이어의 특징을 살펴보면 다음과 같습니다.- 앱(App): 애플리케이션의 전반적인 설정 및 구성을 담당합니다. 여기에는 라우터 설정, 전역 상태 관리 등 필수적인 설정이 포함됩니다.
- 페이지(Page): 사용자에게 보여지는 페이지를 구성하는 디렉토리입니다. 각 페이지는 주로 라우팅과 관련된 컴포넌트로 이루어져 있으며, 비즈니스 로직은 최소화됩니다.
- 위젯(Widgets): 독립적으로 재사용 가능한 UI 조각들을 포함합니다. 예를 들어, 버튼, 카드와 같은 UI 요소가 여기에 해당합니다.
- 피처(Features): 비즈니스 로직이 포함된 디렉토리로, 특정 기능이나 동작을 담당하는 컴포넌트를 포함합니다.
- 엔티티(Entities): 데이터 모델을 정의하는 곳입니다. 예를 들어, 사용자, 게시물, 댓글 등의 데이터 구조가 여기에 포함됩니다.
- 쉐어드(Shared): 애플리케이션 전역에서 재사용될 수 있는 유틸리티, 훅, 타입 정의 등의 컴포넌트를 포함합니다.
이러한 레이어 구조는 개발자들이 애플리케이션의 각 구성 요소를 명확히 알아보고 관리할 수 있도록 도와줍니다.
| 레이어 | 설명 |
|---|---|
| 앱 | 전반적인 설정 및 구성 |
| 페이지 | 사용자에게 보여지는 페이지 구성 |
| 위젯 | 독립적으로 재사용 가능한 UI 요소 |
| 피처 | 비즈니스 로직을 포함하는 기능 |
| 엔티티 | 데이터 모델 정의 |
| 쉐어드 | 재사용 가능한 유틸리티 및 훅 |
슬라이스와 세그먼트의 역할
FSD 아키텍처에서 슬라이스와 세그먼트는 매우 중요한 개념입니다. 슬라이스는 기능 단위로 모듈화된 디렉토리로, 비즈니스 로직과 관련된 코드를 그룹화하는 역할을 합니다.
예를 들어, 사용자 관리 기능이 있는 애플리케이션에서는user, post, comment와 같은 슬라이스를 정의할 수 있습니다. 각 슬라이스 내부에는 UI 컴포넌트, 상태 관리 로직, API 호출 등의 세부적인 구현이 포함됩니다.세그먼트는 슬라이스 내부에서 더욱 세부적인 코드 구조를 나누는 역할을 합니다. 세그먼트는 다음과 같은 요소들을 포함할 수 있습니다.
- API: 서버와의 통신을 위한 요청 및 응답 처리
- UI: 슬라이스의 UI 컴포넌트
- Model: 상태 관리 및 비즈니스 로직
- Lib: 슬라이스 내에서 사용하는 보조 기능
- Config: 슬라이스에 필요한 구성 값
- Consts: 슬라이스에서 사용하는 상수
이러한 구조를 통해 각 기능의 책임을 명확히 분리하고, 팀원 간의 협업을 더욱 원활하게 할 수 있습니다.
| 요소 | 설명 |
|---|---|
| API | 서버와의 통신 처리 |
| UI | 슬라이스의 UI 컴포넌트 |
| Model | 상태 관리 및 비즈니스 로직 |
| Lib | 슬라이스 내에서 사용하는 보조 기능 |
| Config | 슬라이스에 필요한 구성 값 |
| Consts | 슬라이스에서 사용하는 상수 |
FSD 아키텍처의 장점
FSD 아키텍처를 적용하면 여러 가지 장점을 누릴 수 있습니다. 첫째, 애플리케이션의 구조가 명확해져서 각 팀원이 자신의 작업에 집중할 수 있습니다.
둘째, 코드의 재사용성이 높아져서 중복된 코드를 줄일 수 있습니다. 셋째, 비즈니스 로직과 UI를 분리함으로써 유지보수성이 향상됩니다.마지막으로, 개발 과정에서 발생할 수 있는 충돌을 줄일 수 있습니다. 이러한 장점들은 팀원 간의 협업을 원활하게 하고, 프로젝트의 품질을 높이는 데 기여합니다.특히 대규모 프로젝트에서 폴더 구조가 복잡해지는 것을 방지할 수 있어, 개발자들이 보다 효율적으로 작업할 수 있는 환경을 제공합니다.| 장점 | 설명 |
|---|---|
| 명확한 구조 | 각 팀원이 자신의 작업에 집중할 수 있도록 도와줌 |
| 코드 재사용성 | 중복된 코드를 줄이고 코드 품질을 높임 |
| 유지보수성 향상 | 비즈니스 로직과 UI를 분리하여 유지보수성을 높임 |
| 충돌 감소 | 팀원 간의 협업 시 발생할 수 있는 충돌을 줄임 |
FSD 적용 시 유의사항
FSD 아키텍처를 적용할 때 몇 가지 유의해야 할 사항이 있습니다. 첫째, 팀원 간의 인식과 교육이 필요합니다.
FSD의 개념과 원칙을 이해하지 못한 팀원이 규칙을 어길 경우, 전체 구조가 무너지게 됩니다. 따라서 팀원 모두가 FSD 아키텍처에 대해 명확히 알아보고, 이를 준수하도록 해야 합니다.둘째, 작은 프로젝트에서는 FSD 아키텍처를 적용하는 것이 과할 수 있습니다. FSD는 대규모 애플리케이션에서 그 진가를 발휘하는 구조이므로, 작은 프로젝트에서는 단순한 구조로도 충분할 수 있습니다.셋째, FSD 아키텍처가 제공하는 규칙을 무조건적으로 따를 필요는 없습니다. 상황에 따라 유연하게 적용할 수 있도록 하여, 팀의 개발 문화와 맞는 방향으로 조정할 필요가 있습니다.| 유의사항 | 설명 |
|---|---|
| 팀원 간의 인식과 교육 필요 | FSD의 개념과 원칙을 이해하지 못한 팀원은 규칙을 어길 수 있음 |
| 작은 프로젝트에서는 과할 수 있음 | 작은 프로젝트에서는 단순한 구조로도 충분할 수 있음 |
| 유연한 적용 필요 | 상황에 따라 규칙을 유연하게 적용하여 팀의 개발 문화와 맞추기 |
결론
FSD 아키텍처는 대규모 React 애플리케이션에서 효과적인 폴더 구조 설계를 위한 매우 유용한 접근법입니다. 이를 통해 팀원 간의 협업을 용이하게 하고, 유지보수성을 높일 수 있습니다.
하지만 FSD를 성공적으로 적용하기 위해서는 팀원 간의 인식, 교육, 그리고 프로젝트의 규모에 따른 적절한 적용이 필요합니다. FSD 아키텍처를 통해 보다 체계적이고 효율적인 개발 환경을 구축할 수 있기를 바랍니다.