Skip to content

Latest commit

Β 

History

History
executable file
Β·
293 lines (224 loc) Β· 8.66 KB

File metadata and controls

executable file
Β·
293 lines (224 loc) Β· 8.66 KB

🏦 DYMF (DY-Microfinance Customer Management) - Frontend

λ§ˆμ΄ν¬λ‘œνŒŒμ΄λ‚ΈμŠ€(μ†Œμ•‘κΈˆμœ΅) 관리 ν”Œλž«νΌμ˜ ν”„λ‘ νŠΈμ—”λ“œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μž…λ‹ˆλ‹€. 고객 관리, λŒ€μΆœ 관리, κ³ μ •μžμ‚° 관리, HR, μƒν™˜ λ“± 쒅합적인 금육 μš΄μ˜μ„ μ§€μ›ν•©λ‹ˆλ‹€.

배포 URL: dymf-front.vercel.app


πŸ“‹ λͺ©μ°¨


πŸ“Œ ν”„λ‘œμ νŠΈ κ°œμš”

DYMF(DY-Microfinance Customer Management) λŠ” λ§ˆμ΄ν¬λ‘œνŒŒμ΄λ‚ΈμŠ€ 쑰직의 μš΄μ˜μ„ λ””μ§€ν„Έν™”ν•˜λŠ” 톡합 관리 μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. 이 μ €μž₯μ†ŒλŠ” λ°±μ—”λ“œ(dymf-back)와 ν†΅μ‹ ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œλ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€.

핡심 νŠΉμ§•

  • βœ… Next.js 기반 ν’€μŠ€νƒ React μ• ν”Œλ¦¬μΌ€μ΄μ…˜
  • βœ… API 라우트 기반의 λ°±μ—”λ“œ 톡신 (RESTful)
  • βœ… μ‚¬μš©μž 인증 & κΆŒν•œ 관리 (User Role 기반)
  • βœ… ν…Œλ§ˆ 지원 (라이트/닀크 λͺ¨λ“œ)
  • βœ… λ°˜μ‘ν˜• UI (Radix UI + Tailwind CSS)
  • βœ… νƒ€μž… μ•ˆμ „μ„± (TypeScript)

🎯 μ£Όμš” κΈ°λŠ₯

1️⃣ ν™ˆ (Home)

  • λŒ€μ‹œλ³΄λ“œ κ°œμš” νŽ˜μ΄μ§€
  • μ£Όμš” 톡계 및 μš”μ•½ 정보

2️⃣ 고객 관리 (Customer)

  • 고객 정보 쑰회 및 검색
  • 고객 등둝
  • 고객 상세 정보 쑰회

3️⃣ λŒ€μΆœ 관리 (Loan)

  • 검색: CP 번호 기반 λŒ€μΆœ 정보 검색
  • 쑰회: λŒ€μΆœ 상세 정보 및 νƒ­ 기반 상세 보기
  • λŒ€μΆœ λ‹΄λ‹Ήμž μ§€μ • (Assign Loan Officer)
  • λŒ€μΆœ 계산기: λŒ€μΆœμ•‘, 이율, κΈ°κ°„ 기반 μƒν™˜μ•‘ 계산

4️⃣ 고객 보증인 (Guarantor)

  • 보증인 정보 쑰회 및 관리

5️⃣ κ³ μ •μžμ‚° 관리 (Fixed Assets)

  • κ³ μ •μžμ‚° 등둝 및 μ‚­μ œ
  • μžμ‚° ν˜„ν™© 쑰회

6️⃣ μƒν™˜ 관리 (Repayment)

  • μƒν™˜ 일정 쑰회
  • μƒν™˜ ν˜„ν™© 및 연체 좔적

7️⃣ 체크포인트 관리 (CP - Checkpoint)

  • CP 번호 검색
  • 고객 등둝 μ™„λ£Œλ„ 좔적

