Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

EverNex BMS Smart Factory

๋ฐฐํ„ฐ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(BMS) ํ’ˆ์งˆ๊ฒ€์‚ฌ ๋Œ€์‹œ๋ณด๋“œ โ€” Spring Boot 3 + Vue 3 ํ’€์Šคํƒ ํ”„๋กœ์ ํŠธ

https://smartfactory-bms-project.vercel.app/login


๋ชฉ์ฐจ

  1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
  2. ์ฃผ์š” ๊ธฐ๋Šฅ
  3. ๊ธฐ์ˆ  ์Šคํƒ
  4. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ
  5. ๋กœ์ปฌ ์‹คํ–‰
  6. ํ™˜๊ฒฝ ๋ณ€์ˆ˜
  7. API ์—”๋“œํฌ์ธํŠธ
  8. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ
  9. ์ฐจ๋Ÿ‰ ์ƒํƒœ ํ๋ฆ„
  10. LLM ์ฑ—๋ด‡
  11. ๋ฐฐํฌ

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

์ „๊ธฐ์ฐจ ๋ฐฐํ„ฐ๋ฆฌ ํ’ˆ์งˆ๊ฒ€์‚ฌ ๊ณต์ •์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๋Œ€์‹œ๋ณด๋“œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ž…๋‹ˆ๋‹ค.


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

์‹ค์‹œ๊ฐ„ ๋Œ€์‹œ๋ณด๋“œ

  • ์ฐจ๋Ÿ‰ ์ƒํƒœ๋ณ„ ํ†ต๊ณ„ (์ „์ฒด / ๊ฒ€์‚ฌ ์ค‘ / ์ด์ƒ ๊ฐ์ง€ / ์ถœ๊ณ  ์™„๋ฃŒ) โ€” 5์ดˆ ์ž๋™ ๊ฐฑ์‹ 
  • ๊ณต์ • ํŒŒ์ดํ”„๋ผ์ธ ์ง„ํ–‰๋ฅ  ์‹œ๊ฐํ™” (์ž…๊ณ  โ†’ ๊ฒ€์‚ฌ โ†’ ์ถœ๊ณ )
  • ์ตœ๊ทผ ๋ฏธํ•ด๊ฒฐ ๊ฒฝ๋ณด ์š”์•ฝ
  • ๊ณต์žฅ๋ณ„ ํ•„ํ„ฐ๋ง (๋ณต์ˆ˜ ์„ ํƒ ๊ฐ€๋Šฅ)

์ฐจ๋Ÿ‰ ๊ด€๋ฆฌ

  • ์ฐจ๋Ÿ‰ ๋ชฉ๋ก ์กฐํšŒ ๋ฐ ๊ฒ€์ƒ‰ (๋ชจ๋ธยท์ƒํƒœยท์ˆ˜์ถœ๊ตญยท๋‚ ์งœ ํ•„ํ„ฐ, ์ตœ๋Œ€ 500๊ฑด)
  • ์ฐจ๋Ÿ‰ ์ƒ์„ธ ํŽ˜์ด์ง€
    • ๋ฐฐํ„ฐ๋ฆฌ ์ธก์ •๊ฐ’ (SOC, SOH, SOP, ์ „์••, ์˜จ๋„)
    • ๋ฐฐํ„ฐ๋ฆฌ ์…€ ์˜จ๋„ ํžˆํŠธ๋งต ์‹œ๊ฐํ™”
    • ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ ํƒ€์ž„๋ผ์ธ (๊ฐ ๊ฒ€์‚ฌ ์‹œ์ž‘/์ข…๋ฃŒ ์‹œ๊ฐ„)
    • ๊ฒฝ๋ณด ๋ชฉ๋ก ๋ฐ ์ƒํƒœ ๋ณ€๊ฒฝ ์ด๋ ฅ

๊ฒฝ๋ณด ๊ด€๋ฆฌ

  • ๊ฒฝ๋ณด ๋ชฉ๋ก ์กฐํšŒ ๋ฐ ํ•„ํ„ฐ๋ง (์‹ฌ๊ฐ๋„ยทํƒ€์ž…ยท๋ชจ๋ธ)
  • ๊ฒฝ๋ณด ์ƒํƒœ ๋ณ€๊ฒฝ: ํ™•์ธ(acknowledge) / ํ•ด์ œ(resolve) / ์ผ๊ด„ ์‚ญ์ œ
  • ์ฝ์ง€ ์•Š์€ ๊ฒฝ๋ณด ์ˆ˜ ๋ฐฐ์ง€ (ํ—ค๋”์— ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ)

