# Financial 계좌, 거래, 카테고리, 할부, 대출, 반복거래, 가맹점 자동분류 규칙을 관리하는 PHP 기반 개인 금융 관리 서비스입니다. ## 프로젝트 성격 Financial은 개인 금융 데이터를 서버 렌더링 PHP 화면에서 관리하는 내부 서비스입니다. 계좌와 거래를 중심으로 카테고리, 할부, 대출, 반복거래, 가맹점 규칙을 연결해 실제 지출/상환 흐름을 기록합니다. 공통 인증 bootstrap이 세션, remember token, CSRF, private no-store header를 담당합니다. ## 주요 기능 - 계좌 생성/수정/목록 - 거래 생성/수정/삭제/조회 - 카테고리 관리 - 할부 등록, 청구 처리, 선납 처리 - 대출 등록, 상환 등록, 선납 처리 - 반복거래 관리 - 가맹점 자동분류 규칙 관리 - 카테고리 추천 API - PWA manifest와 icon 제공 ## 주요 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`: 기존 service worker 등록 정리 - `public/sw.js`: 과거 등록된 service worker 정리용 파일 `asset-version.php`는 `app`의 PHP 파일과 `public`의 PHP/HTML/JS/CSS/manifest/icon 파일을 읽어 크기, 수정 시각, sha256 hash를 묶은 버전을 만듭니다. 공통 헤더, 로그인, 회원가입 화면에서 `asset-reload.js`를 불러오며, 파일 묶음 hash가 달라지면 Cache Storage를 비우고 service worker 등록을 해제한 뒤 현재 화면을 다시 엽니다. 현재 URL의 `assetReload` 토큰이 최신 파일 묶음 hash와 다르면 첫 진입도 토큰을 붙인 URL로 다시 열어 낡은 JS/CSS가 먼저 실행되는 상황을 줄입니다. 모바일/삼성 브라우저 호환을 위해 화면 복귀, 온라인 복귀, 터치/클릭 복귀 이벤트도 확인하고, Web Storage 실패 시 쿠키 fallback으로 이전 버전을 비교합니다. 화면 PHP는 `no-store` 헤더를 내려 문서 자체가 오래 남지 않게 하고, service worker는 더 이상 새로 등록하지 않습니다. ## 데이터/저장소 - 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 파일 권한을 관리합니다.