"μλΉμ λ°λ€μμ νμ°μ λλ λΉμ μ μν AI μ μΆμ½μΉ"
ZμΈλλ₯Ό μν μ μΆ μ΅κ΄ νμ±μ λμμ£Όλ μλΉμ€ μ λλ€
- AI μ μΆ μ½μΉ μλΉμ€-Dolfin μ κ·μ¬μ΄ AI μ μΆ μ½μΉκ° ZμΈλμ μλΉ κ΄λ¦¬λ₯Ό ν¨κ»νλ©° λͺ©ν κΈ°λ° μ μΆμ λ°μΌλ¦¬ μ±λ¦°μ§λ₯Ό ν΅ν΄ λκ³ λ¦¬μλμ μ¬λ―Έλ₯Ό μ£Όλ μλΉμ€ μ λλ€.
- μ μΆ λ‘λλ§΅ μμ±κ³Ό μ½μΉ λ§€μΉ, λ°μΌλ¦¬ λ―Έμ μ 곡, μΆ©λ μλΉ κ°μ§ κΉμ§ 3μ’ AIλ₯Ό νμ¬νμ΅λλ€.
- κ°λ° κΈ°κ°: 2025.08.25~2025.09.28 (5μ£Ό)
- νλ‘μ νΈ λͺ©ν: ZμΈλ λ§μΆ€ν λͺ©ν κΈ°λ° μ μΆ μ΅κ΄ νμ±μ λλ AI μ μΆ μ½μΉ μλΉμ€ ꡬμΆ
| μ νμ(νμ₯) | μ κ°λν | νλ―Όμ£Ό | μλ€λΉ | 곡μ€μ | μμ£ΌλΉ |
|---|---|---|---|---|---|
| Infra / BE / AI | BE / AI | BE / Data / AI | FE / PM | FE | FE |
- Dolfinμ λ€μκ³Ό κ°μ λ°°κ²½μμ κΈ°νλμμ΅λλ€.
- μ μ°μ± λΆμ‘±ν κΈ°μ‘΄ μμ μ κΈ: λ§€λ¬ μ ν΄μ§ κΈ°κ°κ³Ό κΈμ‘μ λ£μ΄μΌ νκ³ κ°μ’ μνμ μ μ κ° μ§μ κ³ λ―Όνκ³ μ νν΄μΌ ν¨
- κΈ°μ‘΄ μ μΆ μλΉμ€μ λ¨μ : UI/UXκ° λ³΅μ‘νκ³ λΆνμν κΈ°λ₯μ΄ λ§μ, μ¬λ―Έ/λκΈ° λΆμ¬ μμκ° λΆμ‘±νκ³ , μΆ©λ μλΉλ₯Ό λ§μμ£Όμ§ λͺ»ν¨
- μ¦ν₯ μλΉν: μΆ©λꡬ맀λ₯Ό μμ£Ό νκ³ , μλ§μ΄λ©΄ ν΅μ₯μ΄ λΉλ μ¬λ
- λͺ©ν μ§ν₯ν: μ¬ν,μ μκΈ°κΈ° λ± κ΅¬μ²΄μ μΈ λͺ©νκ° μμ΄ λ¨κΈ° μ μΆμ μνκ³ , λκΈ°λΆμ¬κ° νμν μ¬λ
- μ΅κ΄ νμ±ν: κΎΈμ€ν μ μΆμ νκ³ μΆμ§λ§ μ½κ² ν¬κΈ°νλ μ¬λ
πͺ AI μ μΆ λ‘λλ§΅ μμ±
- λͺ©ν κΈμ‘κ³Ό μμ , μ μΆ μ±ν₯μ μ λ ₯νλ©΄ AIκ° μλμΌλ‘ μ μΆ λ‘λλ§΅μ μ μνκ³ μ½μΉλ₯Ό λ§€μΉ
- AI μ½μΉ μ νμ λ°λ₯Έ λ©νΈ μ 곡
π λ°μΌλ¦¬ μ μΆ λ―Έμ
- AIκ° λ§€μΌ λ¬μ± κ°λ₯ν μμ‘ μ μΆ μ±λ¦°μ§ μ μ (컀νΌκ° μ μ½, λ°°λ¬μμ λμ ν΄λ¨ΉκΈ° λ±)
- λ―Έμ μ±κ³΅ μ μΆκ° κΈλ¦¬ μ 곡μΌλ‘ λκΈ° λΆμ¬
πΈ μλΉ λ΄μ μ‘°ν λ° μΆ©λμλΉ μλ¦Ό
- μλ³/μΌλ³ μλΉ λ΄μμ κ·Έλνλ‘ μκ°ν, μΉ΄ν κ³ λ¦¬λ³λ‘ λ΄μ μ‘°ν
- νΉμ μλΉ λ°μ μ μΆ©λ μλΉ λ©μμ§ λ°μ‘
π μ μΆ λκΈ° λΆμ¬ μμ
- AI μ½μΉ λ©μμ§: AI μ½μΉ μ νμ λ°λ₯Έ μ€μκ° μμ,νΌλλ°± λ©νΈ μ 곡
- λ―Έλμμ μ¨ νΈμ§: λͺ©ν λ¬μ± νμ λͺ¨μ΅μ μμνκ² νλ λ―Έλ νΈμ§ κΈ°λ₯
π€ κ°μΈν μλΉμ€
- νμ μΈμ¦: νμκ°μ ,λ‘κ·ΈμΈ,λ‘κ·Έμμ,νμνν΄ μ§μ
- κ³μ’ κ΄λ¦¬: μ¬μ©μ μ°κ²° κ³μ’ μΆκ° μ°λ/μμ
- PWA μλ¦Ό: 첫 λ‘κ·ΈμΈ μ νμ λ©νΈ, ν΄λ¦ μ λλ€μΌλ‘ λͺ©ν νμ΄μ§ μ΄λ
- λͺ©ν μ€λ¨: λͺ©ν μ€λ¨ μ μ¬μ©μ κ³μ’ νκΈ λλ λͺ©ν μ ν κ°λ₯
- Language: Java
- Framework: Spring Boot 3.5.4
- ORM: JPA (Hibernate)
- Database: MySQL, Redis, Chroma
- Security: Spring Security, JWT
- Build Tool: Gradle
- Language: TypeScript, JavaScript
- Package Manager: npm
- Library: React 19.0.0, react-dom 19.0.0
- Styling: Tailwind CSS, shadcn/ui
- State Management: Zustand 5.0.8
- Build/Runtime: Vite 6.0.11, Node.js v22.17.1 (LTS)
- PWA Support: vite-plugin-pwa 0.21.2, Workbox 7.3.0, vapid
- Language: Python
- Data Handling: Pandas, NumPy, scikit-learn, StandardScaler, ChromaDB, Ko-SBERT
- AI Model: scikit-learn κΈ°λ° λ‘μ§μ€ν± νκ· λͺ¨λΈ, IsolationForest + κ·μΉ κΈ°λ° λͺ¨λΈ
- Containerization: Docker, Docker Compose
- Web Server: NGINX
- Deployment: AWS EC2
- CI/CD: Jenkins
- Storage: Amazon S3
- Verson control: Git(GitLab)
- UI/UX Design: Figma
- Project Management: Notion, Jira
Backend
backend
βββ gradle/ # Gradle wrapper λ° μ€μ νμΌ
βββ src
βββ main
βββ java
β βββ com.galmuri.dolfin
β βββ account/ # κ³μ’ κ΄λ ¨ λλ©μΈ
β β βββ controller # REST API 컨νΈλ‘€λ¬
β β βββ dto # λ°μ΄ν° μ μ‘ κ°μ²΄ (DTO)
β β βββ entity # JPA μν°ν° ν΄λμ€
β β βββ repository # Spring Data JPA Repository
β β βββ service # λΉμ¦λμ€ λ‘μ§ μλΉμ€ κ³μΈ΅
β β
β βββ autotransfer/ # μλμ΄μ²΄ κ΄λ ¨ λλ©μΈ
β β βββ entity
β β βββ enums
β β βββ repository
β β βββ scheduler # μ€μΌμ€λ¬ (μλ μ€ν μμ
)
β β βββ service
β β
β βββ card/ # μΉ΄λ κ΄λ ¨ λλ©μΈ
β β βββ controller
β β βββ dto
β β βββ entity
β β βββ repository
β β βββ service
β β
β βββ consumption/ # μλΉ λ΄μ κ΄λ ¨ λͺ¨λ
β βββ global/ # μ μ μ€μ , κ³΅μ© μ νΈ, μμΈ μ²λ¦¬ λ±
β βββ goal/ # μ μΆ λͺ©ν κ΄λ ¨ λλ©μΈ
β βββ impulse/ # μΆ©λ μλΉ κ΄λ¦¬ κ΄λ ¨ λλ©μΈ
β βββ mission/ # μ±λ¦°μ§ λ° λ―Έμ
κ΄λ ¨ λλ©μΈ
β βββ moneycoach/ # AI λ¨Έλμ½μΉ κ΄λ ¨ λλ©μΈ
β
βββ resources
βββ database/ # DB μ΄κΈ°ν μ€ν¬λ¦½νΈ, SQL νμΌ
βββ application.yml # Spring Boot λ©μΈ νκ²½μ€μ νμΌFrontend
frontend
βββ dolfin
βββ dist/ # λΉλ κ²°κ³Όλ¬Ό (λ°°ν¬μ©)
βββ node_modules/ # νλ‘μ νΈ μ’
μμ± ν¨ν€μ§
βββ public/ # μ μ 리μμ€ (favicon, manifest λ±)
βββ src/
βββ app/ # μ ν리μΌμ΄μ
μ§μ
λ° μ μ μ€μ
β βββ AuthGuard.tsx # μΈμ¦ κ°λ (λΌμ°ν
보νΈ)
β βββ layout.tsx # μ μ λ μ΄μμ
β βββ main.tsx # μνΈλ¦¬ ν¬μΈνΈ
β βββ paths.ts # λΌμ°νΈ κ²½λ‘ μμ μ μ
β βββ providers.tsx # Context Providers λ±λ‘
β βββ router.tsx # React Router μ€μ
β
βββ assets/ # μ΄λ―Έμ§, μμ΄μ½, ν°νΈ λ± μ μ 리μμ€
β
βββ components/ # Atomic Design κΈ°λ° UI μ»΄ν¬λνΈ
β βββ atoms/ # μ΅μ λ¨μ UI μμ (Button, Input λ±)
β βββ molecules/ # μ¬λ¬ Atomsλ₯Ό μ‘°ν©ν μ»΄ν¬λνΈ
β βββ ui/ # UI μ νΈ μ»΄ν¬λνΈ λͺ¨μ
β
βββ lib/ # κ³΅μ© λΌμ΄λΈλ¬λ¦¬, μ νΈ ν¨μ
β
βββ pages/ # νμ΄μ§ λ¨μ μ»΄ν¬λνΈ
β βββ Auth/ # λ‘κ·ΈμΈ/νμκ°μ
β βββ Consumption/ # μλΉ λ΄μ νμ΄μ§
β βββ Goals/ # μ μΆ λͺ©ν κ΄λ ¨ νμ΄μ§
β βββ home/ # ν νλ©΄
β βββ MyPage/ # λ§μ΄νμ΄μ§
β βββ Onboarding/ # μ¨λ³΄λ© νλ‘μ°
β βββ NotFoundPage.tsx # 404 νμ΄μ§
β
βββ pwa/ # PWA κ΄λ ¨ μ€μ λ° μ»΄ν¬λνΈ
β βββ pwa-register-shim.ts
β βββ PWABadge.tsx
β βββ registerSW.ts
β βββ sw.ts # μλΉμ€ μ컀
β
βββ store/ # Zustand μν κ΄λ¦¬
βββ styles/ # κΈλ‘λ² μ€νμΌ (Tailwind λ±)
βββ types/ # μ μ νμ
μ μ (TypeScript)
βββ vite-env.d.ts # Vite νκ²½ λ³μ νμ
μ μΈ- μ¬μ©μλ κΈ°μ ν μ μΆ λͺ©ν, λͺ©ν κΈμ‘, μ μμ μ κΈ°μ νκ³ μ΄μ§μ λ€ νμμ μ±ν₯ λ΅λ³
- μλ΅ λ΄μ©μ λ°νμΌλ‘ AI μ μΆ λ‘λλ§΅ μμ± λ° μ½μΉ λ§€μΉ
- ν΅μ¬ λ‘μ§:
- κΈμ΅ μ§μ RAG κΈ°λ° μν€ν μ² μ μ©: κΈμ΅ κΈ°κ΄ μ°κ΅¬λ³΄κ³ μμ μ λ¬Έκ° μ μΆ κ°μ΄λ λ± λ¬Έμλ₯Ό μμ§
- Chroma Vetor DBμ Ko-SBERT μλ² λ©μ μ¬μ©ν΄ κ° λ¬Έλ¨μ 벑ν°ννκ³ , λκ°μ§ μ±κ²©(μΌλ° κΈμ΅ μ 보/μ μΆ μ λ΅ λ¬Έμ)μ λ¬Έμλ‘ λΆλ¦¬
- μ¬μ©μμ νλ‘ν(μ μμ , λͺ©ν κΈμ‘, κΈ΄κΈλ λ±)μ λ§μΆ° λ€μν ννμ μλ΅ μΏΌλ¦¬ μμ±
- GPT λͺ¨λΈ κΈ°λ° μ μΆ λ‘λλ§΅κ³Ό AI μ½μΉ λ§€μΉ, μ½μΉ μ±κ²©μ λ°λ₯Έ λ©νΈ μμ±
- μ¬μ©μ μλΉ λ°μ΄ν°μ λ―Έμ λ¬μ±λ₯ μ λ°νμΌλ‘ AIκ° λ°μΌλ¦¬ λ―Έμ μ μμ±
- λ―Έμ μλ£ μ ν΄λΉ νλ κΈμ‘ λ§νΌ μΆκ° μ μΆ, λ¬μ± νμμ λ°λ₯Έ μΆκ° κΈλ¦¬ μ 곡
- ν΅μ¬ λ‘μ§:
- μ΅κ·Ό 3κ°μ μΉ΄λ λ΄μμΌλ‘ μλΉ μ ν νλ³
- λ‘μ§μ€ν± νκ· λͺ¨λΈμ μ¬μ©νλ©°, μλ 3κ°μ§ Featureλ‘ μλΉ μ ν λ°°μ νκ³ λ―Έμ
λ¬μ±λ₯ λ μΆκ° νμ΅νμ¬ λ°μΌλ¦¬ λ―Έμ
μ μμ±
- Lift: κ°μΈ μλΉ λΉμ€/ μ 체 μλΉ λΉμ€ (μλμ μ°¨μ΄)
- Gap: κ°μΈ μλΉ λΉμ€ - μ 체 μλΉ λΉμ€(μ λμ μ°¨μ΄)
- Discretion: μ¬λ μλΉ μ±ν₯ (νμ/μ ν μ§μΆμ λ°λ₯Έ κ°μ€μΉ)
- μ¬μ©μμ μκ° μλΉ λ΄μ μ‘°ν κ°λ₯, μ μ μλΉ κ·Έλνμ λΉκ΅
- AI μΆ©λ μλΉ νμ§ λ΄μ νμ§λ‘ μκ° μΆ©λ μλΉ μ΄μ‘ νμΈ
- μΆ©λ μλΉκ° μλλΌλ©΄ νΌλλ°± λ°μ‘, μΆν μ νλ κ°μ μ νμ©
- ν΅μ¬ λ‘μ§:
- μΉ΄λ κ±°λ λ΄μμ κΈ°λ°μΌλ‘ μΆ©λ μλΉ μ¬λΆλ₯Ό κ°μ§
- Isolation Forest λͺ¨λΈ μ¬μ©, μ¬μ©μμ νκ· κ±°λ κΈμ‘, μκ°λ λ±μ κ³ λ €ν΄ μλΉ λ΄μμ μ μν
- μΆ©λ μλΉ κ³ μν μκ°λμΈ κ²½μ° μΆκ° κ°μ€μΉλ₯Ό μ μ©
- μ£Όκ°/μΌκ° μΆκ° μλΉ λ°μ μ λμ κ°μ€μΉ μΆκ°
- μΆκ° μ¬μ©μμ μΆ©λ μλΉ νΌλλ°±μ ν΅ν΄ κ°μΈλ³ μΆ©λ μλΉ μκ³κ° μ‘°μ
- μ¬μ©μλ λͺ©νλ³ νμ΄μ§μ AI μ½μΉ μΊλ¦ν°λ₯Ό ν΄λ¦νλ©΄ μ±κ²© μ νμ λ°λ₯Έ μμ/νΌλλ°± λ©μμ§λ₯Ό νμΈ κ°λ₯
- λͺ©νλ₯Ό μμ±ν λ―Έλμ λμκ²μ μ¨ νΈμ§λ₯Ό νμΈνμ¬ λκΈ° λΆμ¬
- νμ κ°μ
- μ΄λ©μΌ μΈμ¦ νμ
- κ³μ μμ± ν κ³μ’ μ°λ(1μ μ‘κΈμ ν΅ν κ³μ’ νμΈ)
-
λ‘κ·ΈμΈ/λ‘κ·Έμμ
- μ΄λ©μΌ/λΉλ°λ²νΈ μ λ ₯
- λΉλ°λ²νΈ λ³κ²½ κ°λ₯
-
κ³μ’ κ΄λ¦¬
- μ°λ κ³μ’ μΆκ° μ°κ²°/ν΄μ§ κ°λ₯
-
λͺ©ν μ€λ¨
- λͺ©νλ₯Ό μ€λ¨ν μ μμ§λ§, μ¬μ©μ κ³μ’λ‘ νκΈνλ κ² μΈμ, λ€λ₯Έ λͺ©νμ μΆκ°νκΈ°λ κ°λ₯
-
νμ νν΄
- νμ νν΄κ° κ°λ₯νμ§λ§, νμ¬ μ μΆ νν©μ μ 곡νμ¬ μ μ κ° νλ² λ κ³ λ―Όνκ² λ§λλ UXλ‘ μ€κ³








