Skip to content

Latest commit

Β 

History

41 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’° Cash Log

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

πŸ“Έ 미리보기

Dashboard

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

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

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

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

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

πŸ’Ύ 데이터 관리

  • μž„λ² λ””λ“œ H2 파일 λͺ¨λ“œλ‘œ μ˜μ† μ €μž₯ (Docker λ³Όλ₯¨ cashlog-data)
  • 별도 DB μ»¨ν…Œμ΄λ„ˆΒ·μžκ²©μ¦λͺ… λΆˆν•„μš”
  • 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 λ¬Έμ„œ

인프라

기술 버전
H2 (μž„λ² λ””λ“œ) 2.2
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/
β”‚   └── scripts/             # 운영 슀크립트 (MySQLβ†’H2 데이터 이관 λ“±)
β”œβ”€β”€ docker-compose.yml       # 전체 μŠ€νƒ 배포
└── .env.example

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

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

  • Docker Desktop 20.10+

λΉ λ₯Έ μ‹œμž‘

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

개발 λͺ¨λ“œ

개발 μ‹œμ—λŠ” ν”„λ‘ νŠΈμ—”λ“œμ™€ λ°±μ—”λ“œλ₯Ό λ³„λ„λ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€. 별도 DB μ»¨ν…Œμ΄λ„ˆλŠ” ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  1. λ°±μ—”λ“œ μ‹€ν–‰
cd apps/backend
./mvnw spring-boot:run                                   # apps/backend/data/ 에 H2 파일 생성
# λ˜λŠ” 맀번 μ΄ˆκΈ°ν™”λ˜λŠ” 인메λͺ¨λ¦¬ DB둜 μ‹€ν–‰
SPRING_PROFILES_ACTIVE=demo ./mvnw spring-boot:run

dev ν”„λ‘œν•„λ‘œ μ‹€ν–‰ν•˜λ©΄ H2 μ½˜μ†”μ„ http://localhost:8080/h2-console μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  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             β”‚
β”‚  (port 80)  β”‚     β”‚  (port 8080)             β”‚
β”‚  + React    β”‚     β”‚  REST API + μž„λ² λ””λ“œ H2  β”‚
β”‚  SPA        β”‚     β”‚  (파일 λͺ¨λ“œ, /data)      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
   frontend                    backend
  • Nginxκ°€ 정적 파일(React SPA)을 μ„œλΉ™ν•˜κ³ , /api/ μš”μ²­μ„ λ°±μ—”λ“œλ‘œ ν”„λ‘μ‹œ
  • λ°±μ—”λ“œλŠ” Docker λ„€νŠΈμ›Œν¬ λ‚΄λΆ€μ—μ„œλ§Œ μ ‘κ·Ό κ°€λŠ₯ (ν˜ΈμŠ€νŠΈμ— 포트 λ…ΈμΆœ μ•ˆ 함)
  • H2 λ°μ΄ν„°λ² μ΄μŠ€ νŒŒμΌμ€ Docker λ³Όλ₯¨(cashlog-data)에 μ˜μ† μ €μž₯되며, DB μ»¨ν…Œμ΄λ„ˆμ™€ 자격증λͺ…이 ν•„μš”ν•˜μ§€ μ•ŠμŒ
  • SPRING_PROFILES_ACTIVE=demo둜 μ‹€ν–‰ν•˜λ©΄ 인메λͺ¨λ¦¬ H2λ₯Ό μ‚¬μš©ν•΄ μž¬κΈ°λ™λ§ˆλ‹€ μ΄ˆκΈ°ν™”λ¨ (데λͺ¨μš©)

λ°±μ—…

H2 λ°μ΄ν„°λŠ” λ³Όλ₯¨ ν•˜λ‚˜μ— λͺ¨μ—¬ μžˆμ–΄ 파일 λ³΅μ‚¬λ‘œ λ°±μ—…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

docker compose stop backend   # 파일 λͺ¨λ“œλŠ” 배타 락을 μ‚¬μš©ν•˜λ―€λ‘œ λ¨Όμ € μ •μ§€
docker run --rm -v cashlog-data:/data -v "$PWD":/out alpine \
  tar czf /out/cashlog-h2-$(date +%Y%m%d).tar.gz -C /data .
docker compose start backend

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

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

About

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

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Used by

Contributors

Languages