🚀 성능 최적화 (Task 8): - React.lazy를 활용한 코드 스플리팅 구현 - React.memo, useMemo, useCallback을 통한 메모이제이션 최적화 - 초기 번들 크기 87% 감소 (470kB → 62kB) - 백그라운드 동기화 간격 최적화 (5분 → 30초) 📦 Vercel 배포 인프라 구축 (Task 9): - vercel.json 배포 설정 및 보안 헤더 구성 - GitHub Actions 자동 배포 워크플로우 설정 - 환경별 배포 및 미리보기 시스템 구현 - 자동화된 배포 스크립트 및 환경 변수 관리 - 포괄적인 배포 가이드 및 체크리스트 작성 🔧 코드 품질 개선: - ESLint 주요 오류 수정 (사용하지 않는 변수/import 정리) - 테스트 커버리지 확장 (229개 테스트 통과) - TypeScript 타입 안전성 강화 - Prettier 코드 포맷팅 적용 ⚠️ 참고: 테스트 파일의 any 타입 및 일부 경고는 향후 개선 예정 🛠️ Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
108 lines
2.4 KiB
TypeScript
108 lines
2.4 KiB
TypeScript
/// <reference types="vitest" />
|
|
import { defineConfig } from "vite";
|
|
import react from "@vitejs/plugin-react-swc";
|
|
import path from "path";
|
|
|
|
export default defineConfig({
|
|
plugins: [react()],
|
|
resolve: {
|
|
alias: {
|
|
"@": path.resolve(__dirname, "./src"),
|
|
},
|
|
},
|
|
test: {
|
|
// 브라우저 환경 시뮬레이션
|
|
environment: "jsdom",
|
|
|
|
// 전역 설정 파일
|
|
setupFiles: ["./src/setupTests.ts"],
|
|
|
|
// 전역 변수 설정
|
|
globals: true,
|
|
|
|
// CSS 모듈 및 스타일 파일 무시
|
|
css: {
|
|
modules: {
|
|
classNameStrategy: "non-scoped",
|
|
},
|
|
},
|
|
|
|
// 포함할 파일 패턴
|
|
include: ["**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
|
|
|
|
// 제외할 파일 패턴
|
|
exclude: [
|
|
"node_modules",
|
|
"dist",
|
|
".git",
|
|
".cache",
|
|
"ccusage/**",
|
|
"**/.{idea,git,cache,output,temp}/**",
|
|
"**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*",
|
|
],
|
|
|
|
// 커버리지 설정
|
|
coverage: {
|
|
provider: "v8",
|
|
reporter: ["text", "json", "html"],
|
|
exclude: [
|
|
"node_modules/",
|
|
"src/setupTests.ts",
|
|
"**/*.d.ts",
|
|
"**/*.config.{js,ts}",
|
|
"**/index.ts", // 단순 re-export 파일들
|
|
"src/main.tsx", // 앱 진입점
|
|
"src/vite-env.d.ts",
|
|
"**/*.stories.{js,ts,jsx,tsx}", // Storybook 파일
|
|
"coverage/**",
|
|
"dist/**",
|
|
"**/.{git,cache,output,temp}/**",
|
|
],
|
|
// 80% 커버리지 목표
|
|
thresholds: {
|
|
global: {
|
|
branches: 70,
|
|
functions: 70,
|
|
lines: 80,
|
|
statements: 80,
|
|
},
|
|
},
|
|
},
|
|
|
|
// 테스트 실행 환경 변수
|
|
env: {
|
|
NODE_ENV: "test",
|
|
VITE_APPWRITE_URL: "https://test.appwrite.io/v1",
|
|
VITE_APPWRITE_PROJECT_ID: "test-project-id",
|
|
VITE_APPWRITE_DATABASE_ID: "test-database-id",
|
|
VITE_APPWRITE_TRANSACTIONS_COLLECTION_ID:
|
|
"test-transactions-collection-id",
|
|
},
|
|
|
|
// 테스트 병렬 실행 및 성능 설정
|
|
pool: "threads",
|
|
poolOptions: {
|
|
threads: {
|
|
singleThread: false,
|
|
},
|
|
},
|
|
|
|
// 테스트 파일 변경 감지
|
|
watch: {
|
|
ignore: ["**/node_modules/**", "**/dist/**"],
|
|
},
|
|
|
|
// 로그 레벨 설정
|
|
logLevel: "info",
|
|
|
|
// 재시도 설정
|
|
retry: 2,
|
|
|
|
// 테스트 타임아웃 (밀리초)
|
|
testTimeout: 10000,
|
|
|
|
// 훅 타임아웃 (밀리초)
|
|
hookTimeout: 10000,
|
|
},
|
|
});
|