Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FE][FEAT] React Query 도입 #267

Open
pillow12360 opened this issue Jan 13, 2025 · 0 comments
Open

[FE][FEAT] React Query 도입 #267

pillow12360 opened this issue Jan 13, 2025 · 0 comments
Assignees
Labels
enhancement New feature or request 🙂 FE

Comments

@pillow12360
Copy link
Collaborator

🤷 구현할 기능

React Query 도입

1. 현재 상황 분석

현재 아키텍처의 문제점

  1. 분산된 상태 관리

    • 각 컴포넌트에서 개별적으로 API 호출 및 상태 관리
    • 중복된 데이터 페칭 로직
    • useEffect를 통한 명령형 데이터 페칭
  2. 비효율적인 데이터 관리

    • 캐싱 메커니즘 부재로 인한 불필요한 API 호출
    • 데이터 재사용 불가
    • 컴포넌트 간 데이터 동기화 어려움
  3. 에러 처리 및 로딩 상태

    • 일관성 없는 에러 처리
    • 수동적인 로딩 상태 관리
    • 복잡한 상태 업데이트 로직

2. React Query 도입 목표

기술적 목표

  1. 중앙화된 상태 관리

    • 서버 상태와 클라이언트 상태 분리
    • 전역 캐시를 통한 데이터 일관성 확보
    • 데이터 페칭 로직 모듈화
  2. 성능 최적화

    • 캐싱 전략 구현
    • 중복 요청 방지
    • 백그라운드 데이터 업데이트
  3. 개발 경험 개선

    • 선언적 데이터 페칭
    • TypeScript 타입 안정성 강화
    • 테스트 용이성 향상

비즈니스 목표

  1. 사용자 경험 개선

    • 데이터 로딩 시간 단축
    • 화면 깜빡임 감소
    • 오프라인 지원 강화
  2. 개발 생산성 향상

    • 코드 재사용성 증가
    • 유지보수성 향상
    • 개발 시간 단축

3. 구현 계획

Phase 1: 기반 설정

- [ ] React Query 설치 및 환경 구성
- [ ] QueryClient 설정
- [ ] 글로벌 에러 핸들링 구현
- [ ] 타입 시스템 설계

Phase 2: API 서비스 계층 구현

- [ ] API 서비스 모듈화
- [ ] 공통 인터페이스 정의
- [ ] Axios 인스턴스 설정
- [ ] 에러 처리 표준화

Phase 3: Query Hooks 구현

- [ ] 기본 CRUD 쿼리 훅 구현
- [ ] 캐시 전략 수립
- [ ] 낙관적 업데이트 구현
- [ ] 무한 스크롤/페이지네이션 구현

Phase 4: 컴포넌트 마이그레이션

- [ ] 기존 컴포넌트 리팩토링
- [ ] 새로운 훅으로 전환
- [ ] 테스트 코드 작성
- [ ] 성능 테스트 및 최적화

4. 상세 구현 사항

QueryClient 설정

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 5 * 60 * 1000, // 5분
      cacheTime: 30 * 60 * 1000, // 30분
      retry: 1,
      refetchOnWindowFocus: false,
    },
  },
});

캐시 전략

  1. 쿼리 키 구조

    // 예시
    ['news', 'list'] // 뉴스 목록
    ['news', 'detail', id] // 특정 뉴스
    ['news', 'category', categoryId] // 카테고리별 뉴스
  2. 캐시 무효화 규칙

    • 생성/수정/삭제 시 관련 쿼리 자동 무효화
    • 특정 조건에서 선택적 리페칭
    • 낙관적 업데이트 롤백 처리

5. 예상되는 개선 효과

성능 지표

  1. 응답 시간

    • API 호출 감소: 예상 50% 이상
    • 초기 로딩 시간: 예상 30% 감소
    • 캐시 히트율: 목표 70% 이상
  2. 리소스 사용

    • 메모리 사용량 최적화
    • 네트워크 요청 최소화
    • 서버 부하 감소

코드 품질

  1. 유지보수성

    • 중복 코드 제거
    • 일관된 데이터 처리 패턴
    • 명확한 책임 분리
  2. 확장성

    • 새로운 기능 추가 용이
    • 재사용 가능한 훅 라이브러리
    • 표준화된 에러 처리

6. 리스크 및 고려사항

잠재적 리스크

  1. 마이그레이션 복잡성

    • 기존 코드와의 호환성
    • 학습 곡선
    • 일시적인 개발 속도 저하
  2. 성능 관련

    • 메모리 사용량 증가 가능성
    • 캐시 무효화 전략의 복잡성
    • 데이터 일관성 유지 어려움

대응 방안

  1. 단계적 도입
    • 점진적 마이그레이션
    • 충분한 테스트 커버리지
    • 성능 모니터링 체계 구축
@pillow12360 pillow12360 added enhancement New feature or request 🙂 FE labels Jan 13, 2025
@pillow12360 pillow12360 self-assigned this Jan 13, 2025
pillow12360 added a commit that referenced this issue Jan 13, 2025
pillow12360 added a commit that referenced this issue Jan 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request 🙂 FE
Projects
None yet
Development

No branches or pull requests

1 participant