Skip to content

Danto7632/PWS_V3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

14 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

CS ์—…๋ฌด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ

AI ๊ธฐ๋ฐ˜ ๊ณ ๊ฐ ์„œ๋น„์Šค ์—…๋ฌด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์‹ ์ž… ์ง์›์„ ์œ„ํ•œ ๊ณ ๊ฐ ์‘๋Œ€ ์—ฐ์Šต ๋„๊ตฌ๋กœ, ์‹ค์ œ ์—…๋ฌด ๋งค๋‰ด์–ผ์„ ํ•™์Šตํ•œ AI์™€ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ์—ฐ์˜์ƒ : https://www.youtube.com/watch?v=9wFu5BvlJm8&feature=youtu.be

๐Ÿ“‹ ๋ชฉ์ฐจ

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                 โ”‚     โ”‚                 โ”‚     โ”‚                 โ”‚
โ”‚    Frontend     โ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚    Backend      โ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚   AI Service    โ”‚
โ”‚    (React)      โ”‚     โ”‚    (NestJS)     โ”‚     โ”‚   (FastAPI)     โ”‚
โ”‚   :5173/:80     โ”‚     โ”‚    :3001        โ”‚     โ”‚    :8000        โ”‚
โ”‚                 โ”‚     โ”‚                 โ”‚     โ”‚                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                 โ”‚                       โ”‚
                                 โ–ผ                       โ–ผ
                        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                        โ”‚     MySQL       โ”‚     โ”‚   ChromaDB      โ”‚
                        โ”‚   (TypeORM)     โ”‚     โ”‚  (Vector DB)    โ”‚
                        โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

PWS_V3/
โ”œโ”€โ”€ frontend/          # React ํ”„๋ก ํŠธ์—”๋“œ (Vite + TypeScript)
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ components/   # UI ์ปดํฌ๋„ŒํŠธ
โ”‚   โ”‚   โ”œโ”€โ”€ services/     # API ์„œ๋น„์Šค
โ”‚   โ”‚   โ””โ”€โ”€ types/        # TypeScript ํƒ€์ž…
โ”‚   โ””โ”€โ”€ package.json
โ”‚
โ”œโ”€โ”€ backend/           # NestJS ๋ฐฑ์—”๋“œ
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ auth/         # ์ธ์ฆ ๋ชจ๋“ˆ (JWT)
โ”‚   โ”‚   โ”œโ”€โ”€ projects/     # ํ”„๋กœ์ ํŠธ ๋ชจ๋“ˆ
โ”‚   โ”‚   โ”œโ”€โ”€ conversations/# ๋Œ€ํ™” ๋ชจ๋“ˆ
โ”‚   โ”‚   โ”œโ”€โ”€ messages/     # ๋ฉ”์‹œ์ง€ ๋ชจ๋“ˆ
โ”‚   โ”‚   โ”œโ”€โ”€ files/        # ํŒŒ์ผ ๋ชจ๋“ˆ
โ”‚   โ”‚   โ””โ”€โ”€ ai/           # AI ํ”„๋ก์‹œ ๋ชจ๋“ˆ
โ”‚   โ””โ”€โ”€ package.json
โ”‚
โ””โ”€โ”€ ai/                # FastAPI AI ์„œ๋น„์Šค
    โ”œโ”€โ”€ main.py           # FastAPI ๋ฉ”์ธ
    โ””โ”€โ”€ requirements.txt

โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐Ÿ“š ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ

  • ํ”„๋กœ์ ํŠธ๋ณ„ ๋งค๋‰ด์–ผ ์—…๋กœ๋“œ ๋ฐ ๊ด€๋ฆฌ
  • ์—…๋ฌด ์ง€์นจ ์„ค์ •
  • ํŒŒ์ผ ์ž„๋ฒ ๋”ฉ (PDF, TXT, Excel, Word)

