npx create-react-app my-app
'my-app'이라는 이름의 폴더로 접근 cd my-app
로컬 서버 실행 npm start
my-app/
├── node_modules/
├── public/
│ ├── index.html
│ ├── favicon.ico
│ └── manifest.json
├── src/
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ └── serviceWorker.js
├── package.json
├── package-lock.json
├── README.md
'node_modules/' : 프로젝트에 필요한 npm 패키지들이 저장되는 디렉토리
'public/' : 정적 파일들이 위치하는 곳, index.html 파일은 전체 리액트 앱의 템플릿 역할을 함
'src/' : 리액트 앱의 실제 소스 코드가 저장되는 곳, 컴포넌트, 유틸리티 함수, 테스트 코드 등을 작성
'package.json' : 프로젝트에 대한 정보와 사용 중인 npm 패키지에 대한 정보를 담고 있음 package.json 파일만 있으면 터미널에서 npm install
시 node_module이 자동으로 설치 됨
아래는 폴더 구조를 예시로 만든 것이다.
src/
├── components/
│ ├── Button.js
│ ├── InputField.js
│ └── Card.js
├── pages/
│ ├── Home.js
│ ├── About.js
│ └── Contact.js
├── assets/
│ ├── images/
│ ├── fonts/
│ └── icons/
├── styles/
│ ├── global.css
│ ├── home.css
│ └── about.css
├── hooks/
│ ├── useCustomHook1.js
│ └── useCustomHook2.js
├── utils/
│ ├── formatDate.js
│ ├── parseData.js
│ └── api.js
├── App.js
└── index.js
components/
- 재사용할 가능성이 있는 모든 리액트 컴포넌트를 저장
- 컴포넌트들은 대개 함수 형태를 가지며, 레이아웃, 버튼, 카드, 리스트 항목 등 다양한 UI 요소를 나타냄
- 각 컴포넌트는 재사용 가능해야 하므로, 내부의 상태를 최소화하고 props를 통해 데이터를 전달하는 것이 좋음
pages/
- 애플리케이션의 각 라우트 또는 페이지를 나타내는 컴포넌트를 저장하는 곳
- 각각의 페이지 레이아웃을 담당하며 종종 다른 컴포넌트들을 구성하고 조직하는 역할을 함
assets/
- 애플리케이션에서 사용하는 모든 정적 리소스를 저장
- 이미지, 아이콘, 로고, 폰트 등
- 각각의 리소스 유형에 따라 하위 폴더를 만들어서 리소스를 더욱 체계적으로 관리할 수 있음
- 이미지 파일들을 public에 직접 넣는 경우도 있지만 차이점은 컴파일 시에 필요한지 여부이다.
- public 폴더 : favicon 등과 같이
index.html
내부에서 직접 사용하여 컴파일 시에 필요하지 않는 파일들을 넣음- assets 폴더 : 컴포넌트 내부에서 사용하는 이미지 파일 등을 넣음
styles/
- 스타일 관련 코드를 저장
- 각 컴포넌트 또는 페이지별로 스타일 파일을 분리하거나, 전역 스타일 파일을 만들어서 일관된 스타일링을 적용
hooks/
- 커스텀 훅을 저장하는 곳
- 특정 기능을 공유하거나 재사용해야 하는 경우 커스텀 훅을 작성하고 폴더에 저장
utils/
- 유틸리티 함수들이 저장됨
- 데이터 포매팅, 유효성 검사, API 호출 등의 역할을 수행