8️⃣ 인사 관리 (HR)

  • 직원 정보 쑰회
  • 역할별 μ‚¬μš©μž 관리

9️⃣ λ³΄κ³ μ„œ (Report)

  • λ‹€μ–‘ν•œ 리포트 생성 및 쑰회

πŸ”Ÿ μ‚¬μš©μž 관리 (User)

  • μ‚¬μš©μž 등둝
  • μ‚¬μš©μž μ‚­μ œ

βš’οΈ 기술 μŠ€νƒ

λΆ„λ₯˜ 기술
Runtime Node.js
μ–Έμ–΄ TypeScript
ν”„λ ˆμž„μ›Œν¬ Next.js 15.3.4
라이브러리 React 19.0.0
UI μ»΄ν¬λ„ŒνŠΈ Radix UI (Dialog, Tabs, Dropdown, Alert, etc.)
μŠ€νƒ€μΌλ§ Tailwind CSS 3.4.1 + CVA (Class Variance Authority)
μ•„μ΄μ½˜ Lucide React
HTTP ν΄λΌμ΄μ–ΈνŠΈ Axios 1.7.9
토큰 관리 JWT Decode 4.0.0
λ‚ μ§œ/μ‹œκ°„ date-fns 4.1.0
μ•Œλ¦Ό/ν† μŠ€νŠΈ Sonner 1.7.4
ν…Œλ§ˆ next-themes 0.4.4
이미지 처리 Sharp 0.33.5
μ• λ‹ˆλ©”μ΄μ…˜ tailwindcss-animate
개발 도ꡬ ESLint, TypeScript, PostCSS

πŸ“‚ ν”„λ‘œμ νŠΈ ꡬ쑰