LLM ์ฑ—๋ด‡

  • ์šฐํ•˜๋‹จ ๋ถ€๋™ํ˜• ์ฑ—๋ด‡ ์œ„์ ฏ
  • RAG Lite ๋ชจ๋“œ: ํ˜„์žฌ DB ํ†ต๊ณ„๋ฅผ ์ปจํ…์ŠคํŠธ๋กœ ์ œ๊ณต ํ›„ LLM์ด ์ž์—ฐ์–ด ๋‹ต๋ณ€
  • Text-to-SQL ๋ชจ๋“œ: ์ž์—ฐ์–ด ์งˆ๋ฌธ โ†’ LLM์ด SQL ์ž๋™ ์ƒ์„ฑ โ†’ DB ์‹คํ–‰ โ†’ ๊ฒฐ๊ณผ ํ•ด์„
  • ๋Œ€ํ™” ๊ธฐ๋ฐ˜ ๋ฆฌํฌํŠธ ์ž๋™ ์ƒ์„ฑ ๋ฐ ์ €์žฅ
  • LM Studio(๋กœ์ปฌ) / OpenAI / Google Gemini ์ง€์›

์„ค์ • ๊ด€๋ฆฌ (๊ด€๋ฆฌ์ž ์ „์šฉ)

  • ์ฐจ๋Ÿ‰ ์ž๋™ ์ƒ์„ฑ ๊ฐ„๊ฒฉ (ms) ์กฐ์ •
  • ๊ฒ€์‚ฌ ๋‹จ๊ณ„๋ณ„ ์†Œ์š” ์‹œ๊ฐ„ (ms) ์กฐ์ •
  • ๊ฒ€์‚ฌ ๋‹จ๊ณ„๋ณ„ ์„ฑ๊ณต ํ™•๋ฅ  (%) ์กฐ์ •
  • LLM ์ œ๊ณต์ž / ๋ชจ๋ธ / API ํ‚ค ์„ค์ •

์‚ฌ์šฉ์ž ๊ด€๋ฆฌ (๊ด€๋ฆฌ์ž ์ „์šฉ)

  • ์‚ฌ์šฉ์ž ๋ชฉ๋ก ์กฐํšŒ
  • ์—ญํ•  ๋ณ€๊ฒฝ (admin / operator)
  • ์‚ฌ์šฉ์ž ์‚ญ์ œ

๋‹ค๊ตญ์–ด & ํ…Œ๋งˆ

  • ํ•œ๊ตญ์–ด / ์˜์–ด ์ „ํ™˜ (vue-i18n, ๋กœ์ปฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅ)
  • ๋‹คํฌ / ๋ผ์ดํŠธ ๋ชจ๋“œ ์ „ํ™˜ (Tailwind CSS)

๊ธฐ์ˆ  ์Šคํƒ

๋ฐฑ์—”๋“œ

ํ•ญ๋ชฉ ๋ฒ„์ „
Java 17
Spring Boot 3.3.4
Spring MVC + JdbcTemplate โ€”
MySQL Connector/J 8.0+
JJWT 0.12.6
Spring Security Crypto (BCrypt) โ€”
Maven 3.9+

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

ํ•ญ๋ชฉ ๋ฒ„์ „
Vue 3.4.21
Vue Router 4.3.2
Pinia 2.2.0
Vue i18n 9.14.5
Vite 5.2.8
Tailwind CSS 3.4.3

์ธํ”„๋ผ

ํ•ญ๋ชฉ ์„œ๋น„์Šค
ํ”„๋ก ํŠธ์—”๋“œ ๋ฐฐํฌ Vercel Hobby
๋ฐฑ์—”๋“œ ๋ฐฐํฌ Render Free Web (Docker)
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค MySQL
CI/CD GitHub Actions

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