๐ŸŽญ ์—ญํ•  ๊ธฐ๋ฐ˜ ์‹œ๋ฎฌ๋ ˆ์ด์…˜

  • ๊ณ ๊ฐ ์—ญํ• : AI ์ง์›๊ณผ ๋Œ€ํ™”ํ•˜๋ฉฐ ์„œ๋น„์Šค ์ฒดํ—˜
  • ์ง์› ์—ญํ• : AI ๊ณ ๊ฐ์˜ ๋ฌธ์˜์— ์‘๋Œ€ ์—ฐ์Šต
  • ์‹ค์‹œ๊ฐ„ ํ‰๊ฐ€ ๋ฐ ํ”ผ๋“œ๋ฐฑ

๐Ÿค– AI ํ†ตํ•ฉ

  • ๋‹ค์–‘ํ•œ LLM ์ง€์› (OpenAI, Gemini, Claude, Ollama, Perplexity)
  • RAG ๊ธฐ๋ฐ˜ ์ปจํ…์ŠคํŠธ ๊ฒ€์ƒ‰
  • ๋งค๋‰ด์–ผ ๊ธฐ๋ฐ˜ ์‹œ๋‚˜๋ฆฌ์˜ค ์ž๋™ ์ƒ์„ฑ

๐Ÿ‘ค ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ

  • JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ (ํšŒ์›/๋น„ํšŒ์› ๋ชจ๋“œ)
  • ์‚ฌ์šฉ์ž๋ณ„ ์„ค์ • ์ €์žฅ (API ํ‚ค, ๋ชจ๋ธ ์„ ํƒ)
  • ํ”„๋กœ์ ํŠธ/๋Œ€ํ™” ์‚ฌ์šฉ์ž ๊ฒฉ๋ฆฌ

๐Ÿ“ฆ ์š”๊ตฌ์‚ฌํ•ญ

ํ•„์ˆ˜ ์š”๊ตฌ์‚ฌํ•ญ

๊ตฌ์„ฑ์š”์†Œ ๋ฒ„์ „ ๋น„๊ณ 
Node.js 18.x ์ด์ƒ LTS ๊ถŒ์žฅ
Python 3.10 ์ด์ƒ 3.11 ๊ถŒ์žฅ
npm 9.x ์ด์ƒ Node.js์™€ ํ•จ๊ป˜ ์„ค์น˜๋จ

์„ ํƒ์  ์š”๊ตฌ์‚ฌํ•ญ

๊ตฌ์„ฑ์š”์†Œ ์šฉ๋„
Ollama ๋กœ์ปฌ LLM ์‚ฌ์šฉ ์‹œ ํ•„์š”
CUDA GPU ๊ฐ€์† ์ž„๋ฒ ๋”ฉ ์‹œ ํ•„์š”

๐Ÿš€ ์„ค์น˜ ๊ฐ€์ด๋“œ

1. ์ €์žฅ์†Œ ํด๋ก 

git clone <repository-url>
cd PWS_V3

2. AI ์„œ๋น„์Šค ์„ค์ • (FastAPI)

cd ai

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ ๋ฐ ํ™œ์„ฑํ™”
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# ์˜์กด์„ฑ ์„ค์น˜
pip install -r requirements.txt

# ์„œ๋ฒ„ ์‹คํ–‰
uvicorn main:app --host 0.0.0.0 --port 8000

3. ๋ฐฑ์—”๋“œ ์„ค์ • (NestJS)

cd backend

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
cp .env.example .env
# .env ํŒŒ์ผ์„ ์—ด์–ด JWT_SECRET ๋“ฑ ์ˆ˜์ •

# ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๊ฐœ๋ฐœ ๋ชจ๋“œ ์‹คํ–‰
npm run start:dev

# ๋˜๋Š” ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run build
npm run start:prod

4. ํ”„๋ก ํŠธ์—”๋“œ ์„ค์ • (React)

cd frontend

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •
cp .env.example .env
# .env ํŒŒ์ผ์„ ์—ด์–ด VITE_BACKEND_URL ์ˆ˜์ • (ํ•„์š”์‹œ)

# ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๊ฐœ๋ฐœ ๋ชจ๋“œ ์‹คํ–‰
npm run dev

# ๋˜๋Š” ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ
npm run build

5. ์ ‘์†

๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:5173 ์ ‘์†

๐Ÿ–ฅ๏ธ ๋ฐฐํฌ ๊ฐ€์ด๋“œ