src/
β”œβ”€β”€ app/                           # Next.js μ•± λΌμš°ν„°
β”‚   β”œβ”€β”€ (with-app-sidebar)/       # 인증된 μ‚¬μš©μž λ ˆμ΄μ•„μ›ƒ
β”‚   β”‚   β”œβ”€β”€ home/                  # ν™ˆ νŽ˜μ΄μ§€
β”‚   β”‚   β”œβ”€β”€ cp/                    # 보좩 자료 μš”μ²­ (Checkpoint)
β”‚   β”‚   β”œβ”€β”€ search/                # 검색 νŽ˜μ΄μ§€
β”‚   β”‚   β”œβ”€β”€ calculator/            # λŒ€μΆœ 계산기
β”‚   β”‚   β”œβ”€β”€ fixed-assets/          # κ³ μ •μžμ‚° 관리
β”‚   β”‚   β”œβ”€β”€ hr/                    # 인사 관리
β”‚   β”‚   β”œβ”€β”€ overdue/               # 연체 관리
β”‚   β”‚   β”œβ”€β”€ registration/          # 고객 등둝
β”‚   β”‚   β”œβ”€β”€ repayment/             # μƒν™˜ 관리
β”‚   β”‚   β”œβ”€β”€ report/                # λ³΄κ³ μ„œ
β”‚   β”‚   β”œβ”€β”€ user/                  # μ‚¬μš©μž 관리
β”‚   β”‚   └── layout.tsx             # μ‚¬μ΄λ“œλ°” λ ˆμ΄μ•„μ›ƒ
β”‚   β”œβ”€β”€ login/                     # 둜그인 νŽ˜μ΄μ§€
β”‚   β”œβ”€β”€ api/                       # API 라우트 (λ°±μ—”λ“œ ν”„λ‘μ‹œ)
β”‚   β”‚   β”œβ”€β”€ auth/                  # 인증 κ΄€λ ¨
β”‚   β”‚   β”œβ”€β”€ getCustomers/          # 고객 쑰회
β”‚   β”‚   β”œβ”€β”€ getLoans/              # λŒ€μΆœ 쑰회
β”‚   β”‚   β”œβ”€β”€ getCpNumbers/          # CP 번호 검색
β”‚   β”‚   β”œβ”€β”€ getFixedAssets/        # κ³ μ •μžμ‚° 쑰회
β”‚   β”‚   β”œβ”€β”€ getGuarantors/         # 보증인 쑰회
β”‚   β”‚   β”œβ”€β”€ getLoanOfficers/       # λŒ€μΆœ λ‹΄λ‹Ήμž 쑰회
β”‚   β”‚   β”œβ”€β”€ assignLoanOfficer/     # λŒ€μΆœ λ‹΄λ‹Ήμž μ§€μ •
β”‚   β”‚   β”œβ”€β”€ deleteUser/            # μ‚¬μš©μž μ‚­μ œ
β”‚   β”‚   β”œβ”€β”€ deleteFixedAsset/      # κ³ μ •μžμ‚° μ‚­μ œ
β”‚   β”‚   └── ... (기타 API μ—”λ“œν¬μΈνŠΈ)
β”‚   β”œβ”€β”€ layout.tsx                 # 루트 λ ˆμ΄μ•„μ›ƒ
β”‚   └── page.tsx                   # 루트 νŽ˜μ΄μ§€
β”œβ”€β”€ components/                    # μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ ui/                        # Radix UI 기반 μ»΄ν¬λ„ŒνŠΈ
β”‚   β”‚   β”œβ”€β”€ tabs.tsx               # νƒ­ μ»΄ν¬λ„ŒνŠΈ
β”‚   β”‚   β”œβ”€β”€ dialog.tsx             # λ‹€μ΄μ–Όλ‘œκ·Έ
β”‚   β”‚   β”œβ”€β”€ button.tsx             # λ²„νŠΌ
β”‚   β”‚   └── ... (기타 UI μ»΄ν¬λ„ŒνŠΈ)
β”‚   β”œβ”€β”€ pop-ups/                   # λͺ¨λ‹¬/νŒμ—… μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ tabs/                      # νŽ˜μ΄μ§€λ³„ νƒ­ μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ app-sidebar.tsx            # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‚¬μ΄λ“œλ°”
β”‚   β”œβ”€β”€ nav-*.tsx                  # λ„€λΉ„κ²Œμ΄μ…˜ μ»΄ν¬λ„ŒνŠΈ
β”‚   └── theme-provider.tsx         # ν…Œλ§ˆ 제곡자
β”œβ”€β”€ context/                       # React Context (μƒνƒœ 관리)
β”‚   └── UserProvider.tsx           # μ‚¬μš©μž 정보 및 κΆŒν•œ 관리
β”œβ”€β”€ hooks/                         # μ»€μŠ€ν…€ React Hook
β”œβ”€β”€ util/                          # μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜
β”œβ”€β”€ middleware.ts                  # Next.js 미듀웨어 (μš”μ²­ 처리)
β”œβ”€β”€ types.ts                       # TypeScript νƒ€μž… μ •μ˜
└── eslint.config.mjs              # ESLint μ„€μ •

πŸš€ μ‹œμž‘ν•˜κΈ°

μ„€μΉ˜

# μ €μž₯μ†Œ 클둠
git clone https://github.com/DY-Microfinance-Customer-Management/dymf-front.git
cd dymf-front

# μ˜μ‘΄μ„± μ„€μΉ˜
npm install

개발 μ„œλ²„ μ‹€ν–‰

npm run dev

λΉŒλ“œ

npm run build
npm start

μ„€μ •

