Files
react-study/package.json
jihoon87.lee e4f8c3cd25 Feat: 학습용 데모 및 로또/React Query 기능 추가
package.json
- 개발/실행 스크립트 및 의존성(react, next, react-query 등) 추가/업데이트

package-lock.json
- 종속성 락 파일 갱신

AGENTS.md
- 프로젝트 가이드, 코딩 컨벤션 및 AI 멘토 프롬프트 문서 추가

db.json
- json-server용 샘플 유저 데이터 추가

next.config.ts
- 불필요한 설정 제거

.tsconfig.json
- 경로/JSX 설정 및 형식 정리

.src/app/layout.tsx
- QueryProvider 적용으로 React Query 전역 Provider 추가

src/app/page.tsx
- 새 홈 페이지 컴포넌트 추가

src/app/lotto/page.tsx
- 로또 기능 라우트 추가

src/app/api/lotto/route.ts
- 외부 로또 API를 프록시하는 Next.js API 라우트 추가 (CORS 우회, 디버그 옵션 포함)

src/app/react-query/*, src/app/zustand/*
- React Query 및 Zustand 예제 페이지(목록/상세/생성/로딩) 추가

src/app/globals.css
- Tailwind 기반 전역 스타일 및 테마 변수 확장 (다크 모드 포함)

src/providers/QueryProvider.tsx
- React Query Provider 및 Devtools 추가

src/lib/getQueryClient.ts
- 서버/클라이언트용 QueryClient 생성 유틸 추가

src/lib/utils.ts
- 클래스 병합 유틸 추가 (cn)

src/lib/useDialogDragResize.ts
- Radix Dialog용 드래그/리사이즈 훅 추가

src/components/ui/*.tsx
- shadcn 스타일 UI 컴포넌트들(버튼, 카드, 배지, dialog, table, pagination, skeleton 등) 추가

src/features/react-query-demo/**
- React Query 데모: API 래퍼, 훅(useUsers, useUser, useCreateUser), 컴포넌트(UserList, UserDetail, UserDashboard, UserCreateForm), 타입, 스토어 추가
- 서버 프리패치/하이드레이션 패턴 포함

src/features/lotto/**
- 로또 기능: API 래퍼, payload 파서(다양한 포맷 정규화), hooks, store(Zustand), 컴포넌트(LottoDashboard, LottoTable, RecommendationsDialog), 추천 알고리즘 및 유틸(번호 생성, mock 데이터) 추가

src/features/zustand/**
- Zustand 예제 스토어 및 컴포넌트 추가

.src/components.json
- shadcn 구성 파일 추가

.idea/*
- IDE 설정(inspection, vcs mapping) 추가

여러 파일(주로 새로 추가된 라이브러리 관련 파일)
- 프로젝트 초기 설정과 데모 실행을 위한 구성 및 의존성 추가
2026-01-16 14:43:52 +09:00

50 lines
1.4 KiB
JSON

{
"name": "react-query",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"dev:turbo": "next dev --turbo",
"build": "next build",
"start": "next start",
"lint": "eslint",
"server": "json-server --watch db.json --port 3002"
},
"dependencies": {
"@hookform/resolvers": "^5.2.2",
"@mescius/spread-sheets": "^19.0.1",
"@mescius/spread-sheets-react": "^19.0.1",
"@radix-ui/react-checkbox": "^1.3.3",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-label": "^2.1.8",
"@radix-ui/react-slot": "^1.2.4",
"@tanstack/react-query": "^5.90.16",
"@tanstack/react-query-devtools": "^5.91.2",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"date-fns": "^4.1.0",
"lucide-react": "^0.562.0",
"next": "15.5.9",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-hook-form": "^7.69.0",
"tailwind-merge": "^3.4.0",
"tailwindcss-animate": "^1.0.7",
"zod": "^4.2.1",
"zustand": "^5.0.9"
},
"devDependencies": {
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "18.3.27",
"@types/react-dom": "18.3.7",
"babel-plugin-react-compiler": "1.0.0",
"eslint": "^9",
"eslint-config-next": "15.5.9",
"json-server": "^1.0.0-beta.3",
"tailwindcss": "^4",
"tw-animate-css": "^1.4.0",
"typescript": "^5"
}
}