π‘ UNOAμ ν λ²μ μ½κ², λνν
λ± λ§κ²
μΆμ²λΆν° λΉκ΅, νν μ 리κΉμ§ ν κ³³μμ λμκ² λ± λ§λ μκΈμ κ΄λ¦¬ λμ°λ―Έμ λλ€.
πνλ Έμ π¨νΌκ·Έλ§ πλ°°ν¬μ¬μ΄νΈ π¨βπ«λ°νμλ£
| κΈ°λ₯ | μ€λͺ |
|---|---|
| μ±λ΄ μ±ν λͺ¨λ | GPT κΈ°λ° μμ°μ΄ μ±λ΄ + μ€μκ° μ€νΈλ¦¬λ° μΆλ ₯ |
| μ±λ΄ κ°λ¨ λͺ¨λ | λ²νΌ μ ν κΈ°λ°μΌλ‘ μμ½λ ν둬ννΈλ₯Ό μμ±ν΄ μκΈμ λ₯Ό μΆμ²νλ κΈ°λ₯ |
| μκΈμ 리μ€νΈ | μΉ΄ν κ³ λ¦¬λ³ λΆλ₯, μ λ ¬/νν° κΈ°λ₯ |
| μκΈμ λΉκ΅ | μκΈμ 2κ° μ ν μ μ¬μ΄λ λΉκ΅μ°½μΌλ‘ λΉκ΅, μκΈμ λΉκ΅ AI μμ½ κΈ°λ₯ |
| λ§μ΄νμ΄μ§ | LG U+ κ°μ
μ : μ¬μ© μκΈμ λ° νν μ 보 μ 곡 LG U+ λ―Έκ°μ μ : μ±λ΄ μλΉμ€ μ λ λ° κ°μ μ λ°μ μ μλ νν μ 보 μ 곡 |
| νμκ°μ /λ‘κ·ΈμΈ | μΉ΄μΉ΄μ€ κ°νΈ λ‘κ·ΈμΈ λ° μ체 κ°μ μ§μ |
| λΉνμ μ κ·Ό | μ±λ΄/리μ€νΈ/λΉκ΅ κΈ°λ₯ λͺ¨λ μ¬μ© κ°λ₯, λ¨ λ§μ΄νμ΄μ§ μ μΈ |
|
κΉνμ°A # λ©μΈνμ΄μ§ |
μ‘μμ¬ # μ±λ΄νμ΄μ§(κ°λ¨λͺ¨λ) |
μ¬μλ―Ό # μ±λ΄νμ΄μ§(μ±ν
λͺ¨λ) |
νμ±ν # μκΈμ νμ΄μ§(리μ€νΈ) |
ν©μ£Όκ²½ # νμκ°μ
/λ‘κ·ΈμΈνμ΄μ§ |
| κΈ°λ₯ | Method | Endpoint | μ€λͺ |
|---|---|---|---|
| μλ² μν νμΈ | GET |
/health |
μλ²μ νμ¬ λμ μνλ₯Ό νμΈν©λλ€. |
| μκΈμ λͺ©λ‘ μ‘°ν | GET |
/plans |
μ±λ΄μ΄ μΆμ²ν μ μλ μ 체 μκΈμ λͺ©λ‘μ κ°μ Έμ΅λλ€. |
| IP κΈ°λ° λν μ‘°ν | GET |
/conversations/ip/:ip |
νΉμ IP μ£Όμ(:ip)λ₯Ό κΈ°μ€μΌλ‘ μ΄μ λν λ΄μμ μ‘°νν©λλ€. |
| μΈμ κΈ°λ° λν μ‘°ν | GET |
/conversations/:sessionId |
νΉμ μΈμ
ID(:sessionId)μ ν΄λΉνλ λν λ΄μμ μ‘°νν©λλ€. |
| κ΄λ¦¬μ ν΅κ³ μ‘°ν | GET |
/admin/stats |
κ΄λ¦¬μ νμ΄μ§μ νμλ ν΅κ³ λ°μ΄ν°λ₯Ό μ‘°νν©λλ€. |
| AI μκΈμ λΉκ΅/μμ½ | POST |
/plans/compare |
μ¬μ©μκ° μ νν μκΈμ λ€μ AIλ₯Ό ν΅ν΄ λΉκ΅νκ³ μμ½λ κ²°κ³Όλ₯Ό μ 곡ν©λλ€. (Request Bodyμ λΉκ΅ν λ°μ΄ν° νμ) |
| κΈ°λ₯ | Method | Endpoint | μ€λͺ |
|---|---|---|---|
| νμκ°μ | POST |
/register |
μλ‘μ΄ μ¬μ©μλ₯Ό λ±λ‘ν©λλ€. (Request Bodyμ userId, password λ± νμ) |
| μμ΄λ μ€λ³΅ νμΈ | GET |
/check-id |
νμκ°μ
μ μ¬μ©μ μμ΄λμ μ€λ³΅ μ¬λΆλ₯Ό νμΈν©λλ€. (Query StringμΌλ‘ ?id=μμ΄λ μ λ¬) |
| λ‘κ·ΈμΈ | POST |
/login |
μμ΄λμ λΉλ°λ²νΈλ‘ λ‘κ·ΈμΈν©λλ€. μ±κ³΅ μ ν ν°μ λ°κΈν©λλ€. |
| λ΄ μ 보 μ‘°ν | GET |
/me |
νμ¬ λ‘κ·ΈμΈλ μ¬μ©μμ μ 보λ₯Ό κ°μ Έμ΅λλ€. (μΈμ¦ νμ: verifyToken) |
| λ‘κ·Έμμ | POST |
/logout |
νμ¬ μ¬μ©μλ₯Ό λ‘κ·Έμμ μ²λ¦¬ν©λλ€. |
| κΈ°λ₯ | Method | Endpoint | μ€λͺ |
|---|---|---|---|
| μΉ΄μΉ΄μ€ λ‘κ·ΈμΈ μμ | GET |
/login |
μΉ΄μΉ΄μ€ μΈμ¦ νμ΄μ§λ‘ μ¬μ©μλ₯Ό 리λλ μ νμ¬ λ‘κ·ΈμΈμ μμν©λλ€. |
| μΉ΄μΉ΄μ€ λ‘κ·ΈμΈ μ½λ°± | GET |
/callback |
μΉ΄μΉ΄μ€ μΈμ¦ μ±κ³΅ ν, μΈμ¦ μ½λλ₯Ό λ°μ λ°±μλμμ νμ μ²λ¦¬λ₯Ό μ§νν©λλ€. |
| μΉ΄μΉ΄μ€ κ³μ νμκ°μ μλ£ | POST |
/complete |
μΉ΄μΉ΄μ€ μΈμ¦ ν, μλΉμ€μ νμν μΆκ° μ 보(μ: λλ€μ)λ₯Ό λ°μ νμκ°μ μ μ΅μ’ μλ£ν©λλ€. |
Unoa_Back/
βββ .github/ # GitHub Actions (CI/CD) μν¬νλ‘μ° μ€μ
βββ config/ # νκ²½ λ³μ, DB μ°κ²° λ± νλ‘μ νΈ μ€μ νμΌ
βββ controllers/ # μμ²(Request)μ λν λΉμ¦λμ€ λ‘μ§ μ²λ¦¬ λ° μλ΅(Response) λ°ν
β βββ authController.js
β βββ chatbotController.js
β βββ kakaoAuthController.js
β βββ userController.js
βββ data/ # (μ¬μ© μ) μ΄κΈ° λ°μ΄ν°λ μ μ λ°μ΄ν° νμΌ
βββ handlers/ # μ΄λ²€νΈ κΈ°λ° λ‘μ§ μ²λ¦¬ (μ: μΉμμΌ)
β βββ socketHandlers.js
βββ images/ # (μ¬μ© μ) μλ²μμ κ΄λ¦¬νλ μ΄λ―Έμ§ νμΌ
βββ middlewares/ # μμ²κ³Ό μλ΅ μ¬μ΄μ μ€κ° μ²λ¦¬ λ‘μ§ (μΈμ¦, λ‘κΉ
λ±)
β βββ authMiddleware.js
βββ models/ # MongoDB λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§ λ° λͺ¨λΈ μ μ
β βββ Benefit.js
β βββ Conversation.js
β βββ Plan.js
β βββ User.js
βββ node_modules/ # Node.js ν¨ν€μ§ λ° μμ‘΄μ±
βββ routes/ # API μλν¬μΈνΈ(URI) μ μ λ° μ»¨νΈλ‘€λ¬ μ°κ²°
β βββ apiRoutes.js
β βββ authRoutes.js
β βββ kakaoAuthRoutes.js
β βββ userRoutes.js
βββ scripts/ # λ°μ΄ν°λ² μ΄μ€ μλ© λ± λ³΄μ‘° μ€ν¬λ¦½νΈ
β βββ seedBenefits.js
β βββ seedDatabase.js
βββ services/ # 컨νΈλ‘€λ¬λ³΄λ€ 볡μ‘ν λΉμ¦λμ€ λ‘μ§, μΈλΆ API μ°λ λ± μ²λ¦¬
β βββ promptService.js
βββ utils/ # 곡ν΅μΌλ‘ μ¬μ©λλ ν¬νΌ ν¨μ λ° μ νΈλ¦¬ν°
β βββ helpers.js
βββ .env # νκ²½ λ³μ μ€μ νμΌ (Git μΆμ μ λ¨)
feat: Add a new featurefix: Bug fixdocs: Documentation updatesstyle: Code formatting, missing semicolons, cases where no code change is involvedrefactor: Code refactoringtest: Test code, adding refactoring testsbuild: Build task updates, package manager updates
# 1. μμ‘΄μ± μ€μΉ (λ£¨νΈ λλ ν 리μμ μ€ν)
npm install
# 2. ν΄λΌμ΄μΈνΈ λ° μλ² λΉλ
npm run build
# 3. μ΄κΈ° λ°μ΄ν° νμν κ²½μ° λ°μ΄ν° μλ©
npm run seed
# 4. κ°λ° μλ² μ€ν (ν΄λΌμ΄μΈνΈμ μλ²κ° λμμ μ€νλ¨)
npm run dev# .envνμΌ
# μλ² μ€μ
PORT = 5000
NODE_ENV=development
# νλ‘ νΈμλ λλ©μΈ
FRONTEND_URL=http://localhost:5173
# MongoDB μ€μ
MONGODB_URI={μ€μ κ°}
MONGODB_DB_NAME={μ€μ κ°}
# OpenAPI ν€ μ€μ
OPENAI_API_KEY={μ€μ κ°}
# μΈμ¦ κ΄λ ¨ μ€μ
BCRYPT_SALT_ROUNDS={μνλ κ°}
JWT_SECRET={μ€μ κ°}
JWT_EXPIRATION={μνλ κ°}
# μΉ΄μΉ΄μ€ λ‘κ·ΈμΈ
KAKAO_CLIENT_ID={μ€μ κ°}
KAKAO_CLIENT_SECRET={μ€μ κ°}
KAKAO_CALLBACK_URI=http://localhost:5000/api/auth/kakao/callback