개인용 가계부 시스템 개발
by lostfind
아이폰으로 넘어온 후로 지금껏 안드로이드에서 사용중이던 가계부 어플을 계속해서 사용할 수 없게 되었다.
웹, 어플과도 연동 되는 Moneytree등 좋은 서비스들이 많이 있지만, 몇년간 사용하며 쌓아온 데이터를 버리기도 아깝고, 카테고리 관리등 내가 원하는 방식과는 좀 달랐기 때문에 지속적인 사용으로 연결되지 않는 문제가 있었다.
그런 이유로 내가 사용 할 가계부 시스템을 만들기로 했으며, 진행과정과 시행착오, 변경점 등을 기록해 나가고자 한다.
구현할 기능
- 카테고리
- 상위, 하위 카테고리 기능
- 자산관리
- 현금 / 통장 / 전자머니
- 은행, 전자머니 회사에서 제공하는 API로 내역 동기화
- 예산관리
- 카테고리별 고정지출
- 카테고리별 고정수입
- 신용카드 관리
- 사용기간 / 결제일
- 데빗카드 관리
- 연결 계좌 설정
- 이력, 통계
-
주식매매 기록
- 부가기능 (혹은 필수적인)
- 보안을 위한 최소한의 기능
- 로그인 기능 (유저별)
개발환경
- PHP 7.3.4
- mysql 8.0.15
- Apache/2.4.34
- MVC라우터 https://github.com/pokeb/php-mvc-router
MVC라우터에 대해
프레임워크 없이 모든 기능을 구현 하려 했으나, 라우터 기능을 레일즈처럼 간단하게 사용하기 위해 직접 구현하려고 하니 가계부 시스템 개발과는 다른 방향으로 공부가 필요 한 것 같아서 github에서 가벼운 MVC 라우터를 찾아서 사용하게 되었다.
설계
데이터 설계
m_code
- 각종 타입, 구분등을 공통으로 관리m_account
- 자산 구분과 잔액 관리m_category
- 수입, 지출에 대한 카테고리- 수정 / 추가가 필요한 부분
- 신용카드 사용기간, 결제일
- 예산관리
- 주식매매 관련
라우트
$GLOBALS['routes'] = array(
'/' => '/DepositHistory',
'/deposits' => 'DepositHistory',
'/deposits/detail/(deposit)' => 'DepositHistory:action',
'/deposits/income' => 'DepositHistory:income',
'/deposits/outgo' => 'DepositHistory:income',
'/categories' => 'Category',
'/categories/:kind' => 'Category:index',
'/categories/detail/(category)' => 'Category:action',
'/accounts' => 'Account',
'/accounts/new' => 'Account:new',
'/accounts/:id' => 'Account:detail',
);
디렉토리 구조
MVC라우터 php-mvc-router
가 제공하는 기본적인 디렉토리 구조를 따른다.
accountbbok/
├ common/autoload.php
├ config/
│ ├ config.php
│ └ routes.php
├ helpers/
│ ├ Router.php
│ └ utility.php
├ htdocs/
│ ├ .htaccess
│ ├ 404.php
│ └ index.php
├ controllers/
│ └ 컨트롤러 클래스
├ models/
│ └ 모델 관련 클래스
├ views/
│ ├ accounts/
│ └ categories/
│ └ deposits/
└ bootstrap.php
화면 설계
간단한 HTML을 이용하여 형편없는 디자인으로 일단 구현 할 예정이다.
MVC모델로 잘 구현이 되었다면 뷰에 관련된 변경은 최종적으로 진행 하여도 설계, 내부 코드 수정은 없어야 한다고 믿고 있으며, 그렇게 진행 하고자 한다.
정리
개발에 착수 한지는 3개월가량 지났지만 프레임워크를 사용할지 말지에 대한 고민과 php-MVC라우터에 대한 이해 없이 내역(deposits), 카테고리(categories)의 컨트롤러와 모델을 개발 하며 같은 곳을 여러번 수정하는 바람에 아무런 진척이 없는 상태에서, 클린아키텍처 설계까지 도입 하고 싶은 욕심이 강해 더더욱 진행이 되지 않는 상태였다.
소스가 지저분하게 되더라도 일단 구현을 하며 문제점을 파악 한 후 리팩토링으로 클린 아키택쳐가 되도록 진행하고자는 결론에 도달했다.
전체적인 계획
PHP로 기능 구현 → Vue.js로 프론트 구현 → 백엔드 Go언어로 마이그레이션
Subscribe via RSS