EverNex BMS Smart Factory
๋ฐฐํฐ๋ฆฌ ๊ด๋ฆฌ ์์คํ
(BMS) ํ์ง๊ฒ์ฌ ๋์๋ณด๋ โ Spring Boot 3 + Vue 3 ํ์คํ ํ๋ก์ ํธ
https://smartfactory-bms-project.vercel.app/login
ํ๋ก์ ํธ ๊ฐ์
์ฃผ์ ๊ธฐ๋ฅ
๊ธฐ์ ์คํ
ํ๋ก์ ํธ ๊ตฌ์กฐ
๋ก์ปฌ ์คํ
ํ๊ฒฝ ๋ณ์
API ์๋ํฌ์ธํธ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง
์ฐจ๋ ์ํ ํ๋ฆ
LLM ์ฑ๋ด
๋ฐฐํฌ
์ ๊ธฐ์ฐจ ๋ฐฐํฐ๋ฆฌ ํ์ง๊ฒ์ฌ ๊ณต์ ์ ์๋ฎฌ๋ ์ด์
ํ๊ณ ๋ชจ๋ํฐ๋งํ๋ ๋์๋ณด๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์
๋๋ค.
์ฐจ๋ ์ํ๋ณ ํต๊ณ (์ ์ฒด / ๊ฒ์ฌ ์ค / ์ด์ ๊ฐ์ง / ์ถ๊ณ ์๋ฃ) โ 5์ด ์๋ ๊ฐฑ์
๊ณต์ ํ์ดํ๋ผ์ธ ์งํ๋ฅ ์๊ฐํ (์
๊ณ โ ๊ฒ์ฌ โ ์ถ๊ณ )
์ต๊ทผ ๋ฏธํด๊ฒฐ ๊ฒฝ๋ณด ์์ฝ
๊ณต์ฅ๋ณ ํํฐ๋ง (๋ณต์ ์ ํ ๊ฐ๋ฅ)
์ฐจ๋ ๋ชฉ๋ก ์กฐํ ๋ฐ ๊ฒ์ (๋ชจ๋ธยท์ํยท์์ถ๊ตญยท๋ ์ง ํํฐ, ์ต๋ 500๊ฑด)
์ฐจ๋ ์์ธ ํ์ด์ง
๋ฐฐํฐ๋ฆฌ ์ธก์ ๊ฐ (SOC, SOH, SOP, ์ ์, ์จ๋)
๋ฐฐํฐ๋ฆฌ ์
์จ๋ ํํธ๋งต ์๊ฐํ
์ฒ๋ฆฌ ๋จ๊ณ ํ์๋ผ์ธ (๊ฐ ๊ฒ์ฌ ์์/์ข
๋ฃ ์๊ฐ)
๊ฒฝ๋ณด ๋ชฉ๋ก ๋ฐ ์ํ ๋ณ๊ฒฝ ์ด๋ ฅ
๊ฒฝ๋ณด ๋ชฉ๋ก ์กฐํ ๋ฐ ํํฐ๋ง (์ฌ๊ฐ๋ยทํ์
ยท๋ชจ๋ธ)
๊ฒฝ๋ณด ์ํ ๋ณ๊ฒฝ: ํ์ธ(acknowledge) / ํด์ (resolve) / ์ผ๊ด ์ญ์
์ฝ์ง ์์ ๊ฒฝ๋ณด ์ ๋ฐฐ์ง (ํค๋์ ์ค์๊ฐ ํ์)
์ฐํ๋จ ๋ถ๋ํ ์ฑ๋ด ์์ ฏ
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 ํค (์ฑ๋ด ์ฌ์ฉ ์)
๋ณ์
๊ธฐ๋ณธ๊ฐ
์ค๋ช
VITE_API_BASE_URL
http://localhost:3000/api/v1
๋ฐฑ์๋ API ๋ฒ ์ด์ค URL
๋ชจ๋ ์๋ํฌ์ธํธ๋ /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๋ก ํ
์ด๋ธ์ ์์ฑํฉ๋๋ค.
ํ
์ด๋ธ
์ค๋ช
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 (์ถ๊ณ ์๋ฃ)
๋จ๊ณ
ํญ๋ชฉ
์ค๋ช
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_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)
์์ฐ์ด ์ง๋ฌธ โ LLM์ด MySQL SELECT ๋ฌธ ์์ฑ
SQL ๊ฒ์ฆ (SELECT๋ง ํ์ฉ, ํ
์ด๋ธ ํ์ดํธ๋ฆฌ์คํธ, ๊ณต์ฅ ๊ถํ ํํฐ ์๋ ์ฝ์
)
DB ์คํ โ ๊ฒฐ๊ณผ๋ฅผ LLM์ด ๋ค์ ์์ฐ์ด๋ก ํด์
์ฑ๋ด ๋ํ์ฐฝ์ ๋ฆฌํฌํธ ์์ฑ ๋ฒํผ ํด๋ฆญ ์:
๋ํ ๋ด์ฉ ์ ์ฒด๋ฅผ LLM์ ์ ๋ฌํ์ฌ ๊ตฌ์กฐํ๋ ๋ฆฌํฌํธ ์์ฑ
์ ์ฅ ํญ๋ชฉ: ์ ๋ชฉ, ์์ฝ, ํต์ฌ ๋ฐ๊ฒฌ์ฌํญ, ๊ถ์ฅ ์กฐ์น, ๋ฐ์ดํฐ ๊ทผ๊ฑฐ
Reports ํ์ด์ง์์ ์ ์ฅ๋ ๋ฆฌํฌํธ ์กฐํยท์ญ์ ๊ฐ๋ฅ
Settings ํ์ด์ง(๊ด๋ฆฌ์) โ LLM ์น์
์์ ์ ๊ณต์/๋ชจ๋ธ/APIํค ์ค์
๋๋ 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
ํ ๋น๋ ๊ณต์ฅ ๋ฐ์ดํฐ๋ง ์กฐํ ๊ฐ๋ฅ (๊ด๋ฆฌ ๊ธฐ๋ฅ ์ ๊ทผ ๋ถ๊ฐ)