Skip to content

jooncco/cash-log

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

22 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’° Cash Log

κ°„λ‹¨ν•œ 개인 재무 관리 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜. React + Spring Boot + MySQL 기반, Docker Compose둜 배포.

πŸ“Έ 미리보기

Dashboard

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

πŸ“… μˆ˜μž…/μ§€μΆœ λ‚΄μ—­ 관리

  • λ‚ μ§œ, κΈˆμ•‘, μΉ΄ν…Œκ³ λ¦¬, νƒœκ·Έ, λ©”λͺ¨λ₯Ό ν¬ν•¨ν•œ 거래 기둝
  • 닀쀑 톡화 지원 (KRW, USD, EUR, JPY) β€” 원화 ν™˜μ‚° κΈˆμ•‘ μžλ™ μ €μž₯
  • μΉ΄ν…Œκ³ λ¦¬ 관리 (색상 μ§€μ • κ°€λŠ₯)
  • νƒœκ·Έ μ‹œμŠ€ν…œ (κ±°λž˜λ‹Ή μ—¬λŸ¬ νƒœκ·Έ, 색상 μ§€μ • κ°€λŠ₯)
  • 기간별, μœ ν˜•λ³„, μΉ΄ν…Œκ³ λ¦¬λ³„, νƒœκ·Έλ³„ 필터링

πŸ“Š 데이터 μ‹œκ°ν™”

  • 월별 좔이 차트: μˆ˜μž…/μ§€μΆœ 라인 차트 (ν΄λ¦­ν•˜μ—¬ μ›” 선택)
  • 월별 μΊ˜λ¦°λ”: 일별 μˆ˜μž…/μ§€μΆœ 히트맡, ν˜Έλ²„ μ‹œ 상세 툴팁
  • μΉ΄ν…Œκ³ λ¦¬λ³„ 뢄석: 파이 차트
  • νƒœκ·Έλ³„ 뢄석: λ°” 차트
  • Top 거래: μƒμœ„ 5건 μˆ˜μž…/μ§€μΆœ ν…Œμ΄λΈ”

πŸ’Ύ 데이터 관리

  • MySQL μ˜μ† μ €μž₯ (Docker λ³Όλ₯¨)
  • CSV, Excel, PDF 내보내기

🌐 λ‹€κ΅­μ–΄ & 닀크 λͺ¨λ“œ

  • ν•œκ΅­μ–΄ / English 지원
  • 라이트 / 닀크 ν…Œλ§ˆ

πŸ› οΈ 기술 μŠ€νƒ

ν”„λ‘ νŠΈμ—”λ“œ

기술 버전
React 18
TypeScript 5.3
Vite 5
Tailwind CSS 3.4
Zustand 4.5
Chart.js 4.4
React Router 6.22
Nginx Alpine (배포)

λ°±μ—”λ“œ

기술 버전
Java 21
Spring Boot 3.2.2
Spring Data JPA -
Flyway -
Apache POI Excel 내보내기
OpenCSV CSV 내보내기
iText 8 PDF 내보내기
SpringDoc OpenAPI API λ¬Έμ„œ

인프라

기술 버전
MySQL 8.0
Docker Compose -
Nginx Alpine

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

cash-log/
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ backend/             # Spring Boot REST API
β”‚   β”‚   β”œβ”€β”€ src/main/java/   # Controller, Service, Repository, Entity, DTO
β”‚   β”‚   β”œβ”€β”€ src/main/resources/  # application.yml, Flyway migrations
β”‚   β”‚   β”œβ”€β”€ Dockerfile
β”‚   β”‚   └── pom.xml
β”‚   └── frontend/            # React SPA
β”‚       β”œβ”€β”€ src/
β”‚       β”‚   β”œβ”€β”€ pages/       # DashboardPage, TransactionsPage, SettingsPage
β”‚       β”‚   β”œβ”€β”€ components/  # UI μ»΄ν¬λ„ŒνŠΈ, 차트, λͺ¨λ‹¬
β”‚       β”‚   β”œβ”€β”€ lib/         # API ν΄λΌμ΄μ–ΈνŠΈ, Zustand μŠ€ν† μ–΄, i18n
β”‚       β”‚   └── types/       # TypeScript νƒ€μž… μ •μ˜
β”‚       β”œβ”€β”€ nginx.conf
β”‚       └── Dockerfile
β”œβ”€β”€ infrastructure/
β”‚   └── docker/              # 개발용 MySQL Docker Compose
β”œβ”€β”€ docker-compose.yml       # 전체 μŠ€νƒ 배포
└── .env.example

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

