
📝 본 게시물은 React Folder Structure in 5Step 게시글을 참고해서 작성했습니다
폴더 구조를 어떻게 구성하면 좋을까?🧐
components 폴더에 파일들이 많아지면서 인식에 어려움이 생겼고 components폴더에서 또 페이지별로 나눠야하나? 이런 고민들을 많이 했었던것같다.✍ vite/typescirpt로 프로젝트 스케폴딩 시 초기 폴더 구조
src 폴더 내에서 구성하는것을 기본 원칙으로 하자!
프로젝트 초기 폴더 구조
첫번째 단계
React 프로젝트는 src폴더와 App 컴포넌트가 있는 하나의 src/App.js 파일로 시작한다.const App = () => {
const title = 'React';
return (
<div>
<h1>Hello {title}</h1>
</div>
);
}
export default App;
App이 하나의 최상위 컴포넌트가 되고, App내에서 더 많은 기능이 추가되고 자연스럽게 크기가 커지며 일부를 독립적인 컴포넌트로 추출해야한다.const list = [
{
id: 'a',
firstname: 'Robin',
lastname: 'Wieruch',
year: 1988,
},
{
id: 'b',
firstname: 'Dave',
lastname: 'Davidds',
year: 1990,
},
];
const App = () => <List list={list} />;
const List = ({ list }) => (
<ul>
{list.map(item => (
<ListItem key={item.id} item={item} />
))}
</ul>
);
const ListItem = ({ item }) => (
<li>
<div>{item.id}</div>
<div>{item.firstname}</div>
<div>{item.lastname}</div>
<div>{item.year}</div>
</li>
);
위의 코드에서 부터 컴포넌트 추출
App내에서 List 컴포넌트와 map으로 순환에 사용될 ListItem 추출해서 하나의 파일로 가져갈 수 있다
src 폴더 내부에 List 컴포넌트와 ListItem 컴포넌트가 존재
3번째 단계
React 컴포넌트는 결국에 복잡해진다.css파일이나 test파일과 같은 기술적인 문제도 더욱 더 많아지기 때문!React 컴포넌트에 테스트파일과 스타일파일을 넣는것이다
src 폴더 내부에 test파일과 css파일이 추가 되었음
😅 슬슬
src폴더 내부에 파일들이 많아지고 있다
각각의 React 컴포넌트 마다 하나의 폴더로 관심사 분리하기
App에 관련된 파일들을 하나의 App폴더 내로 분리하고, List와 관련된 파일들을 List폴더 내에서 관리하도록 관심사별로 분기하였다.
/* 더 명확해진 폴더구조!*/
src
├── app
└── List
4번째 단계
hook이나 전역상태관리 store와 같은 재사용 가능한 React 유틸리티뿐만 아니라 헬퍼함수(utils) 와 같은 React관련 유틸리티를 포함하지 않는 파일들을 분리한다🧐 4-1 components 폴더 내에서 리액트 컴포넌트들을 관리
src/components 폴더를 만들어 최상위 components폴더에서 리액트 컴포넌트들을 관리한다
components 폴더 내로 모인 리액트 컴포넌트 폴더 및 파일들
⚓ 4-2 src 폴더 내부에 hooks,utils와 같은 유틸리티 폴더 및 파일 생성
src/utilssrc/hookssrc/constantssrc/stylessrc/apisrc/routesrc/viewssrc/layoutsrc/store 등등..
src 폴더 하위에 조직된 폴더들
마지막단계
UI 컴포넌트를 분리하는 것이다componets 폴더 내부로 다시 분리하는 것이다.
재사용이 가능한 UI 컴포넌트들은 components 폴더로, 기능이 담겨있는 컴포넌트들은 feature 폴더로 분리하였다
1~4번째 단계까지는 이해하기 쉽고 실제 프로젝트에서 실제 적용할 수 있을것같지만 5번째 단계는 아직 한번도 해보지 않았던 단계라 쉽지 않을 수도 있을것같다!
여러번 경험해보면서 어떤게 더 내게 좋은 폴더구조일까 폴더구조 컨벤션을 계속 생각해봐야겠다