λ°±μ—”λ“œ API μ—”λ“œν¬μΈνŠΈλŠ” src/app/api/* ν΄λ”μ˜ 라우트 ν•Έλ“€λŸ¬μ—μ„œ κ΄€λ¦¬λ©λ‹ˆλ‹€. ν™˜κ²½ λ³€μˆ˜ 섀정이 ν•„μš”ν•œ 경우 .env.local νŒŒμΌμ„ μƒμ„±ν•˜μ—¬ κ΅¬μ„±ν•©λ‹ˆλ‹€.


πŸ” 인증 & κΆŒν•œ

  • JWT 기반 토큰 인증
  • Role 기반 μ ‘κ·Ό μ œμ–΄ (UserProvider.tsx μ—μ„œ 관리)
  • 둜그인 νŽ˜μ΄μ§€: /login
  • 보호된 라우트: (with-app-sidebar) 폴더 λ‚΄ λͺ¨λ“  νŽ˜μ΄μ§€

🎨 UI/UX

  • Radix UI: 접근성이 높은 ν—€λ“œλ¦¬μŠ€ μ»΄ν¬λ„ŒνŠΈ
  • Tailwind CSS: μœ ν‹Έλ¦¬ν‹° 기반 CSS ν”„λ ˆμž„μ›Œν¬
  • Dark Mode: next-themes둜 라이트/닀크 λͺ¨λ“œ 지원
  • λ°˜μ‘ν˜• λ””μžμΈ: λͺ¨λ°”일, νƒœλΈ”λ¦Ώ, λ°μŠ€ν¬ν†± ν˜Έν™˜

πŸ‘¨β€πŸ’» νŒ€μ›

μ—­ν•  이름
Backend λͺ¨μ§„μ˜
Backend λ°•ν›ˆμΌ
Frontend λ°•κ±΄μš°

πŸ“ Commit Convention

[νƒ€μž…]: 제λͺ©

λ³Έλ¬Έ (선택사항)

νƒ€μž… μ’…λ₯˜:

  • Feat: μƒˆλ‘œμš΄ κΈ°λŠ₯
  • Fix: 버그 μˆ˜μ •
  • Refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§
  • Debug: 디버깅
  • Test: ν…ŒμŠ€νŠΈ μ½”λ“œ
  • Style: μŠ€νƒ€μΌ λ³€κ²½
  • Chore: λΉŒλ“œ, μ˜μ‘΄μ„± λ“±

μ˜ˆμ‹œ:

Feat: λŒ€μΆœ 검색 κΈ°λŠ₯ μΆ”κ°€
Fix: λŒ€μΆœ 상세 νƒ­ ν‘œμ‹œ 였λ₯˜ μˆ˜μ •
Refactor: μ‚¬μ΄λ“œλ°” UI κ°œμ„ 

πŸ—’οΈ Code Convention

파일λͺ…

  • μ»΄ν¬λ„ŒνŠΈ: PascalCase (예: UserProfile.tsx)
  • μœ ν‹Έλ¦¬ν‹°/ν›…: camelCase (예: useUserContext.ts)
  • νŽ˜μ΄μ§€: kebab-case (예: loan-details.tsx)

λ³€μˆ˜/ν•¨μˆ˜λͺ…

  • camelCase μ‚¬μš©
  • λͺ…ν™•ν•œ 이름 (예: getLoanDetails())

νƒ€μž… μ •μ˜

  • types.ts에 λͺ¨λ“  νƒ€μž… μ •μ˜
  • μΈν„°νŽ˜μ΄μŠ€λŠ” I 접두사 μƒλž΅

μ»΄ν¬λ„ŒνŠΈ ꡬ쑰

// μž„ν¬νŠΈ
import { useState } from 'react';

// νƒ€μž… μ •μ˜
interface Props {
  title: string;
}

// μ»΄ν¬λ„ŒνŠΈ
export default function Component({ title }: Props) {
  // μƒνƒœ
  const [state, setState] = useState('');

  // μ΄νŽ™νŠΈ 및 둜직

  // λ Œλ”
  return <div>{title}</div>;
}

πŸ“„ λΌμ΄μ„ μŠ€

MIT License - 자유둜운 μ‚¬μš©, μˆ˜μ •, 배포 κ°€λŠ₯


πŸ“ž 문의

이 ν”„λ‘œμ νŠΈμ— λŒ€ν•œ λ¬Έμ˜μ‚¬ν•­μ€ 이슈λ₯Ό 톡해 μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.