์˜จํ”„๋ ˆ๋ฏธ์Šค ๋ฐฐํฌ

systemd ์„œ๋น„์Šค ์„ค์ • (Linux)

AI ์„œ๋น„์Šค (/etc/systemd/system/cs-ai.service):

[Unit]
Description=CS Simulator AI Service
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/PWS_V3/ai
Environment="PATH=/path/to/PWS_V3/ai/venv/bin"
ExecStart=/path/to/PWS_V3/ai/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
Restart=always

[Install]
WantedBy=multi-user.target

๋ฐฑ์—”๋“œ (/etc/systemd/system/cs-backend.service):

[Unit]
Description=CS Simulator Backend
After=network.target

[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/PWS_V3/backend
ExecStart=/usr/bin/node /path/to/PWS_V3/backend/dist/main.js
Restart=always
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ ์„ค์ •

server {
    listen 80;
    server_name your-domain.com;

    # Frontend (์ •์  ํŒŒ์ผ)
    location / {
        root /path/to/PWS_V3/frontend/build;
        try_files $uri $uri/ /index.html;
    }

    # Backend API
    location /api/ {
        proxy_pass http://localhost:3001/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_cache_bypass $http_upgrade;
    }

    # AI Service (๋‚ด๋ถ€์šฉ, ํ•„์š”์‹œ)
    location /ai/ {
        proxy_pass http://localhost:8000/;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Docker ๋ฐฐํฌ (์„ ํƒ์‚ฌํ•ญ)

docker-compose.yml ์˜ˆ์‹œ๋Š” ๋ณ„๋„ ๋ฌธ์„œ ์ฐธ์กฐ

โš™๏ธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ •

Backend (.env)

๋ณ€์ˆ˜๋ช… ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
AI_SERVICE_URL AI ์„œ๋น„์Šค URL http://localhost:8000
JWT_SECRET JWT ์„œ๋ช… ํ‚ค (ํ•„์ˆ˜ ๋ณ€๊ฒฝ) -
JWT_REFRESH_SECRET ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ ํ‚ค (ํ•„์ˆ˜ ๋ณ€๊ฒฝ) -

Frontend (.env)

๋ณ€์ˆ˜๋ช… ์„ค๋ช… ๊ธฐ๋ณธ๊ฐ’
VITE_BACKEND_URL Backend API URL http://localhost:3001

๐Ÿ“ก API ๋ฌธ์„œ

Backend API (NestJS)

  • ๊ธฐ๋ณธ URL: http://localhost:3001
  • Swagger: http://localhost:3001/api (๊ฐœ๋ฐœ ๋ชจ๋“œ)

AI Service API (FastAPI)

  • ๊ธฐ๋ณธ URL: http://localhost:8000
  • Swagger: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

๐Ÿ”ง ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

AI ์„œ๋น„์Šค ์‹œ์ž‘ ์‹คํŒจ

  • Python ๋ฒ„์ „ ํ™•์ธ (3.10 ์ด์ƒ)
  • CUDA ๊ด€๋ จ ์˜ค๋ฅ˜ ์‹œ CPU ๋ชจ๋“œ๋กœ ์‹คํ–‰
  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ์‹œ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ๋ณ€๊ฒฝ ๊ณ ๋ ค

๋ฐฑ์—”๋“œ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜

  • AI_SERVICE_URL ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํ™•์ธ
  • AI ์„œ๋น„์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ
  • ๋ฐฉํ™”๋ฒฝ ํฌํŠธ ์„ค์ • ํ™•์ธ

ํ”„๋ก ํŠธ์—”๋“œ API ์—ฐ๊ฒฐ ์‹คํŒจ

  • VITE_BACKEND_URL ์„ค์ • ํ™•์ธ
  • CORS ์„ค์ • ํ™•์ธ (๋ฐฑ์—”๋“œ)
  • ๋„คํŠธ์›Œํฌ ํƒญ์—์„œ ์š”์ฒญ/์‘๋‹ต ํ™•์ธ

๐Ÿ“„ ๋ผ์ด์„ ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” ์‚ฌ๋‚ด ๊ต์œก์šฉ์œผ๋กœ ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors