Files
financial/README.md
T

84 lines
4.5 KiB
Markdown

# Financial
계좌, 거래, 카테고리, 할부, 대출, 반복거래, 가맹점 자동분류 규칙을 관리하는 PHP 기반 개인 금융 관리 서비스입니다.
## 프로젝트 성격
Financial은 개인 금융 데이터를 서버 렌더링 PHP 화면에서 관리하는 내부 서비스입니다. 계좌와 거래를 중심으로 카테고리, 할부, 대출, 반복거래, 가맹점 규칙을 연결해 실제 지출/상환 흐름을 기록합니다.
공통 인증 bootstrap이 세션, remember token, CSRF, private no-store header를 담당합니다.
## 주요 기능
- 계좌 생성/수정/목록
- 거래 생성/수정/삭제/조회
- 카테고리 관리
- 할부 등록, 청구 처리, 선납 처리
- 대출 등록, 상환 등록, 선납 처리
- 반복거래 관리
- 가맹점 자동분류 규칙 관리
- 카테고리 추천 API
- PWA assets와 offline 화면 제공
## 주요 API/흐름
- `public/api/category_suggest.php`: merchant rule 기반 카테고리 추천
- 일반 form POST 저장: 각 화면의 검증 후 서비스 함수로 저장
- 저장 후 redirect/flash 메시지로 사용자 피드백 제공
## 구성
- `app/config/database.php`: DB 설정 bridge
- `app/lib/auth.php`: 인증, remember token, CSRF, no-store header
- `app/lib/db.php`: PDO 연결
- `app/lib/account_service.php`: 계좌 서비스
- `app/lib/transaction_record_service.php`: 거래 fingerprint, 입력 검증, 공통 거래 row 기록
- `app/lib/transaction_service.php`: 거래 저장과 조회
- `app/lib/installment_service.php`: 할부 청구와 선납 처리
- `app/lib/loan_service.php`: 대출과 상환 처리
- `app/lib/recurring_service.php`: 반복거래 처리
- `app/lib/merchant_pattern_service.php`: 가맹점 규칙과 추천
- `public/*.php`: 사용자 화면과 form 처리
- `public/asset-version.php`: 앱/PWA 파일 묶음의 현재 hash를 내려주는 JSON 엔드포인트
- `public/assets/app.css`: 화면 스타일
- `public/assets/asset-reload.js`: 열린 브라우저에서 파일 묶음 hash가 달라졌는지 확인하고 새로 여는 스크립트
- `public/assets/pwa.js`, `public/sw.js`: PWA 동작
`asset-version.php``app`의 PHP 파일과 `public`의 PHP/HTML/JS/CSS/manifest/icon 파일을 읽어 크기, 수정 시각, sha256 hash를 묶은 버전을 만듭니다. 공통 헤더, 로그인, 회원가입 화면에서 `asset-reload.js`를 불러오며, 파일 묶음 hash가 달라지면 Cache Storage를 비우고 현재 화면을 다시 엽니다. 모바일/삼성 브라우저 호환을 위해 화면 복귀, 온라인 복귀, 터치/클릭 복귀 이벤트도 확인하고, Web Storage 실패 시 쿠키 fallback으로 이전 버전을 비교합니다.
## 데이터/저장소
- financial DB tables: 계좌, 거래, 카테고리, 할부, 대출, 반복거래, 가맹점 규칙
- `/home/seo/secret/financial.php`: DB 접속 secret
## 처리 흐름
1. 사용자가 화면을 열면 인증과 권한을 확인합니다.
2. POST 요청은 CSRF token을 검증합니다.
3. 입력값 검증 후 도메인별 service 함수에서 저장합니다.
4. 저장 후 redirect와 flash 메시지로 응답합니다.
5. 카테고리 추천 API는 merchant rule 우선순위와 confidence를 반환합니다.
거래 테이블에 실제 row를 추가하는 공통 경로는 `transaction_record_service.php`입니다. 일반 거래 등록/수정은 같은 입력 검증 함수를 쓰고, 대출 실행/상환/중도상환과 할부 선결제도 공통 기록 함수를 통해 `transactions`에 남깁니다. 카드/계좌/할부/대출 기능을 바꿀 때는 먼저 이 공통 기록 규칙과 잔액 재계산 흐름을 확인해야 합니다.
## 주요 함수/모듈
- `auth.php`: 로그인, 세션, CSRF
- `transaction_record_service.php`: 거래 공통 검증과 row 기록
- `transaction_service.php`: 거래 저장과 조회
- `installment_*`: 할부 청구와 선납 처리
- `merchant_rules.php`: 가맹점 자동분류 규칙 관리
## 보안
- 로그인 세션과 remember token을 사용합니다.
- POST form은 CSRF token을 검증합니다.
- 개인 금융 데이터 응답은 private/no-store 상태를 유지해야 합니다.
- 레포에는 DB 비밀번호를 포함하지 않고, 배포 환경의 secret 파일에서만 로드합니다.
## 운영 체크포인트
- 삭제된 미사용 테이블이 다시 참조되지 않는지 확인합니다.
- 가맹점 추천 규칙의 우선순위 충돌을 주기적으로 점검합니다.
- DB 백업과 secret 파일 권한을 관리합니다.