04_BMS_SF_ver02/
โ”œโ”€โ”€ backend/
โ”‚   โ”œโ”€โ”€ Dockerfile                   # ๋ฉ€ํ‹ฐ์Šคํ…Œ์ด์ง€ Docker ๋นŒ๋“œ
โ”‚   โ”œโ”€โ”€ pom.xml
โ”‚   โ””โ”€โ”€ src/main/java/com/evernex/bms/
โ”‚       โ”œโ”€โ”€ BmsApplication.java
โ”‚       โ”œโ”€โ”€ config/                  # CORS ์„ค์ • (WebConfig)
โ”‚       โ”œโ”€โ”€ controller/              # REST API ์ปจํŠธ๋กค๋Ÿฌ 9๊ฐœ
โ”‚       โ”‚   โ”œโ”€โ”€ AuthController       # ๋กœ๊ทธ์ธ / ํšŒ์›๊ฐ€์ž… / ๋‚ด ์ •๋ณด
โ”‚       โ”‚   โ”œโ”€โ”€ DashboardController  # ์‹ค์‹œ๊ฐ„ ํ†ต๊ณ„
โ”‚       โ”‚   โ”œโ”€โ”€ VehiclesController   # ์ฐจ๋Ÿ‰ CRUD + ์ƒ์„ธ ์กฐํšŒ
โ”‚       โ”‚   โ”œโ”€โ”€ AlertsController     # ๊ฒฝ๋ณด ๊ด€๋ฆฌ
โ”‚       โ”‚   โ”œโ”€โ”€ ChatController       # LLM ์ฑ—๋ด‡ + ๋ฆฌํฌํŠธ ์ƒ์„ฑ
โ”‚       โ”‚   โ”œโ”€โ”€ ReportsController    # ์ €์žฅ๋œ ๋ฆฌํฌํŠธ ์กฐํšŒ/์‚ญ์ œ
โ”‚       โ”‚   โ”œโ”€โ”€ SettingsController   # ๊ด€๋ฆฌ ์„ค์ •
โ”‚       โ”‚   โ”œโ”€โ”€ UsersController      # ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ
โ”‚       โ”‚   โ””โ”€โ”€ HealthController     # ํ—ฌ์Šค ์ฒดํฌ
โ”‚       โ”œโ”€โ”€ service/
โ”‚       โ”‚   โ”œโ”€โ”€ SimulationService    # 500ms ์Šค์ผ€์ค„ ์ƒํƒœ๋จธ์‹ 
โ”‚       โ”‚   โ”œโ”€โ”€ VehicleFactoryService # ์ฐจ๋Ÿ‰ ์ž๋™ ์ƒ์„ฑ
โ”‚       โ”‚   โ”œโ”€โ”€ ChatService          # RAG Lite / Text-to-SQL ์ฒ˜๋ฆฌ
โ”‚       โ”‚   โ”œโ”€โ”€ LlmClient            # OpenAI / Gemini / LM Studio ์—ฐ๋™
โ”‚       โ”‚   โ”œโ”€โ”€ SettingsService      # ์„ค์ • CRUD
โ”‚       โ”‚   โ””โ”€โ”€ RandomMetricService  # ์‹œ๋ฎฌ๋ ˆ์ด์…˜์šฉ ๋‚œ์ˆ˜ ์ƒ์„ฑ
โ”‚       โ”œโ”€โ”€ security/
โ”‚       โ”‚   โ”œโ”€โ”€ JwtUtil              # JWT ์ƒ์„ฑยท๊ฒ€์ฆ (HS256)
โ”‚       โ”‚   โ”œโ”€โ”€ JwtAuthFilter        # Spring ํ•„ํ„ฐ ์ฒด์ธ ์ธ์ฆ
โ”‚       โ”‚   โ”œโ”€โ”€ AuthContext          # ์Šค๋ ˆ๋“œ๋กœ์ปฌ ์‚ฌ์šฉ์ž ์ •๋ณด
โ”‚       โ”‚   โ”œโ”€โ”€ AuthPrincipal        # ์‚ฌ์šฉ์ž ๊ถŒํ•œ ๋ชจ๋ธ
โ”‚       โ”‚   โ””โ”€โ”€ GlobalExceptionHandler
โ”‚       โ”œโ”€โ”€ db/
โ”‚       โ”‚   โ”œโ”€โ”€ SchemaInitializer    # ์•ฑ ์‹œ์ž‘ ์‹œ ํ…Œ์ด๋ธ” ์ž๋™ ์ƒ์„ฑ
โ”‚       โ”‚   โ”œโ”€โ”€ DataSeeder           # ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
โ”‚       โ”‚   โ”œโ”€โ”€ FactoryScope         # ๊ณต์žฅ ๊ถŒํ•œ ํ•„ํ„ฐ๋ง
โ”‚       โ”‚   โ””โ”€โ”€ TimeUtil
โ”‚       โ””โ”€โ”€ domain/
โ”‚           โ””โ”€โ”€ Constants            # ์ฐจ๋Ÿ‰ ์ƒํƒœ, ๋ชจ๋ธ๋ช…, ๊ณต์žฅ ์ƒ์ˆ˜
โ”‚
โ”œโ”€โ”€ frontend/
โ”‚   โ”œโ”€โ”€ vercel.json                  # SPA ๋ผ์šฐํŒ… ์„ค์ •
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ views/                   # ํŽ˜์ด์ง€ ์ปดํฌ๋„ŒํŠธ 9๊ฐœ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Dashboard.vue
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ VehicleList.vue
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ VehicleDetail.vue
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Alerts.vue
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Reports.vue
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Settings.vue
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Users.vue
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Login.vue
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ Signup.vue
โ”‚   โ”‚   โ”œโ”€โ”€ components/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Chatbot.vue          # ๋ถ€๋™ํ˜• LLM ์ฑ—๋ด‡ ์œ„์ ฏ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ CellHeatmap.vue      # ๋ฐฐํ„ฐ๋ฆฌ ์…€ ์˜จ๋„ ํžˆํŠธ๋งต
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ Gauge.vue            # SOC/SOH/์˜จ๋„ ๊ฒŒ์ด์ง€ ์ฐจํŠธ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ ProcessTimeline.vue  # ์ฒ˜๋ฆฌ ๋‹จ๊ณ„ ํƒ€์ž„๋ผ์ธ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ FactoryFilter.vue    # ๊ณต์žฅ ๋‹ค์ค‘ ์„ ํƒ ํ•„ํ„ฐ
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ MultiSelect.vue      # ๋ฒ”์šฉ ๋‹ค์ค‘ ์„ ํƒ ๋“œ๋กญ๋‹ค์šด
โ”‚   โ”‚   โ”œโ”€โ”€ layouts/
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ AppLayout.vue        # ์‚ฌ์ด๋“œ๋ฐ” + ํ—ค๋” ๋ ˆ์ด์•„์›ƒ
โ”‚   โ”‚   โ”œโ”€โ”€ stores/                  # Pinia ์ƒํƒœ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ auth.js              # ๋กœ๊ทธ์ธ / ์‚ฌ์šฉ์ž ์ •๋ณด
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ filters.js           # ๊ณต์žฅ ํ•„ํ„ฐ ์ƒํƒœ
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ alerts.js            # ๋ฏธํ•ด๊ฒฐ ๊ฒฝ๋ณด ์นด์šดํŠธ
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ theme.js             # ๋‹คํฌ / ๋ผ์ดํŠธ ๋ชจ๋“œ
โ”‚   โ”‚   โ”œโ”€โ”€ composables/
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ api.js               # HTTP ํด๋ผ์ด์–ธํŠธ (JWT ์ž๋™ ์ฒจ๋ถ€, 401 ์ž๋™ ๋กœ๊ทธ์•„์›ƒ)
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ status.js            # ์ƒํƒœ๋ณ„ ์ƒ‰์ƒยท๋ผ๋ฒจ ๋งคํ•‘
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ labels.js            # ๋ชจ๋ธ๋ช…ยท๊ณต์žฅยท๊ตญ๊ฐ€ ๋ผ๋ฒจ
โ”‚   โ”‚   โ”œโ”€โ”€ router/index.js          # Vue Router (์ธ์ฆ ๊ฐ€๋“œ)
โ”‚   โ”‚   โ””โ”€โ”€ i18n/
โ”‚   โ”‚       โ””โ”€โ”€ locales/
โ”‚   โ”‚           โ”œโ”€โ”€ ko.js            # ํ•œ๊ตญ์–ด ๋ฉ”์‹œ์ง€
โ”‚   โ”‚           โ””โ”€โ”€ en.js            # ์˜์–ด ๋ฉ”์‹œ์ง€
โ”‚
โ”œโ”€โ”€ sql/
โ”‚   โ”œโ”€โ”€ schema.sql                   # MySQL DDL (ํ”„๋กœ๋•์…˜ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ฐธ๊ณ ์šฉ)
โ”‚   โ””โ”€โ”€ seed.sql                     # ์ดˆ๊ธฐ ๋ฐ์ดํ„ฐ
โ”‚
โ”œโ”€โ”€ .github/workflows/
โ”‚   โ”œโ”€โ”€ backend-ci.yml               # Maven ๋นŒ๋“œ + Docker ๋นŒ๋“œ ๊ฒ€์ฆ
โ”‚   โ””โ”€โ”€ frontend-ci.yml              # npm ci + Vite ๋นŒ๋“œ ๊ฒ€์ฆ
โ”‚
โ”œโ”€โ”€ render.yaml                      # Render Blueprint ์„ค์ •
โ”œโ”€โ”€ DEPLOYMENT.md                    # Vercel + Render ๋ฐฐํฌ ๋‹จ๊ณ„๋ณ„ ๊ฐ€์ด๋“œ
โ””โ”€โ”€ README.md

