# π μ§μ λ² μ΄μ€ μ μ₯ μ λ΅
**κ²°λ‘ **: 3λ¨κ³ νμ΄λΈλ¦¬λ μ κ·Ό
---
## π― μ λ΅ κ°μ
### Tier 1: Git Repository (μμ + λ¬Έμ)
**μ©λ**: ~20MB
**λͺ©μ **: μ¬μ©μκ° μ¦μ μ΄ν΄ν μ μλλ‘
```
knowledge-base-samples/
βββ 410-llm-engineer/
β βββ core-competencies/
β β βββ transformer-architectures.md (20 pages) β
Git
β βββ README.md (μ΄λ»κ² μ¬μ©νλμ§)
βββ README.md (μ 체 μ§μ λ² μ΄μ€ κ°μ)
```
**Gitμ ν¬ν¨**:
- β
κ° νλ₯΄μλλΉ 1-2κ° λν λ¬Έμ (μμ)
- β
ꡬ쑰 λ° μ¬μ©λ² λ¬Έμ
- β
λ©νλ°μ΄ν° (manifest.json)
### Tier 2: Google Drive / S3 (μ 체 μ§μ λ² μ΄μ€)
**μ©λ**: 14.2GB (142 personas Γ 100MB)
**λͺ©μ **: νλ‘λμ
μ¬μ©
```
knowledge-base-full.zip (14.2GB)
βββ 410-llm-engineer/ (100MB)
βββ core-competencies/ (50MB)
βββ case-studies/ (20MB)
βββ code-examples/ (15MB)
βββ research-papers/ (10MB)
βββ best-practices/ (5MB)
```
**λ€μ΄λ‘λ λ§ν¬**:
```bash
# μλ μ€μΉ μ€ν¬λ¦½νΈ
npm run install-knowledge-base
# λλ μλ
curl -L https://drive.google.com/uc?id=FILE_ID -o kb.zip
unzip kb.zip -d knowledge-base/
```
### Tier 3: μλ μμ± (μ νμ¬ν)
**μ©λ**: 0 (μμ± μμ ν¬λ‘€λ§)
**λͺ©μ **: νμ μ΅μ μ μ§
```bash
# νΉμ νλ₯΄μλλ§ μμ±
npm run build-kb -- --persona 410-llm-engineer
# λͺ¨λ μμ± (30λΆ μμ)
npm run build-kb -- --all
```
---
## π μ΅μ’
λλ ν 리 ꡬ쑰
```
persona-mcp/
βββ .gitignore
β βββ knowledge-base/ # λ‘컬 μ 체 KB μ μΈ
β !knowledge-base-samples/ # μμλ§ ν¬ν¨
β
βββ knowledge-base-samples/ (Gitμ ν¬ν¨, 20MB)
β βββ 410-llm-engineer/
β β βββ transformer-architectures.md
β βββ 108-devops-engineer/
β β βββ ci-cd-best-practices.md
β βββ README.md
β
βββ knowledge-base/ (Git μ μΈ, λ‘컬λ§, 14.2GB)
β βββ 410-llm-engineer/ (100MB)
β βββ 108-devops-engineer/ (80MB)
β βββ ... (142κ°, μ¬μ©μκ° λ€μ΄λ‘λ)
β
βββ knowledge-base-manifest.json (Gitμ ν¬ν¨)
β βββ λ€μ΄λ‘λ λ§ν¬, 체ν¬μ¬
β
βββ scripts/
βββ download-knowledge-base.js
βββ build-knowledge-base.js
```
---
## π οΈ .gitignore μ€μ
```gitignore
# Knowledge Base (λ‘컬λ§)
knowledge-base/
# μμΈ: μνμ ν¬ν¨
!knowledge-base-samples/
# λ²‘ν° DB (λ‘컬λ§)
.chroma/
*.faiss
# Node modules
node_modules/
```
---
## π¦ knowledge-base-manifest.json
```json
{
"version": "3.1.0",
"updated": "2025-11-23",
"total_size": "14.2 GB",
"personas": {
"410-llm-engineer": {
"size": "102.4 MB",
"chunks": 50000,
"documents": 523,
"sources": [
"https://drive.google.com/uc?id=1ABC123/410-llm-engineer.zip",
"https://huggingface.co/datasets/personas/410-llm-engineer"
],
"checksum": "sha256:abc123...",
"sample_included": true,
"sample_path": "knowledge-base-samples/410-llm-engineer/"
},
"108-devops-engineer": {
"size": "78.5 MB",
"chunks": 39250,
"documents": 412,
"sources": ["..."],
"checksum": "sha256:def456..."
}
},
"download_instructions": {
"automatic": "npm run install-knowledge-base",
"manual": "curl -L [url] -o kb.zip && unzip kb.zip",
"selective": "npm run install-kb -- --persona 410"
}
}
```
---
## π μ¬μ©μ μν¬νλ‘μ°
### 첫 μ€μΉ (λΉ λ₯Έ μμ)
```bash
# 1. Git ν΄λ‘ (μν ν¬ν¨, 50MB)
git clone https://github.com/seanshin0214/world-class-leadership-personas.git
cd world-class-leadership-personas
# 2. μμ‘΄μ± μ€μΉ
npm install
# 3. μνλ‘ μ¦μ ν
μ€νΈ κ°λ₯! β
npm run dev
# β knowledge-base-samples/ μ¬μ© (20MB, Gitμμ λ€μ΄λ‘λλ¨)
# 4. (μ ν) μ 체 KB λ€μ΄λ‘λ (νλ‘λμ
μ©)
npm run install-knowledge-base
# β knowledge-base/ μμ± (14.2GB, Google Driveμμ λ€μ΄λ‘λ)
```
### μ νμ λ€μ΄λ‘λ
```bash
# νΉμ νλ₯΄μλλ§ (μΆμ²)
npm run install-kb -- --persona 410-llm-engineer
# β 100MBλ§ λ€μ΄λ‘λ
# μ¬λ¬ νλ₯΄μλ
npm run install-kb -- --personas 410,108,201
# β 300MB λ€μ΄λ‘λ
# μ 체 (νλ‘λμ
)
npm run install-kb -- --all
# β 14.2GB λ€μ΄λ‘λ
```
---
## πΎ scripts/download-knowledge-base.js
```javascript
#!/usr/bin/env node
const https = require('https');
const fs = require('fs');
const path = require('path');
const { pipeline } = require('stream/promises');
const unzipper = require('unzipper');
async function downloadKnowledgeBase(personaId = null) {
const manifest = require('../knowledge-base-manifest.json');
const toDownload = personaId
? [manifest.personas[personaId]]
: Object.values(manifest.personas);
console.log(`Downloading ${toDownload.length} persona knowledge bases...`);
for (const persona of toDownload) {
console.log(`\nDownloading ${persona.id}... (${persona.size})`);
const url = persona.sources[0];
const zipPath = path.join(__dirname, `../temp/${persona.id}.zip`);
const extractPath = path.join(__dirname, `../knowledge-base/${persona.id}`);
// Download
await downloadFile(url, zipPath);
// Verify checksum
const actualChecksum = await calculateChecksum(zipPath);
if (actualChecksum !== persona.checksum) {
throw new Error(`Checksum mismatch for ${persona.id}`);
}
// Extract
await extractZip(zipPath, extractPath);
// Cleanup
fs.unlinkSync(zipPath);
console.log(`β ${persona.id} installed`);
}
console.log('\nβ
Knowledge base installation complete!');
}
async function downloadFile(url, dest) {
const file = fs.createWriteStream(dest);
return new Promise((resolve, reject) => {
https.get(url, (response) => {
if (response.statusCode === 302 || response.statusCode === 301) {
// Follow redirect
return downloadFile(response.headers.location, dest)
.then(resolve)
.catch(reject);
}
response.pipe(file);
file.on('finish', () => {
file.close(resolve);
});
}).on('error', (err) => {
fs.unlink(dest);
reject(err);
});
});
}
async function extractZip(zipPath, destPath) {
await fs.createReadStream(zipPath)
.pipe(unzipper.Extract({ path: destPath }))
.promise();
}
async function calculateChecksum(filePath) {
const crypto = require('crypto');
const hash = crypto.createHash('sha256');
const stream = fs.createReadStream(filePath);
return new Promise((resolve, reject) => {
stream.on('data', (data) => hash.update(data));
stream.on('end', () => resolve(hash.digest('hex')));
stream.on('error', reject);
});
}
// CLI
const args = process.argv.slice(2);
const personaId = args.includes('--persona')
? args[args.indexOf('--persona') + 1]
: null;
downloadKnowledgeBase(personaId)
.catch(console.error);
```
---
## π λΉμ© λΉκ΅
### Git LFS
```
Storage: $5/μ for 50GB
Bandwidth: $0.0875/GB
μμ λΉμ©: $10-20/μ
```
### Google Drive (μΆμ²)
```
무λ£: 15GB
Google One: $2/μ for 100GB
β μμ λΉμ©: $2/μ λλ 무λ£
```
### AWS S3
```
Storage: $0.023/GB/μ (14.2GB = $0.33/μ)
Transfer: $0.09/GB (100GB = $9/μ)
β μμ λΉμ©: ~$10/μ
```
### HuggingFace Datasets (μΆμ²)
```
λ¬΄λ£ λ¬΄μ ν!
datasets.load_dataset("personas/410-llm-engineer")
β μμ λΉμ©: $0
```
---
## β
μ΅μ’
κΆμ₯μ¬ν
### Phase 1 (νμ¬)
```bash
# Gitμ μνλ§ ν¬ν¨
knowledge-base-samples/
βββ 410-llm-engineer/
βββ transformer-architectures.md β
μ΄λ―Έ 컀λ°λ¨
```
### Phase 2 (λ€μ λ¨κ³)
```bash
# Google Driveμ μ 체 μ
λ‘λ
1. 410-llm-engineer.zip (100MB) μμ±
2. Google Drive 곡μ λ§ν¬ μμ±
3. manifest.json μ
λ°μ΄νΈ
4. download μ€ν¬λ¦½νΈ μμ±
```
### Phase 3 (νλ‘λμ
)
```bash
# HuggingFace Datasetsλ‘ λ§μ΄κ·Έλ μ΄μ
from datasets import load_dataset
kb = load_dataset("world-class-personas/410-llm-engineer")
# β 무λ£, 무μ ν, λ²μ κ΄λ¦¬, CDN
```
---
**νμ¬ μν**: Gitμ μν 1κ° ν¬ν¨ β
**λ€μ λ¨κ³**: manifest.json + download μ€ν¬λ¦½νΈ μμ±
**μ΅μ’
λͺ©ν**: HuggingFace Datasets νΈμ€ν