Skip to Content
EV Motor Reliability์šด์˜์ž ๋งค๋‰ด์–ผ์›น ํ”„๋ก ํŠธ์—”๋“œ

์›น ํ”„๋ก ํŠธ์—”๋“œ

ev-motor-reliability๋Š” Python/C ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์ด์ง€๋งŒ, ๋ถ„์„ ๊ฒฐ๊ณผ ๋Œ€์‹œ๋ณด๋“œ์™€ ์‹œํ—˜ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ ์›น ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ๋Š” ํ”„๋กœ์ ํŠธ์˜ web/ ๋””๋ ‰ํ† ๋ฆฌ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ์กฐ

ev-motor-reliability/ โ””โ”€โ”€ web/ โ”œโ”€โ”€ src/ โ”‚ โ”œโ”€โ”€ app/ # Next.js App Router ํŽ˜์ด์ง€ โ”‚ โ”œโ”€โ”€ components/ # UI ์ปดํฌ๋„ŒํŠธ โ”‚ โ””โ”€โ”€ lib/ # API ํด๋ผ์ด์–ธํŠธ, ์œ ํ‹ธ๋ฆฌํ‹ฐ โ”œโ”€โ”€ public/ # ์ •์  ํŒŒ์ผ โ”œโ”€โ”€ package.json โ”œโ”€โ”€ next.config.js โ””โ”€โ”€ tsconfig.json

์ฃผ์š” ๊ธฐ๋Šฅ

๊ธฐ๋Šฅ์„ค๋ช…
๋Œ€์‹œ๋ณด๋“œ๋ถ„์„ ํ˜„ํ™ฉ, ์ตœ๊ทผ ์‹œํ—˜ ๊ฒฐ๊ณผ ์š”์•ฝ
๋ฐ์ดํ„ฐ ์—…๋กœ๋“œCSV/Excel ํŒŒ์ผ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ์—…๋กœ๋“œ
๋ถ„์„ ์„ค์ •Weibull ํŒŒ๋ผ๋ฏธํ„ฐ, ๊ณ ์žฅ ๊ธฐ์ค€ ์„ค์ • UI
๊ฒฐ๊ณผ ์‹œ๊ฐํ™”Weibull ํ”Œ๋กฏ, ์‹ ๋ขฐ๋„ ๊ณก์„  ๋“ฑ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฐจํŠธ
์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง์‹œ๋ฆฌ์–ผ ์ˆ˜์ง‘ ์ค‘ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ ํ‘œ์‹œ
๋ณด๊ณ ์„œ ๋‹ค์šด๋กœ๋“œHTML/PDF ๋ณด๊ณ ์„œ ์ƒ์„ฑ ๋ฐ ๋‹ค์šด๋กœ๋“œ

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

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

  • Node.js 18 ์ด์ƒ
  • Python ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰ ์ค‘์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค (API ํ†ต์‹ )

์„ค์น˜

cd ev-motor-reliability/web npm install

ํ™˜๊ฒฝ ๋ณ€์ˆ˜

web/.env.local ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

# Python API ์„œ๋ฒ„ ์ฃผ์†Œ NEXT_PUBLIC_API_URL=http://localhost:8000 # WebSocket ์ฃผ์†Œ (์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง) NEXT_PUBLIC_WS_URL=ws://localhost:8000/ws

๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰

Python API ์„œ๋ฒ„์™€ ์›น ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ํ•จ๊ป˜ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

# ํ„ฐ๋ฏธ๋„ 1: Python API ์„œ๋ฒ„ cd ev-motor-reliability source venv/bin/activate uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload # ํ„ฐ๋ฏธ๋„ 2: ์›น ํ”„๋ก ํŠธ์—”๋“œ cd ev-motor-reliability/web npm run dev

๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000์œผ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

API ์—ฐ๋™

์›น ํ”„๋ก ํŠธ์—”๋“œ๋Š” Python FastAPI ์„œ๋ฒ„์˜ REST API๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” API ์—”๋“œํฌ์ธํŠธ

๋ฉ”์„œ๋“œ๊ฒฝ๋กœ์„ค๋ช…
POST/api/upload์‹œํ—˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์—…๋กœ๋“œ
GET/api/datasets์—…๋กœ๋“œ๋œ ๋ฐ์ดํ„ฐ์…‹ ๋ชฉ๋ก
POST/api/analysis/run๋ถ„์„ ์‹คํ–‰ (๋น„๋™๊ธฐ)
GET/api/analysis/{id}/status๋ถ„์„ ์ง„ํ–‰ ์ƒํƒœ
GET/api/analysis/{id}/result๋ถ„์„ ๊ฒฐ๊ณผ ์กฐํšŒ
GET/api/analysis/{id}/plot/{type}์ฐจํŠธ ์ด๋ฏธ์ง€ ์š”์ฒญ
GET/api/analysis/{id}/report๋ณด๊ณ ์„œ ๋‹ค์šด๋กœ๋“œ
WS/ws/monitor์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ

์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง

์‹œ๋ฆฌ์–ผ ํฌํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ๋™์•ˆ, WebSocket์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค. ์ฐจํŠธ๋Š” ์ˆ˜์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฐฑ์‹ ํ•ฉ๋‹ˆ๋‹ค.

๋นŒ๋“œ ๋ฐ ์‹คํ–‰

ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ

cd ev-motor-reliability/web npm run build

๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์€ web/.next/ ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๋•์…˜ ์‹คํ–‰

cd ev-motor-reliability/web npm start

๊ธฐ๋ณธ ํฌํŠธ๋Š” 3000์ž…๋‹ˆ๋‹ค. PORT ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Python API ์„œ๋ฒ„์™€ ๋™์‹œ ์‹คํ–‰

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‘ ์„œ๋ฒ„๋ฅผ ๋ชจ๋‘ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

# PM2 ์‚ฌ์šฉ ์˜ˆ์‹œ pm2 start "uvicorn app.main:app --host 0.0.0.0 --port 8000" --name ev-api pm2 start "cd web && npm start" --name ev-web pm2 save

ํ”„๋ก์‹œ ์„ค์ •

ํ”„๋ก ํŠธ์—”๋“œ์™€ API ์„œ๋ฒ„๋ฅผ ๋™์ผ ๋„๋ฉ”์ธ์—์„œ ์„œ๋น„์Šคํ•˜๋ ค๋ฉด Nginx ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

server { listen 80; server_name ev-motor.local; # ์›น ํ”„๋ก ํŠธ์—”๋“œ location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; } # API ์„œ๋ฒ„ location /api/ { proxy_pass http://localhost:8000/api/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # WebSocket location /ws/ { proxy_pass http://localhost:8000/ws/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host $host; } }