๋กœ์ปฌ ์‹คํ–‰

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

  • Java 17+
  • Maven 3.9+
  • Node.js 20+
  • (์„ ํƒ) LM Studio โ€” ์ฑ—๋ด‡ ๊ธฐ๋Šฅ ๋กœ์ปฌ ํ…Œ์ŠคํŠธ ์‹œ

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

๋ฐฑ์—”๋“œ

๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
PORT 3000 HTTP ์„œ๋ฒ„ ํฌํŠธ
DB_URL jdbc:mysql://localhost:3306/bms MySQL ์—ฐ๊ฒฐ URL
DB_USERNAME root DB ์‚ฌ์šฉ์ž๋ช…
DB_PASSWORD DB ๋น„๋ฐ€๋ฒˆํ˜ธ
JWT_SECRET (๊ฐœ๋ฐœ์šฉ ๊ธฐ๋ณธ๊ฐ’) JWT ์„œ๋ช… ํ‚ค โ€” ์šด์˜ ์‹œ 32์ž+ ๋žœ๋ค ๋ฌธ์ž์—ด๋กœ ๊ต์ฒด
LLM_BASE_URL http://127.0.0.1:1234 LM Studio ๋˜๋Š” OpenAI ์—”๋“œํฌ์ธํŠธ
LLM_MODEL local-model ์‚ฌ์šฉํ•  LLM ๋ชจ๋ธ๋ช…

