## React 개발 단계별 질문 유형 분류 및 정리


### "어떻게 하는 것이 좋을까?" (선택 및 판단 질문)


1. **프로젝트 설정:**

   - Create React App 외에 다른 React 프로젝트 생성 도구를 고려해야 할까? (Vite, Next.js 등)

   - 프로젝트 생성 시 어떤 템플릿을 선택해야 할까? (TypeScript, JavaScript)

   - 프로젝트 구조는 어떻게 설정해야 효율적인 개발이 가능할까?

   - 필요한 패키지(라이브러리)는 무엇이고 어떤 기준으로 선택해야 할까?

   - 개발 환경 설정 시 어떤 에디터/IDE를 사용하는 것이 좋을까?


2. **컴포넌트 설계:**

   - UI를 어떤 기준으로 컴포넌트 단위로 분리해야 할까? (재사용성, 유지보수 용이성 등)

   - 컴포넌트 간의 관계는 어떻게 설정해야 할까? (부모-자식, 형제 관계 등)

   - 각 컴포넌트의 상태(state)는 어떻게 관리해야 할까? (로컬 상태, 전역 상태 관리 라이브러리 등)

   - 컴포넌트 간의 데이터 전달은 어떻게 해야 할까? (props, Context API 등)

   - 컴포넌트 디자인 시 어떤 UI 라이브러리/프레임워크를 사용하는 것이 좋을까? (Material UI, Ant Design 등)


3. **컴포넌트 구현:**

   - 컴포넌트 스타일링 시 CSS-in-JS 방식을 사용해야 할까? 아니면 일반 CSS를 사용해야 할까?

   - 컴포넌트 로직 구현 시 함수형 컴포넌트와 클래스형 컴포넌트 중 어떤 것을 선택해야 할까?


4. **데이터 통신:**

   - 백엔드 API와의 데이터 통신 시 Fetch API와 Axios 중 어떤 것을 사용하는 것이 좋을까?

   - 데이터 캐싱은 어떻게 구현해야 할까? (브라우저 캐시, 메모리 캐시, 서비스 워커 등)


5. **라우팅 설정:**

   - React Router를 사용하여 어떻게 페이지 이동 및 URL 관리 기능을 구현할까?


6. **테스트 및 디버깅:**

   - 어떤 테스트 도구를 사용하여 컴포넌트 단위 테스트를 작성해야 할까? (Jest, React Testing Library 등)

   - 테스트 커버리지는 어느 정도 확보해야 할까?

   - 디버깅 시 어떤 도구를 사용하는 것이 효율적일까? (React Developer Tools 등)


7. **빌드 및 배포:**

   - 빌드 과정에서 코드 최적화는 어떻게 해야 할까? (코드 분할, 트리 쉐이킹 등)

   - 웹 서버에 React 애플리케이션을 배포하는 방법은 무엇일까? (Nginx, Apache 등)



### "어떻게 해야 해?" (방법 및 절차 질문)


1. **프로젝트 설정:**

   - ESLint, Prettier 등 코드 스타일 및 품질 관리 도구를 어떻게 설정해야 할까?

   - 개발 서버 실행 및 핫 리로딩 설정 방법은 무엇인가요?


2. **컴포넌트 구현:**

   - JSX 문법을 효율적으로 사용하는 방법은 무엇일까?

   - 컴포넌트 성능 최적화는 어떻게 해야 할까? (Memoization, shouldComponentUpdate 등)

   - 컴포넌트 테스트는 어떻게 작성해야 할까? (Jest, React Testing Library 등)


3. **데이터 통신:**

   - 데이터 로딩 상태(loading state) 및 에러 처리는 어떻게 해야 할까?

   - 백엔드 API 변경에 따른 프론트엔드 코드 수정을 최소화하려면 어떻게 해야 할까?


4. **라우팅 설정:**

   - 중첩 라우팅(nested routing)은 어떻게 설정해야 할까?

   - 라우팅 시 어떻게 컴포넌트 간에 데이터를 전달해야 할까?

   - 404 페이지와 같은 에러 페이지는 어떻게 설정해야 할까?


5. **빌드 및 배포:**

   - 배포 후 성능 모니터링 및 문제 해결은 어떻게 해야 할까?


이렇게 질문 유형을 분류하면, 각 단계에서 어떤 의사 결정을 내려야 하는지, 그리고 어떤 기술적인 문제를 해결해야 하는지 명확하게 파악할 수 있습니다. 이를 통해 React 개발 프로젝트를 더욱 효율적으로 진행하고 성공적으로 배포할 수 있을 것입니다.