📝 본 게시물은 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/utils
src/hooks
src/constants
src/styles
src/api
src/route
src/views
src/layout
src/store
등등..src 폴더 하위에 조직된 폴더들
마지막단계
UI
컴포넌트를 분리하는 것이다componets
폴더 내부로 다시 분리하는 것이다.재사용이 가능한 UI 컴포넌트들은 components 폴더로, 기능이 담겨있는 컴포넌트들은 feature 폴더로 분리하였다
1~4번째 단계까지는 이해하기 쉽고 실제 프로젝트에서 실제 적용할 수 있을것같지만 5번째 단계는 아직 한번도 해보지 않았던 단계라 쉽지 않을 수도 있을것같다!
여러번 경험해보면서 어떤게 더 내게 좋은 폴더구조일까 폴더구조 컨벤션을 계속 생각해봐야겠다