사전 μš”κ΅¬μ‚¬ν•­

  • Docker Desktop 20.10+

λΉ λ₯Έ μ‹œμž‘

  1. ν™˜κ²½ λ³€μˆ˜ μ„€μ •
cp .env.example .env
# .env νŒŒμΌμ„ νŽΈμ§‘ν•˜μ—¬ λΉ„λ°€λ²ˆν˜Έ μ„€μ •
  1. 전체 μŠ€νƒ μ‹€ν–‰
docker compose up --build -d
  1. 접속

개발 λͺ¨λ“œ

개발 μ‹œμ—λŠ” ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œλ₯Ό λ³„λ„λ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€.

  1. MySQL μ‹€ν–‰
cd infrastructure/docker
cp .env.example .env  # λΉ„λ°€λ²ˆν˜Έ μ„€μ •
docker compose up -d
  1. λ°±μ—”λ“œ μ‹€ν–‰
cd apps/backend
export DB_USER=cashlog
export DB_PASSWORD=<your-password>
./mvnw spring-boot:run
  1. ν”„λ‘ νŠΈμ—”λ“œ μ‹€ν–‰
cd apps/frontend
npm install
npm run dev

πŸ“‘ API μ—”λ“œν¬μΈνŠΈ

λ¦¬μ†ŒμŠ€ λ©”μ„œλ“œ 경둜 μ„€λͺ…
거래 POST /api/transactions 거래 생성
GET /api/transactions 거래 λͺ©λ‘ (λ‚ μ§œ ν•„ν„° 지원)
GET /api/transactions/{id} 거래 상세
PUT /api/transactions/{id} 거래 μˆ˜μ •
DELETE /api/transactions/{id} 거래 μ‚­μ œ
μΉ΄ν…Œκ³ λ¦¬ GET/POST/PUT/DELETE /api/categories CRUD
νƒœκ·Έ GET/POST/PUT/DELETE /api/tags CRUD
내보내기 GET /api/export/csv CSV λ‹€μš΄λ‘œλ“œ
GET /api/export/excel Excel λ‹€μš΄λ‘œλ“œ
GET /api/export/pdf PDF λ‹€μš΄λ‘œλ“œ
뢄석 GET /api/analytics/monthly-summary 월별 μš”μ•½
μ„Έμ…˜ GET/PUT /api/session/{key} μ‚¬μš©μž μ„€μ •

πŸ§ͺ ν…ŒμŠ€νŠΈ

# λ°±μ—”λ“œ ν…ŒμŠ€νŠΈ
cd apps/backend
./mvnw test

# ν”„λ‘ νŠΈμ—”λ“œ ν…ŒμŠ€νŠΈ
cd apps/frontend
npm test

πŸ—οΈ 배포 μ•„ν‚€ν…μ²˜

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚   Nginx     │────▢│  Spring Boot │────▢│  MySQL  β”‚
β”‚  (port 80)  β”‚     β”‚  (port 8080) β”‚     β”‚ (3306)  β”‚
β”‚  + React    β”‚     β”‚  REST API    β”‚     β”‚         β”‚
β”‚  SPA        β”‚     β”‚              β”‚     β”‚         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
   frontend            backend             mysql
  • Nginxκ°€ 정적 파일(React SPA)을 μ„œλΉ™ν•˜κ³ , /api/ μš”μ²­μ„ λ°±μ—”λ“œλ‘œ ν”„λ‘μ‹œ
  • λ°±μ—”λ“œλŠ” Docker λ„€νŠΈμ›Œν¬ λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ (ν˜ΈμŠ€νŠΈμ— 포트 λ…ΈμΆœ μ•ˆ 함)
  • MySQL λ°μ΄ν„°λŠ” Docker λ³Όλ₯¨(docker_mysql-data)에 μ˜μ† μ €μž₯

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

MIT License β€” LICENSE μ°Έμ‘°.

About

πŸ’° λ‚΄κ°€ μ“Έλ €κ³  λ§Œλ“  가계뢀 μ• ν”Œλ¦¬μΌ€μ΄μ…˜. Powered by AI-DLC.

Resources

License

Stars

Watchers

Forks

Contributors

Languages