์šด์˜ ๋ฐฐํฌ ์‹œ ์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ๋ณ€์ˆ˜:

๋ณ€์ˆ˜ ์˜ˆ์‹œ ์„ค๋ช…
LLM_API_KEY sk-... OpenAI / Gemini API ํ‚ค (์ฑ—๋ด‡ ์‚ฌ์šฉ ์‹œ)

ํ”„๋ก ํŠธ์—”๋“œ (.env)

๋ณ€์ˆ˜ ๊ธฐ๋ณธ๊ฐ’ ์„ค๋ช…
VITE_API_BASE_URL http://localhost:3000/api/v1 ๋ฐฑ์—”๋“œ API ๋ฒ ์ด์Šค URL

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

๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ๋Š” /api/v1 ์ ‘๋‘์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
/auth/login, /auth/signup์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์š”์ฒญ์— Authorization: Bearer <token> ํ—ค๋”๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์—๋Ÿฌ ์‘๋‹ต ํ˜•์‹: { "error": "<message>", "detail": "<optional>" }

์ธ์ฆ

๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์„ค๋ช…
POST /auth/login ๋กœ๊ทธ์ธ โ†’ JWT + ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ˜ํ™˜
POST /auth/signup ํšŒ์›๊ฐ€์ž… (operator ์—ญํ• ๋กœ ์ƒ์„ฑ)
GET /auth/me ํ˜„์žฌ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž ์ •๋ณด

๋Œ€์‹œ๋ณด๋“œ

๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์„ค๋ช…
GET /dashboard/stats ์‹ค์‹œ๊ฐ„ ์ฐจ๋Ÿ‰ ์ƒํƒœ ์ง‘๊ณ„, ๊ฒฝ๋ณด ์š”์•ฝ (?factory_ids=1,2)

์ฐจ๋Ÿ‰

๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์„ค๋ช…
GET /vehicles ๋ชฉ๋ก ์กฐํšŒ (๋ชจ๋ธยท์ƒํƒœยท๊ตญ๊ฐ€ยท๋‚ ์งœ ํ•„ํ„ฐ)
POST /vehicles ์ฐจ๋Ÿ‰ ์ˆ˜๋™ ์ƒ์„ฑ
GET /vehicles/:carId ์ƒ์„ธ ์กฐํšŒ (๋ฐฐํ„ฐ๋ฆฌ, ์…€, ์ด๋ ฅ, ๊ฒฝ๋ณด)
PUT /vehicles/:carId ์ฐจ๋Ÿ‰ ์ •๋ณด ์ˆ˜์ •
DELETE /vehicles/:carId ์‚ญ์ œ
POST /vehicles/:carId/resolve ์ฐจ๋Ÿ‰ ๊ฒฝ๋ณด ์ผ๊ด„ ํ•ด์ œ

๊ฒฝ๋ณด

๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์„ค๋ช…
GET /alerts ๋ชฉ๋ก ์กฐํšŒ (์‹ฌ๊ฐ๋„ยทํƒ€์ž…ยท๋ชจ๋ธยท์ƒํƒœ ํ•„ํ„ฐ)
GET /alerts/facets ํ•„ํ„ฐ ์„ ํƒ์ง€ ๋ฐ˜ํ™˜
GET /alerts/unresolved-count ๋ฏธํ•ด๊ฒฐ ๊ฒฝ๋ณด ์ˆ˜
POST /alerts/:id/acknowledge ๊ฒฝ๋ณด ํ™•์ธ ์ฒ˜๋ฆฌ
POST /alerts/:id/resolve ๊ฒฝ๋ณด ํ•ด์ œ
POST /alerts/bulk-delete ๋‹ค์ค‘ ์‚ญ์ œ

์ฑ—๋ด‡ & ๋ฆฌํฌํŠธ

๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์„ค๋ช…
POST /chat ์ž์—ฐ์–ด ์งˆ๋ฌธ โ†’ LLM ๋‹ต๋ณ€ (RAG Lite / Text-to-SQL)
POST /chat/report ๋Œ€ํ™” ๋‚ด์šฉ ๊ธฐ๋ฐ˜ ๋ฆฌํฌํŠธ ์ƒ์„ฑ ๋ฐ DB ์ €์žฅ
GET /reports ์ €์žฅ๋œ ๋ฆฌํฌํŠธ ๋ชฉ๋ก
GET /reports/:id ๋ฆฌํฌํŠธ ์ƒ์„ธ (๋ฉ”์‹œ์ง€, SQL, ๋ฐ์ดํ„ฐ ํฌํ•จ)
DELETE /reports/:id ๋ฆฌํฌํŠธ ์‚ญ์ œ

์„ค์ • & ์‚ฌ์šฉ์ž (๊ด€๋ฆฌ์ž ์ „์šฉ)

๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์„ค๋ช…
GET /settings ์ „์ฒด ์„ค์ • ์กฐํšŒ
PUT /settings/:key ์„ค์ •๊ฐ’ ๋ณ€๊ฒฝ
GET /settings/factories ๊ณต์žฅ ๋ชฉ๋ก
GET /settings/factories/all ์ „์ฒด ๊ณต์žฅ ๋ชฉ๋ก (๋น„ํ™œ์„ฑ ํฌํ•จ)
GET /settings/countries ์ˆ˜์ถœ๊ตญ ๋ชฉ๋ก
PUT /settings/countries/:id ์ˆ˜์ถœ๊ตญ ํ—ˆ์šฉ ์—ฌ๋ถ€ ๋ณ€๊ฒฝ
GET /users ์‚ฌ์šฉ์ž ๋ชฉ๋ก
PUT /users/:id ์—ญํ•  ๋ณ€๊ฒฝ
DELETE /users/:id ์‚ฌ์šฉ์ž ์‚ญ์ œ

ํ—ฌ์Šค ์ฒดํฌ

๋ฉ”์„œ๋“œ ๊ฒฝ๋กœ ์„ค๋ช…
GET /health ์„œ๋ฒ„ ์ƒํƒœ ํ™•์ธ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ

MySQL์„ ์‚ฌ์šฉํ•˜๋ฉฐ sql/schema.sql์˜ DDL๋กœ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ํ…Œ์ด๋ธ” (16๊ฐœ)

ํ…Œ์ด๋ธ” ์„ค๋ช…
users ์‚ฌ์šฉ์ž (user_id, email, password_hash, role, name)
factories 6๊ฐœ ๊ณต์žฅ ์ •๋ณด (์ฒญ๋ฆผยท์€ํ•˜ยท๋ฐฑ์šดยท๋‹จํ’ยทํƒœ์–‘ยทํ•œ๋น›)
countries ์ˆ˜์ถœ ๋Œ€์ƒ๊ตญ (10๊ฐœ๊ตญ, ํ—ˆ์šฉ ์—ฌ๋ถ€ ๊ด€๋ฆฌ)
cars ์ฐจ๋Ÿ‰ (๋ชจ๋ธ๋ช…, ๊ณต์žฅ, ๋ชฉ์ ์ง€ ๊ตญ๊ฐ€, ํ˜„์žฌ ์ƒํƒœ)
batteries ์ฐจ๋Ÿ‰๋‹น 1๊ฐœ ๋ฐฐํ„ฐ๋ฆฌ (์‹œ๋ฆฌ์–ผ, ์ œ์กฐ์ผ)
battery_measurements ๋ฐฐํ„ฐ๋ฆฌ ์ธก์ •๊ฐ’ (SOC, SOH, SOP, ์ „์••, ์˜จ๋„)
battery_cells ๋ฐฐํ„ฐ๋ฆฌ ์…€ ๋ชฉ๋ก (์…€ ๋ฒˆํ˜ธ)
battery_cell_measurements ์…€๋ณ„ ์˜จ๋„ยท์ „์•• ์ธก์ •๊ฐ’
car_status_histories ์ฐจ๋Ÿ‰ ์ƒํƒœ ๋ณ€๊ฒฝ ์ด๋ ฅ
alerts ๊ฒฝ๋ณด (ํƒ€์ž…, ์‹ฌ๊ฐ๋„, ํ˜„์žฌ ์ƒํƒœ)
alert_status_histories ๊ฒฝ๋ณด ์ƒํƒœ ๋ณ€๊ฒฝ ์ด๋ ฅ
process_step_histories ๊ฒ€์‚ฌ ๋‹จ๊ณ„๋ณ„ ์ง„ํ–‰ ๊ธฐ๋ก (์‹œ์ž‘/์ข…๋ฃŒ ์‹œ๊ฐ„)
inspection_results ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ ์š”์•ฝ
admin_settings ์šด์˜ ์„ค์ • (๊ฒ€์‚ฌ ์‹œ๊ฐ„, ํ™•๋ฅ , LLM ์„ค์ • ๋“ฑ)
llm_chat_logs LLM ๋Œ€ํ™” ๊ธฐ๋ก
reports ์ƒ์„ฑ๋œ ๋ฆฌํฌํŠธ

