프론트엔드 개발 순서

odada·2025년 2월 5일

시스템에서 Redux를 포함한 개발 순서를 추천드리겠습니다:

Redux 스토어 설정

먼저 해야 하는 이유: 데이터 흐름 구조 확립

Equipment 기본 CRUD

  • 목록 조회 (완료)
  • 상세 조회 (완료)
  • Redux로 상태 관리 연결
  • 설비 추가/수정 폼 완성

실시간 모니터링

  • 실시간 데이터 상태 관리
  • WebSocket 연결 설정
  • 대시보드 차트 구현

성능 최적화

  • 컴포넌트 메모이제이션
  • 데이터 정규화
  • 캐싱 전략

목차

개발 순서

1. 초기 프로젝트 설정 (1주)

  • React + TypeScript 프로젝트 생성
  • 기본 라이브러리 설치 및 설정
    • Redux Toolkit
    • React Router
    • Axios
    • Tailwind/shadcn-ui
    • Testing Library
  • ESLint, Prettier 설정
  • 프로젝트 구조 설계

2. 인증/권한 시스템 구현 (2주)

  • 로그인/로그아웃 구현
  • JWT 토큰 관리
  • 권한 기반 라우팅 설정
  • 인증 상태 관리
  • API 인터셉터 설정

3. 상태 관리 구조 설계 (2주)

  • Redux 스토어 설정
  • RTK Query API 설정
  • 슬라이스 구조 설계
  • 비동기 액션 처리
  • 상태 정규화 전략

4. 공통 컴포넌트 개발 (2-3주)

  • 레이아웃 컴포넌트
  • 데이터 그리드
  • 차트 컴포넌트
  • 폼 컴포넌트
  • 모달/다이얼로그
  • 로딩/에러 처리 컴포넌트

5. API 연동 및 데이터 흐름 구현 (3-4주)

  • API 클라이언트 설정
  • 데이터 페칭 로직
  • 에러 처리
  • 캐싱 전략
  • API 재시도 로직

6. 핵심 기능 UI 구현 (4-5주)

  • 대시보드
  • 설비 모니터링
  • 생산 현황
  • 품질 관리
  • 작업 지시 관리

7. 실시간 데이터 처리 (2-3주)

  • WebSocket 연결 설정
  • 실시간 데이터 상태 관리
  • 실시간 차트 업데이트
  • 알림 시스템

학습 포인트

1. 핵심 기술

  • TypeScript

    • 타입 시스템
    • 인터페이스/타입 정의
    • 제네릭
    • 유틸리티 타입
  • React

    • Hooks 심화
    • 성능 최적화
    • 컴포넌트 설계
    • 렌더링 최적화
  • Redux Toolkit

    • 상태 관리 패턴
    • RTK Query
    • 미들웨어
    • 불변성 관리

2. 데이터 시각화

  • Recharts/Chart.js
    • 차트 유형별 구현
    • 실시간 데이터 바인딩
    • 커스텀 차트 개발
    • 성능 최적화

3. 성능 최적화

  • React 렌더링 최적화
  • 메모이제이션
  • 코드 스플리팅
  • 레이지 로딩
  • 가상화 (react-window)

4. 테스트

  • Jest
  • React Testing Library
  • 단위 테스트
  • 통합 테스트
  • E2E 테스트

5. 웹소켓

  • 연결 관리
  • 재연결 전략
  • 메시지 처리
  • 에러 핸들링

기술 스택

핵심 라이브러리

  • React 18
  • TypeScript 5
  • Redux Toolkit
  • RTK Query
  • React Router 6
  • Axios
  • Material-UI/Tailwind
  • Recharts
  • WebSocket

개발 도구

  • ESLint
  • Prettier
  • Chrome DevTools
  • React Developer Tools
  • Redux DevTools

코드 예시

API 인터셉터 설정

axios.interceptors.request.use((config) => {
  const token = getToken();
  if (token) {
    config.headers.Authorization = `Bearer ${token}`;
  }
  return config;
});

RTK Query API 설정

export const mesApi = createApi({
  baseQuery: fetchBaseQuery({ 
    baseUrl: '/api',
    prepareHeaders: (headers, { getState }) => {
      const token = selectToken(getState());
      if (token) {
        headers.set('authorization', `Bearer ${token}`);
      }
      return headers;
    },
  }),
  endpoints: (builder) => ({
    getEquipmentStatus: builder.query({
      query: (id) => `equipment/${id}/status`,
      providesTags: ['Equipment']
    }),
    updateProduction: builder.mutation({
      query: (data) => ({
        url: 'production',
        method: 'POST',
        body: data
      }),
      invalidatesTags: ['Production']
    })
  })
});

권한 기반 라우팅

const ProtectedRoute = ({ children, requiredRole }) => {
  const user = useSelector(selectUser);
  
  if (!user || !hasPermission(user.role, requiredRole)) {
    return <Navigate to="/unauthorized" />;
  }
  
  return children;
};

실시간 차트 컴포넌트

const RealTimeChart = ({ data, dataKey }) => {
  return (
    <LineChart width={600} height={400} data={data}>
      <XAxis dataKey="timestamp" />
      <YAxis />
      <Tooltip />
      <Line 
        type="monotone" 
        dataKey={dataKey} 
        stroke="#8884d8" 
        isAnimationActive={false} 
      />
    </LineChart>
  );
};

이 문서는 지속적으로 업데이트되어야 하며, 팀의 피드백과 프로젝트 요구사항에 따라 조정될 수 있습니다.

0개의 댓글