aiwf 0.3.17 → 0.3.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/package.json +1 -1
  2. package/src/config/file-lists.js +5 -5
  3. package/templates/README.md +0 -78
  4. package/templates/api-server/config.json +0 -64
  5. package/templates/api-server/template/.aiwf/config.json +0 -56
  6. package/templates/api-server/template/.aiwf/feature-ledger.json +0 -42
  7. package/templates/api-server/template/.aiwf/personas/backend-engineer.json +0 -40
  8. package/templates/api-server/template/.aiwf/scripts/cli.js +0 -111
  9. package/templates/api-server/template/.env.example +0 -29
  10. package/templates/api-server/template/.eslintrc.json +0 -23
  11. package/templates/api-server/template/README.md +0 -171
  12. package/templates/api-server/template/jest.config.js +0 -26
  13. package/templates/api-server/template/nodemon.json +0 -9
  14. package/templates/api-server/template/package.json +0 -61
  15. package/templates/api-server/template/src/app.ts +0 -60
  16. package/templates/api-server/template/src/config/swagger.ts +0 -38
  17. package/templates/api-server/template/src/controllers/aiwfController.ts +0 -54
  18. package/templates/api-server/template/src/controllers/authController.ts +0 -128
  19. package/templates/api-server/template/src/controllers/statusController.ts +0 -28
  20. package/templates/api-server/template/src/index.ts +0 -28
  21. package/templates/api-server/template/src/middleware/aiwfMiddleware.ts +0 -50
  22. package/templates/api-server/template/src/middleware/authMiddleware.ts +0 -41
  23. package/templates/api-server/template/src/middleware/errorHandler.ts +0 -42
  24. package/templates/api-server/template/src/middleware/notFoundHandler.ts +0 -14
  25. package/templates/api-server/template/src/middleware/requestLogger.ts +0 -20
  26. package/templates/api-server/template/src/routes/aiwf.ts +0 -31
  27. package/templates/api-server/template/src/routes/index.ts +0 -13
  28. package/templates/api-server/template/src/routes/v1/index.ts +0 -67
  29. package/templates/api-server/template/src/utils/logger.ts +0 -37
  30. package/templates/api-server/template/tests/app.test.ts +0 -40
  31. package/templates/api-server/template/tsconfig.json +0 -43
  32. package/templates/npm-library/config.json +0 -61
  33. package/templates/npm-library/template/LICENSE +0 -21
  34. package/templates/npm-library/template/README.md +0 -201
  35. package/templates/npm-library/template/package.json +0 -78
  36. package/templates/web-app/config.json +0 -53
  37. package/templates/web-app/template/.aiwf/config.json +0 -54
  38. package/templates/web-app/template/.aiwf/feature-ledger.json +0 -37
  39. package/templates/web-app/template/.aiwf/personas/fullstack-developer.json +0 -40
  40. package/templates/web-app/template/.aiwf/scripts/cli.js +0 -110
  41. package/templates/web-app/template/.eslintrc.cjs +0 -20
  42. package/templates/web-app/template/README.md +0 -151
  43. package/templates/web-app/template/index.html +0 -14
  44. package/templates/web-app/template/package.json +0 -44
  45. package/templates/web-app/template/postcss.config.js +0 -6
  46. package/templates/web-app/template/public/vite.svg +0 -1
  47. package/templates/web-app/template/src/App.tsx +0 -21
  48. package/templates/web-app/template/src/components/Layout.tsx +0 -57
  49. package/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +0 -107
  50. package/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +0 -71
  51. package/templates/web-app/template/src/index.css +0 -60
  52. package/templates/web-app/template/src/main.tsx +0 -10
  53. package/templates/web-app/template/src/pages/AiwfDashboard.tsx +0 -57
  54. package/templates/web-app/template/src/pages/HomePage.tsx +0 -89
  55. package/templates/web-app/template/src/pages/NotFound.tsx +0 -25
  56. package/templates/web-app/template/src/stores/aiwfStore.ts +0 -126
  57. package/templates/web-app/template/src/types/global.d.ts +0 -9
  58. package/templates/web-app/template/src/vite-env.d.ts +0 -1
  59. package/templates/web-app/template/tailwind.config.js +0 -30
  60. package/templates/web-app/template/tsconfig.json +0 -37
  61. package/templates/web-app/template/tsconfig.node.json +0 -10
  62. package/templates/web-app/template/vite.config.ts +0 -23
  63. /package/rules/global/{code-style-guide.md → aiwf-code-style-guide.md} +0 -0
  64. /package/rules/global/{coding-principles.md → aiwf-coding-principles.md} +0 -0
  65. /package/rules/global/{development-process.md → aiwf-development-process.md} +0 -0
  66. /package/rules/global/{global-rules.md → aiwf-global-rules.md} +0 -0
  67. /package/rules/manual/{generate-plan-docs.md → aiwf-generate-plan-docs.md} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiwf",
3
- "version": "0.3.17",
3
+ "version": "0.3.18",
4
4
  "description": "AI Workflow Framework for Claude Code with multi-language support (Korean/English)",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -66,15 +66,15 @@ export const COMMAND_FILES = [
66
66
 
67
67
  // 글로벌 룰 파일 목록
68
68
  export const GLOBAL_RULES_FILES = [
69
- 'code-style-guide.md',
70
- 'coding-principles.md',
71
- 'development-process.md',
72
- 'global-rules.md'
69
+ 'aiwf-code-style-guide.md',
70
+ 'aiwf-coding-principles.md',
71
+ 'aiwf-development-process.md',
72
+ 'aiwf-global-rules.md'
73
73
  ];
74
74
 
75
75
  // 수동 룰 파일 목록
76
76
  export const MANUAL_RULES_FILES = [
77
- 'generate-plan-docs.md'
77
+ 'aiwf-generate-plan-docs.md'
78
78
  ];
79
79
 
80
80
  // 템플릿 파일 목록 (향후 추가 예정)
@@ -1,78 +0,0 @@
1
- # AIWF 프로젝트 템플릿
2
-
3
- 이 디렉토리에는 AIWF 프로젝트 템플릿이 포함되어 있습니다.
4
-
5
- ## 사용 가능한 템플릿
6
-
7
- ### 1. web-app (웹 애플리케이션)
8
- - React 18 + TypeScript
9
- - Vite 빌드 도구
10
- - Tailwind CSS
11
- - React Router
12
- - Zustand 상태 관리
13
- - AIWF 대시보드 통합
14
-
15
- ### 2. api-server (API 서버)
16
- - Express + TypeScript
17
- - JWT 인증
18
- - Swagger 문서화
19
- - 에러 핸들링
20
- - AIWF API 엔드포인트
21
-
22
- ### 3. npm-library (NPM 라이브러리)
23
- - TypeScript 기반
24
- - Rollup 번들링
25
- - Jest 테스트
26
- - 듀얼 모듈 시스템 (ESM/CJS)
27
- - 자동 버전 관리
28
-
29
- ## 템플릿 사용법
30
-
31
- ```bash
32
- # 대화형 모드
33
- aiwf create
34
-
35
- # 직접 지정
36
- aiwf create web-app my-app
37
-
38
- # 오프라인 모드
39
- aiwf create --offline web-app my-app
40
- ```
41
-
42
- ## 템플릿 구조
43
-
44
- 각 템플릿은 다음 구조를 따릅니다:
45
-
46
- ```
47
- template-name/
48
- ├── config.json # 템플릿 메타데이터
49
- └── template/ # 실제 프로젝트 파일
50
- ├── src/ # 소스 코드
51
- ├── .aiwf/ # AIWF 설정
52
- ├── package.json # 의존성
53
- └── README.md # 프로젝트 문서
54
- ```
55
-
56
- ## 템플릿 커스터마이징
57
-
58
- 템플릿의 플레이스홀더:
59
- - `{{projectName}}` - 프로젝트 이름
60
- - `{{description}}` - 프로젝트 설명
61
- - `{{author}}` - 작성자
62
- - `{{year}}` - 현재 연도
63
- - `{{createdAt}}` - 생성 시간
64
-
65
- ## 캐시 관리
66
-
67
- 템플릿은 오프라인 사용을 위해 캐시될 수 있습니다:
68
-
69
- ```bash
70
- # 캐시 생성
71
- aiwf cache create
72
-
73
- # 캐시 확인
74
- aiwf cache check
75
-
76
- # 캐시 삭제
77
- aiwf cache clear
78
- ```
@@ -1,64 +0,0 @@
1
- {
2
- "name": "api-server",
3
- "displayName": "API 서버 (Node.js + Express)",
4
- "description": "Express와 TypeScript로 구성된 RESTful API 서버 템플릿",
5
- "type": "api-server",
6
- "language": "typescript",
7
- "framework": "express",
8
- "features": [
9
- "Express 4",
10
- "TypeScript",
11
- "JWT Authentication",
12
- "Swagger Documentation",
13
- "Database Ready",
14
- "AIWF Integration",
15
- "Error Handling",
16
- "Request Validation"
17
- ],
18
- "structure": {
19
- "src": "소스 코드",
20
- "tests": "테스트 파일",
21
- ".aiwf": "AIWF 설정 및 메타데이터",
22
- "docs": "API 문서"
23
- },
24
- "dependencies": {
25
- "express": "^4.18.2",
26
- "cors": "^2.8.5",
27
- "helmet": "^7.0.0",
28
- "compression": "^1.7.4",
29
- "dotenv": "^16.3.1",
30
- "jsonwebtoken": "^9.0.1",
31
- "bcryptjs": "^2.4.3",
32
- "express-validator": "^7.0.1",
33
- "swagger-jsdoc": "^6.2.8",
34
- "swagger-ui-express": "^5.0.0"
35
- },
36
- "devDependencies": {
37
- "@types/express": "^4.17.17",
38
- "@types/node": "^20.0.0",
39
- "@types/cors": "^2.8.13",
40
- "@types/compression": "^1.7.2",
41
- "@types/jsonwebtoken": "^9.0.2",
42
- "@types/bcryptjs": "^2.4.2",
43
- "@types/swagger-jsdoc": "^6.0.1",
44
- "@types/swagger-ui-express": "^4.1.3",
45
- "@typescript-eslint/eslint-plugin": "^5.60.0",
46
- "@typescript-eslint/parser": "^5.60.0",
47
- "typescript": "^5.1.0",
48
- "ts-node": "^10.9.0",
49
- "nodemon": "^3.0.0",
50
- "eslint": "^8.43.0",
51
- "jest": "^29.5.0",
52
- "@types/jest": "^29.5.0",
53
- "supertest": "^6.3.0",
54
- "@types/supertest": "^2.0.12"
55
- },
56
- "scripts": {
57
- "dev": "nodemon",
58
- "build": "tsc",
59
- "start": "node dist/index.js",
60
- "test": "jest",
61
- "lint": "eslint . --ext .ts",
62
- "aiwf": "node .aiwf/scripts/cli.js"
63
- }
64
- }
@@ -1,56 +0,0 @@
1
- {
2
- "project_name": "{{projectName}}",
3
- "project_type": "api-server",
4
- "framework": "express",
5
- "language": "typescript",
6
- "created_at": "{{createdAt}}",
7
- "version": "0.0.1",
8
- "features": {
9
- "feature_ledger": {
10
- "enabled": true,
11
- "auto_track": true,
12
- "git_integration": true,
13
- "api_endpoints": true
14
- },
15
- "ai_persona": {
16
- "enabled": true,
17
- "default": "backend-engineer",
18
- "available": [
19
- "backend-engineer",
20
- "api-architect",
21
- "database-specialist",
22
- "security-auditor",
23
- "performance-optimizer"
24
- ]
25
- },
26
- "context_compression": {
27
- "enabled": true,
28
- "level": "balanced",
29
- "token_limit": 100000,
30
- "cache_enabled": true
31
- },
32
- "api_documentation": {
33
- "enabled": true,
34
- "swagger": true,
35
- "postman_sync": false
36
- }
37
- },
38
- "structure": {
39
- "src_dir": "src",
40
- "test_dir": "tests",
41
- "build_dir": "dist",
42
- "docs_dir": "docs"
43
- },
44
- "conventions": {
45
- "routing": "restful",
46
- "authentication": "jwt",
47
- "validation": "express-validator",
48
- "testing": "jest",
49
- "linting": "eslint",
50
- "database": "prepared"
51
- },
52
- "scripts": {
53
- "pre_commit": "npm run lint && npm test",
54
- "post_feature": "npm run aiwf:feature update && npm run aiwf:api docs"
55
- }
56
- }
@@ -1,42 +0,0 @@
1
- {
2
- "version": "1.0.0",
3
- "project": "{{projectName}}",
4
- "created": "{{createdAt}}",
5
- "features": [
6
- {
7
- "id": "F001",
8
- "name": "API 서버 초기 설정",
9
- "description": "Express + TypeScript 기반 RESTful API 서버 초기 설정",
10
- "type": "setup",
11
- "status": "completed",
12
- "created_at": "{{createdAt}}",
13
- "completed_at": "{{createdAt}}",
14
- "components": [
15
- "Express 서버 설정",
16
- "TypeScript 설정",
17
- "미들웨어 구성",
18
- "에러 핸들링",
19
- "API 문서화 (Swagger)"
20
- ],
21
- "endpoints": [
22
- "GET /api/health",
23
- "GET /api/v1/status",
24
- "GET /docs"
25
- ],
26
- "files": [
27
- "src/index.ts",
28
- "src/app.ts",
29
- "src/middleware/*",
30
- "src/config/*"
31
- ],
32
- "tags": ["초기설정", "인프라", "API"]
33
- }
34
- ],
35
- "statistics": {
36
- "total_features": 1,
37
- "completed": 1,
38
- "in_progress": 0,
39
- "planned": 0,
40
- "total_endpoints": 3
41
- }
42
- }
@@ -1,40 +0,0 @@
1
- {
2
- "id": "backend-engineer",
3
- "name": "백엔드 엔지니어",
4
- "description": "Express API 서버 개발 전문가",
5
- "expertise": [
6
- "RESTful API 설계",
7
- "Express.js 최적화",
8
- "데이터베이스 설계 및 쿼리 최적화",
9
- "인증/인가 시스템",
10
- "API 보안",
11
- "성능 튜닝"
12
- ],
13
- "context": {
14
- "focus_areas": [
15
- "API 설계 패턴",
16
- "에러 핸들링",
17
- "입력 검증",
18
- "미들웨어 아키텍처",
19
- "데이터베이스 트랜잭션"
20
- ],
21
- "code_style": {
22
- "naming": "camelCase (변수/함수), PascalCase (클래스/인터페이스)",
23
- "structure": "계층형 아키텍처 (Controller-Service-Repository)",
24
- "error_handling": "중앙집중식 에러 핸들러",
25
- "validation": "DTO와 validation 미들웨어 사용"
26
- },
27
- "best_practices": [
28
- "RESTful 원칙 준수",
29
- "적절한 HTTP 상태 코드 사용",
30
- "요청/응답 DTO 정의",
31
- "비즈니스 로직과 컨트롤러 분리",
32
- "트랜잭션 관리"
33
- ]
34
- },
35
- "prompts": {
36
- "api_design": "RESTful 원칙을 따르며 확장 가능하고 유지보수가 쉬운 API를 설계해주세요.",
37
- "security": "OWASP Top 10을 고려하여 보안이 강화된 API를 구현해주세요.",
38
- "performance": "캐싱, 쿼리 최적화, 비동기 처리를 활용하여 고성능 API를 만들어주세요."
39
- }
40
- }
@@ -1,111 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- const fs = require('fs');
4
- const path = require('path');
5
-
6
- const args = process.argv.slice(2);
7
- const command = args[0];
8
- const subcommand = args[1];
9
-
10
- const projectRoot = path.resolve(__dirname, '../..');
11
- const aiwfDir = path.join(projectRoot, '.aiwf');
12
- const featureLedgerPath = path.join(aiwfDir, 'feature-ledger.json');
13
- const configPath = path.join(aiwfDir, 'config.json');
14
-
15
- // Feature Ledger 관련 명령어
16
- if (command === 'feature') {
17
- const ledger = JSON.parse(fs.readFileSync(featureLedgerPath, 'utf8'));
18
-
19
- switch (subcommand) {
20
- case 'list':
21
- console.log('\n📋 Feature Ledger\n');
22
- ledger.features.forEach(feature => {
23
- const status = {
24
- completed: '✅',
25
- in_progress: '🔄',
26
- planned: '📝'
27
- }[feature.status];
28
- console.log(`${status} [${feature.id}] ${feature.name}`);
29
- console.log(` ${feature.description}`);
30
- if (feature.endpoints && feature.endpoints.length > 0) {
31
- console.log(` Endpoints: ${feature.endpoints.join(', ')}`);
32
- }
33
- console.log(` Tags: ${feature.tags.join(', ')}`);
34
- console.log();
35
- });
36
- console.log(`총 ${ledger.features.length}개 기능`);
37
- break;
38
-
39
- case 'stats':
40
- console.log('\n📊 Feature 통계\n');
41
- console.log(`총 기능: ${ledger.statistics.total_features}`);
42
- console.log(`완료: ${ledger.statistics.completed}`);
43
- console.log(`진행중: ${ledger.statistics.in_progress}`);
44
- console.log(`계획됨: ${ledger.statistics.planned}`);
45
- console.log(`총 엔드포인트: ${ledger.statistics.total_endpoints || 0}`);
46
- break;
47
-
48
- default:
49
- console.log('사용법: npm run aiwf feature [list|stats]');
50
- }
51
- }
52
-
53
- // API 관련 명령어
54
- else if (command === 'api') {
55
- switch (subcommand) {
56
- case 'docs':
57
- console.log('API 문서 업데이트 중...');
58
- console.log('Swagger 문서가 /docs 경로에서 제공됩니다.');
59
- break;
60
-
61
- case 'validate':
62
- console.log('API 스펙 검증 중...');
63
- // 실제 구현에서는 OpenAPI 스펙 검증 로직
64
- console.log('✅ API 스펙이 유효합니다.');
65
- break;
66
-
67
- default:
68
- console.log('사용법: npm run aiwf api [docs|validate]');
69
- }
70
- }
71
-
72
- // 상태 명령어
73
- else if (command === 'status') {
74
- const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
75
- const ledger = JSON.parse(fs.readFileSync(featureLedgerPath, 'utf8'));
76
-
77
- console.log('\n🚀 AIWF API 서버 상태\n');
78
- console.log(`프로젝트: ${config.project_name}`);
79
- console.log(`타입: ${config.project_type}`);
80
- console.log(`프레임워크: ${config.framework}`);
81
- console.log(`버전: ${config.version}`);
82
- console.log();
83
- console.log('📊 통계:');
84
- console.log(`- 총 기능: ${ledger.statistics.total_features}`);
85
- console.log(`- 총 엔드포인트: ${ledger.statistics.total_endpoints || 0}`);
86
- console.log();
87
- console.log('🤖 AI 페르소나:', config.features.ai_persona.default);
88
- console.log('📦 Context 압축:', config.features.context_compression.level);
89
- console.log('📚 API 문서화:', config.features.api_documentation.swagger ? 'Swagger 활성화' : '비활성화');
90
- }
91
-
92
- // 도움말
93
- else {
94
- console.log(`
95
- AIWF CLI - AI Workflow Framework (API Server)
96
-
97
- 사용법: npm run aiwf [command] [subcommand]
98
-
99
- 명령어:
100
- status 프로젝트 상태 보기
101
- feature list 기능 목록 보기
102
- feature stats 기능 통계 보기
103
- api docs API 문서 업데이트
104
- api validate API 스펙 검증
105
-
106
- 예시:
107
- npm run aiwf status
108
- npm run aiwf feature list
109
- npm run aiwf api docs
110
- `);
111
- }
@@ -1,29 +0,0 @@
1
- # Application
2
- NODE_ENV=development
3
- PORT=3000
4
- HOST=localhost
5
-
6
- # Security
7
- JWT_SECRET=your-super-secret-jwt-key-change-this
8
- JWT_EXPIRES_IN=7d
9
- BCRYPT_ROUNDS=10
10
-
11
- # Database (uncomment and configure as needed)
12
- # DB_HOST=localhost
13
- # DB_PORT=5432
14
- # DB_NAME=myapp
15
- # DB_USER=myuser
16
- # DB_PASSWORD=mypassword
17
-
18
- # AIWF Settings
19
- AIWF_ENABLED=true
20
- AIWF_TOKEN_LIMIT=100000
21
- AIWF_COMPRESSION_LEVEL=balanced
22
-
23
- # API Rate Limiting
24
- RATE_LIMIT_WINDOW_MS=900000
25
- RATE_LIMIT_MAX_REQUESTS=100
26
-
27
- # Logging
28
- LOG_LEVEL=info
29
- LOG_FORMAT=json
@@ -1,23 +0,0 @@
1
- {
2
- "parser": "@typescript-eslint/parser",
3
- "extends": [
4
- "eslint:recommended",
5
- "plugin:@typescript-eslint/recommended"
6
- ],
7
- "parserOptions": {
8
- "ecmaVersion": 2022,
9
- "sourceType": "module",
10
- "project": "./tsconfig.json"
11
- },
12
- "rules": {
13
- "@typescript-eslint/explicit-function-return-type": "off",
14
- "@typescript-eslint/no-explicit-any": "warn",
15
- "@typescript-eslint/no-unused-vars": ["warn", { "argsIgnorePattern": "^_" }],
16
- "no-console": ["warn", { "allow": ["warn", "error"] }]
17
- },
18
- "env": {
19
- "node": true,
20
- "es2022": true,
21
- "jest": true
22
- }
23
- }
@@ -1,171 +0,0 @@
1
- # {{projectName}}
2
-
3
- AIWF가 통합된 Express + TypeScript RESTful API 서버입니다.
4
-
5
- ## 시작하기
6
-
7
- ### 개발 서버 실행
8
-
9
- ```bash
10
- npm install
11
- cp .env.example .env
12
- npm run dev
13
- ```
14
-
15
- 서버가 [http://localhost:3000](http://localhost:3000)에서 실행됩니다.
16
-
17
- ### API 문서
18
-
19
- Swagger UI: [http://localhost:3000/docs](http://localhost:3000/docs)
20
-
21
- ### 빌드
22
-
23
- ```bash
24
- npm run build
25
- npm start
26
- ```
27
-
28
- ## 기술 스택
29
-
30
- - **Express 4** - 웹 프레임워크
31
- - **TypeScript** - 타입 안정성
32
- - **JWT** - 인증
33
- - **Swagger** - API 문서화
34
- - **Winston** - 로깅
35
- - **Jest** - 테스팅
36
- - **AIWF** - AI 지원 개발 워크플로우
37
-
38
- ## 프로젝트 구조
39
-
40
- ```
41
- src/
42
- ├── config/ # 설정 파일
43
- ├── controllers/ # 요청 핸들러
44
- ├── middleware/ # Express 미들웨어
45
- ├── models/ # 데이터 모델
46
- ├── routes/ # API 라우트 정의
47
- ├── services/ # 비즈니스 로직
48
- ├── utils/ # 유틸리티 함수
49
- └── types/ # TypeScript 타입 정의
50
- ```
51
-
52
- ## API 엔드포인트
53
-
54
- ### 인증
55
-
56
- - `POST /api/v1/auth/register` - 회원가입
57
- - `POST /api/v1/auth/login` - 로그인
58
-
59
- ### 상태
60
-
61
- - `GET /health` - 헬스체크
62
- - `GET /api/v1/status` - API 상태
63
-
64
- ### AIWF
65
-
66
- - `GET /api/aiwf/features` - Feature Ledger 조회
67
- - `GET /api/aiwf/token-usage` - 토큰 사용량 조회
68
- - `GET /api/aiwf/context` - Context 상태 조회
69
-
70
- ## AIWF 기능
71
-
72
- ### Feature Ledger
73
-
74
- API 엔드포인트 개발을 자동으로 추적합니다.
75
-
76
- ```bash
77
- npm run aiwf:feature list # 기능 목록 보기
78
- npm run aiwf:feature stats # 통계 보기
79
- ```
80
-
81
- ### API 문서 자동화
82
-
83
- ```bash
84
- npm run aiwf:api docs # API 문서 업데이트
85
- npm run aiwf:api validate # API 스펙 검증
86
- ```
87
-
88
- ### AI 페르소나
89
-
90
- - `backend-engineer` - 백엔드 개발 (기본값)
91
- - `api-architect` - API 설계
92
- - `database-specialist` - 데이터베이스
93
- - `security-auditor` - 보안 감사
94
- - `performance-optimizer` - 성능 최적화
95
-
96
- ## 개발 가이드
97
-
98
- ### 새 API 엔드포인트 추가
99
-
100
- 1. 라우트 정의 (`src/routes/`)
101
- 2. 컨트롤러 구현 (`src/controllers/`)
102
- 3. 서비스 로직 작성 (`src/services/`)
103
- 4. 입력 검증 추가
104
- 5. Swagger 문서 작성
105
-
106
- ### 미들웨어 추가
107
-
108
- ```typescript
109
- // src/middleware/myMiddleware.ts
110
- export const myMiddleware = (req: Request, res: Response, next: NextFunction) => {
111
- // 미들웨어 로직
112
- next();
113
- };
114
- ```
115
-
116
- ### 환경 변수
117
-
118
- `.env` 파일 설정:
119
-
120
- ```env
121
- NODE_ENV=development
122
- PORT=3000
123
- JWT_SECRET=your-secret-key
124
- ```
125
-
126
- ## 테스트
127
-
128
- ```bash
129
- # 전체 테스트 실행
130
- npm test
131
-
132
- # 감시 모드
133
- npm run test:watch
134
-
135
- # 커버리지 리포트
136
- npm test -- --coverage
137
- ```
138
-
139
- ## 보안
140
-
141
- - Helmet.js로 보안 헤더 설정
142
- - Rate limiting 적용
143
- - JWT 토큰 인증
144
- - 입력 검증 (express-validator)
145
- - CORS 설정
146
-
147
- ## 배포
148
-
149
- ### Docker
150
-
151
- ```dockerfile
152
- FROM node:18-alpine
153
- WORKDIR /app
154
- COPY package*.json ./
155
- RUN npm ci --only=production
156
- COPY . .
157
- RUN npm run build
158
- EXPOSE 3000
159
- CMD ["npm", "start"]
160
- ```
161
-
162
- ### PM2
163
-
164
- ```bash
165
- npm run build
166
- pm2 start dist/index.js --name {{projectName}}
167
- ```
168
-
169
- ## 라이선스
170
-
171
- MIT
@@ -1,26 +0,0 @@
1
- module.exports = {
2
- preset: 'ts-jest',
3
- testEnvironment: 'node',
4
- roots: ['<rootDir>/src', '<rootDir>/tests'],
5
- testMatch: ['**/__tests__/**/*.ts', '**/?(*.)+(spec|test).ts'],
6
- transform: {
7
- '^.+\\.ts$': 'ts-jest',
8
- },
9
- collectCoverageFrom: [
10
- 'src/**/*.ts',
11
- '!src/**/*.d.ts',
12
- '!src/**/*.interface.ts',
13
- '!src/index.ts',
14
- ],
15
- moduleNameMapper: {
16
- '^@/(.*)$': '<rootDir>/src/$1',
17
- '^@config/(.*)$': '<rootDir>/src/config/$1',
18
- '^@controllers/(.*)$': '<rootDir>/src/controllers/$1',
19
- '^@middleware/(.*)$': '<rootDir>/src/middleware/$1',
20
- '^@models/(.*)$': '<rootDir>/src/models/$1',
21
- '^@routes/(.*)$': '<rootDir>/src/routes/$1',
22
- '^@services/(.*)$': '<rootDir>/src/services/$1',
23
- '^@utils/(.*)$': '<rootDir>/src/utils/$1',
24
- '^@types/(.*)$': '<rootDir>/src/types/$1',
25
- },
26
- };
@@ -1,9 +0,0 @@
1
- {
2
- "watch": ["src"],
3
- "ext": "ts",
4
- "ignore": ["src/**/*.spec.ts", "src/**/*.test.ts"],
5
- "exec": "ts-node -r tsconfig-paths/register ./src/index.ts",
6
- "env": {
7
- "NODE_ENV": "development"
8
- }
9
- }