์ฐจ๋Ÿ‰ ์ƒํƒœ ํ๋ฆ„

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์„œ๋น„์Šค(SimulationService)๊ฐ€ @Scheduled(fixedDelay=500) ์œผ๋กœ 500ms๋งˆ๋‹ค ์ƒํƒœ๋ฅผ ์ „์ด์‹œํ‚ต๋‹ˆ๋‹ค.

ARRIVAL (์ž…๊ณ )
    โ”‚
    โ–ผ  6๋‹จ๊ณ„ ๊ฒ€์‚ฌ
BATTERY_INSPECTION โ”€โ”€โ”€ ์ด์ƒ ๊ฐ์ง€ โ”€โ”€โ–บ ANOMALY_DETECTED
CELL_INSPECTION                              โ”‚
    โ”‚ ํ†ต๊ณผ                           QA_MAINTENANCE
    โ”‚                                        โ”‚
    โ”‚                          RE_INSPECTION_WAITING
    โ”‚                          RE_INSPECTION
    โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ ์žฌ๊ฒ€์‚ฌ ํ†ต๊ณผ
    โ”‚
BATTERY_QC_COMPLETE
    โ”‚
SHIPMENT_WAITING
    โ”‚
SHIPMENT_COMPLETE (์ถœ๊ณ  ์™„๋ฃŒ)

๋ฐฐํ„ฐ๋ฆฌ ๊ฒ€์‚ฌ 6๋‹จ๊ณ„

๋‹จ๊ณ„ ํ•ญ๋ชฉ ์„ค๋ช…
1 SOC_CHECK ์ถฉ์ „ ์ƒํƒœ (State of Charge)
2 SOH_CHECK ๋ฐฐํ„ฐ๋ฆฌ ๊ฑด๊ฐ•๋„ (State of Health)
3 SOP_CHECK ์ „๋ ฅ ์ƒํƒœ (State of Power)
4 PACK_VOLTAGE_CHECK ํŒฉ ์ „์••
5 CELL_TEMPERATURE_CHECK ์…€ ์˜จ๋„
6 CELL_VOLTAGE_CHECK ์…€ ์ „์••

๊ฐ ๋‹จ๊ณ„์˜ ์†Œ์š” ์‹œ๊ฐ„(ms)๊ณผ ์„ฑ๊ณต ํ™•๋ฅ (%)์€ Settings ํŽ˜์ด์ง€์—์„œ ์‹ค์‹œ๊ฐ„ ์กฐ์ • ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


LLM ์ฑ—๋ด‡

์ง€์› ์ œ๊ณต์ž

์ œ๊ณต์ž llm_provider ๊ฐ’ ๋น„๊ณ 
LM Studio (๋กœ์ปฌ) lm_studio ์ธํ„ฐ๋„ท ๋ถˆํ•„์š”, ๊ธฐ๋ณธ๊ฐ’
OpenAI openai API ํ‚ค ํ•„์š”
Google Gemini gemini API ํ‚ค ํ•„์š”

๋™์ž‘ ๋ชจ๋“œ

RAG Lite (rag_lite)

  • DB์—์„œ ์ „์ฒด ํ†ต๊ณ„, ๋ฏธํ•ด๊ฒฐ ๊ฒฝ๋ณด, ํ‚ค์›Œ๋“œ ๊ธฐ๋ฐ˜ ์ฐจ๋Ÿ‰ ๋ชฉ๋ก์„ JSON์œผ๋กœ ์ถ”์ถœ
  • LLM์— ์ปจํ…์ŠคํŠธ์™€ ํ•จ๊ป˜ ์งˆ๋ฌธ์„ ์ „๋‹ฌํ•˜์—ฌ ์ž์—ฐ์–ด ๋‹ต๋ณ€ ์ƒ์„ฑ

Text-to-SQL (text_to_sql)

  1. ์ž์—ฐ์–ด ์งˆ๋ฌธ โ†’ LLM์ด MySQL SELECT ๋ฌธ ์ƒ์„ฑ
  2. SQL ๊ฒ€์ฆ (SELECT๋งŒ ํ—ˆ์šฉ, ํ…Œ์ด๋ธ” ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ, ๊ณต์žฅ ๊ถŒํ•œ ํ•„ํ„ฐ ์ž๋™ ์‚ฝ์ž…)
  3. DB ์‹คํ–‰ โ†’ ๊ฒฐ๊ณผ๋ฅผ LLM์ด ๋‹ค์‹œ ์ž์—ฐ์–ด๋กœ ํ•ด์„

๋ฆฌํฌํŠธ ์ƒ์„ฑ

์ฑ—๋ด‡ ๋Œ€ํ™”์ฐฝ์˜ ๋ฆฌํฌํŠธ ์ƒ์„ฑ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ:

  • ๋Œ€ํ™” ๋‚ด์šฉ ์ „์ฒด๋ฅผ LLM์— ์ „๋‹ฌํ•˜์—ฌ ๊ตฌ์กฐํ™”๋œ ๋ฆฌํฌํŠธ ์ƒ์„ฑ
  • ์ €์žฅ ํ•ญ๋ชฉ: ์ œ๋ชฉ, ์š”์•ฝ, ํ•ต์‹ฌ ๋ฐœ๊ฒฌ์‚ฌํ•ญ, ๊ถŒ์žฅ ์กฐ์น˜, ๋ฐ์ดํ„ฐ ๊ทผ๊ฑฐ
  • Reports ํŽ˜์ด์ง€์—์„œ ์ €์žฅ๋œ ๋ฆฌํฌํŠธ ์กฐํšŒยท์‚ญ์ œ ๊ฐ€๋Šฅ

์ฑ—๋ด‡ ์„ค์ • ๋ฐฉ๋ฒ•

  1. Settings ํŽ˜์ด์ง€(๊ด€๋ฆฌ์ž) โ†’ LLM ์„น์…˜์—์„œ ์ œ๊ณต์ž/๋ชจ๋ธ/APIํ‚ค ์„ค์ •
  2. ๋˜๋Š” Render ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ง์ ‘ ์„ค์ •:
    LLM_BASE_URL=https://api.openai.com
    LLM_MODEL=gpt-4o-mini
    LLM_API_KEY=sk-...
    

๋ฐฐํฌ

Vercel(ํ”„๋ก ํŠธ์—”๋“œ) + Render(๋ฐฑ์—”๋“œ) ์‚ฌ์šฉ

๋น ๋ฅธ ์š”์•ฝ

1. Render โ†’ New โ†’ Blueprint โ†’ ์ด ์ €์žฅ์†Œ ์—ฐ๊ฒฐ
   โ†’ render.yaml ์ž๋™ ๊ฐ์ง€ โ†’ bms-backend ๋ฐฐํฌ

2. Vercel โ†’ New Project โ†’ ์ด ์ €์žฅ์†Œ Import
   โ†’ Root Directory: frontend
   โ†’ ํ™˜๊ฒฝ ๋ณ€์ˆ˜: VITE_API_BASE_URL = https://<render-url>/api/v1
   โ†’ Deploy

๊ถŒํ•œ ์ฒด๊ณ„

์—ญํ•  ์ ‘๊ทผ ๋ฒ”์œ„
admin ๋ชจ๋“  ๊ณต์žฅ ๋ฐ์ดํ„ฐ + ์‚ฌ์šฉ์žยท์„ค์ • ๊ด€๋ฆฌ
operator ํ• ๋‹น๋œ ๊ณต์žฅ ๋ฐ์ดํ„ฐ๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ (๊ด€๋ฆฌ ๊ธฐ๋Šฅ ์ ‘๊ทผ ๋ถˆ๊ฐ€)

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages