Files
financial/README.md
T

4.6 KiB

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.phpapp의 PHP 파일과 public의 PHP/HTML/JS/CSS/manifest/icon 파일을 읽어 크기, 수정 시각, sha256 hash를 묶은 버전을 만듭니다. 공통 헤더, 로그인, 회원가입 화면에서 asset-reload.js를 불러오며, 파일 묶음 hash가 달라지면 Cache Storage를 비우고 현재 화면을 다시 엽니다. 현재 URL의 assetReload 토큰이 최신 파일 묶음 hash와 다르면 첫 진입도 토큰을 붙인 URL로 다시 열어 낡은 JS/CSS가 먼저 실행되는 상황을 줄입니다. 모바일/삼성 브라우저 호환을 위해 화면 복귀, 온라인 복귀, 터치/클릭 복귀 이벤트도 확인하고, 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 파일 권한을 관리합니다.