🖋️ 리액트 프로젝트에 좋은 폴더 구조
src/
├── assets/
│ ├── images/
│ └── styles/
│ ├── global.scss
│ └── variables.scss
│
├── components/
| ├── UI/
│ │ └── Button/
│ │ ├── Button.tsx
│ │ ├── Button.module.scss
│ │ └── Button.test.tsx
│ └── Layout/
│ └── Navbar/
│
├── constants/
│ └── index.ts
│
├── contexts/
│ └── AuthContext.tsx
│
├── hooks/
│ └── useAuth.ts
│
├── modules/
│ ├── UserManagement/
│ │ ├── components/
│ │ │ └── UserProfile.tsx
│ │ ├── hooks/
│ │ │ └── useUsers.ts
│ │ ├── services/
│ │ │ └── userService.ts
│ │ ├── UserManagement.module.scss
│ │ └── UserManagement.test.tsx
│ └── ProductCatalog/
│
├── services/
│ └── apiService.ts
│
├── types/
│ ├── models.ts
│ └── global.d.ts
│
├── utils/
│ └── helpers.ts
│
├── App.tsx
├── index.tsx
└── react-app-env.d.ts
폴더 구조 설명
'components/'
- APP 에서 공통으로 사용되는 컴포넌트를 저장
- 'UI/' : 버튼, 입력 필드와 같은 재사용 가능한 기본 UI 컴포넌트를 포함
- 'Layout/' : 헤더, 푸터 등의 레이아웃 관련 컴포넌트를 포함
'features/'
- 애플리케이션의 주요 기능별로 폴더를 구분
- 각 기능에 필요한 컴포넌트와 로직을 포함
- 이 구조는 기능의 추가 및 수정을 용이
'hooks/'
- 전역에서 사용할 수 있는 커스텀 훅을 저장
- 예를 들어, 인증 상태를 관리하는 useAuth 훅이 이곳에 위치 가능
'utils/'
- 유틸리티 함수를 모아둔 곳
- 데이터 형식 변환, 유효성 검사 등 공통으로 사용되는 함수를 포함
'types/'
- 타입스크립트를 사용하는 경우
- 전역에서 사용될 타입 정의를 포함하는 폴더
'styles/'
'assets/'
+ 파일 설명
- models.ts
- 도메인 모델 또는 DTO(Data Transfer Object)의 타입 정의를 포함
- global.d.ts
- 전역 타입 정의 파일
- 프로젝트 전반에 걸쳐 재사용될 수 있는 타입을 정의
- react-app-env.d.ts
- create-react-app을 사용할 경우
- TypeScript 환경 설정 및 타입을 확장하기 위한 파일
src/
├── components/
│ ├── Button/
│ │ ├── Button.tsx
│ │ ├── Button.module.scss
│ │ └── Button.test.tsx
│ └── Navbar/
│
├── constants/
│ └── index.ts
│
├── contexts/
│ └── AuthContext.tsx
│
├── hooks/
│ └── useAuth.ts
│
├── modules/
│ ├── UserManagement/
│ │ ├── components/
│ │ ├── hooks/
│ │ ├── services/
│ │ └── UserManagement.module.scss
│ └── ProductCatalog/
│
├── pages/
│ ├── _app.tsx
│ ├── _document.tsx
│ ├──api
│ │ └── auth/
│ │ └── [action].ts
│ └── index.tsx
│
├── public/
│ ├── favicon.ico
│ └── images/
│
├── services/
│ └── apiService.ts
│
├── styles/
│ └── globals.scss
│
├── types/
│ ├── models.ts
│ └── global.d.ts
│
├── lib/
│ ├── db.ts
│ └── middleware.ts
│
├── utils/
│ └── helpers.ts
│
└── tests/
├── integration/
└── unit/
폴더 구조 설명
'modules/'
- 특정 기능을 수행하는 독립적인 모듈을 구성
- 각 모듈 내에는 그 기능과 관련된 컴포넌트, 훅, 서비스 로직 등이 포함
'pages/'
- Next.js의 파일 기반 라우팅에 따라 각 파일 또는 폴더는 라우트와 연결된 페이지 컴포넌트
- _app.tsx는 전역 레이아웃을 _document.tsx는 서버 사이드에서 렌더링될 HTML 문서 구조를 정의
'public/'
- 이미지, 폰트, 기타 정적 자산을 저장
- Next.js에서는 이 폴더 내의 파일들을 웹 서버의 루트 경로로부터 직접 접근
'tests/'
- 단위 및 통합 테스트 파일을 분류하여 저장
- 프로젝트의 안정성을 검증하기 위한 테스트 코드를 포함
'api/'
- 서버리스 함수로 동작하는 API 라우트를 정의
- Next.js에서는 이 폴더 내의 파일들이 자동으로 API 엔드포인트로 변환
'lib/'
- 데이터베이스 연결, 서버 사이드 로직 처리, 공통 함수 등의 백엔드 관련 코드를 포함
- 이는 API 라우트에서 직접 사용