소스 폴더 구조
대부분의 코드는 src
폴더에 있으며 다음과 같은 구조를 가진다.
확장성과 유지 보수성을 위해 대부분의 코드를 features 폴더 내에 구성한다. 각 기능 폴더는 해당 기능에 특정한 코드를 포함해 잘 분리된 상태를 유지한다. 이 접근 방식은 공유 컴포넌트와 기능 관련 코드를 섞지 않아, 코드베이스를 관리하고 유지하기 쉽게 만든다. 이를 통해 애플리케이션 아키텍처에서 협업, 가독성 및 확장성을 높일 수 있다.
features 폴더 구조
features 폴더는 다음고 같은 구조를 따를 수 있다.
모든 기능에 이 모든 폴더가 필요한 것은 아니다. 필요한 폴더만 포함하면 된다.
과거에는 barrel 파일을 사용해 기능에서 모든 파일을 내보내도록 권장했지만, 이는 Vite가 트리 셰이킹을 수행하는 데 문제를 일으켜 성능 문제로 이어질 수 있다. 따라서 파일을 직접 임포트하는 것이 좋다.
기능 간의 임포트는 피하는 것이 좋다. 대신 애플리케이션 레벨에서 다양한 기능을 조합한다. 이를 통해 각 기능이 독립적으로 유지되어 코드베이스가 덜 복잡해진다.
기능 간의 임포트를 금지하려면 다음과 같이 ESLint를 사용할 수 있다.
단방향 코드베이스 아키텍처를 적용하는 것도 좋다. 이는 코드가 공유된 부분에서 애플리케이션으로 한 방향으로 흐르도록 하는 것이다(공유 -> 기능 -> 애플리케이션). 이는 코드베이스를 더 예측 가능하고 이해하기 쉽게 만든다.
단방향 코드베이스
공유된 부분은 코드베이스의 어느 부분에서도 사용할 수 있지만, 기능은 공유된 부분에서만 임포트할 수 있고, 애플리케이션은 기능과 공유된 부분에서 임포트할 수 있다.
다음과 같이 ESlint로 제한할 수 있다.
마무리
이러한 구성을 따르면 코드베이스를 잘 조직하고, 확장 가능하며, 유지 보수하기 쉽게 만들 수 있다. 이는 팀이 프로젝트에서 더 효율적이고 효과적으로 작업할 수 있도록 돕는다. 이 접근 방식은 Next.js, Remix 또는 React Native로 구축된 앱에 유사한 아키텍처를 적용하는 것도 더 쉽게 만든다.