Giter Site home page Giter Site logo

budgetplanner's Introduction

BudgetPlanner - 예산 관리 어플리케이션



BudgetPlanner는 사용자의 예산과 지출 관리에 대한 추천 및 관리를 도와주는 어플리케이션입니다. 사용자의 예산 및 지출을 파악하여 오늘 지출에 대한 안내와 추천을 도와주고, 사용자의 지출을 파악하여 지난 달, 지난 주, 다른 사용자와 비교 등 각종 통계를 보여줍니다.

0. 목차

1. 개발 기간

2023.11.09 ~ 2023.11.22 (14 days)

2. 프로젝트 요구사항

  • 사용자 (유저) 모듈

    • 회원가입 및 로그인 기능 구현.
    • JWT를 이용한 사용자 인증.
  • 예산 설정 및 설계 (Budget) 모듈

    • 카테고리 설정 기능 구현.
    • 모든 카테고리 목록 조회 기능 구현.
    • 예산 설정 및 수정 기능 구현.
    • 예산 설계(추천) 기능 구현.
  • 지출 기록 (Expense) 모듈

    • 지출 기록 생성, 수정, 삭제 기능 구현.
    • 지출 목록 조회 및 필터 기능 구현.
    • 지출 합계와 카테고리별 지출 합계 반환 기능 구현.
  • 지출 컨설팅 (Consulting) 모듈

    • 오늘 지출 추천 및 안내 기능 구현.
    • 사용자 상황에 맞는 멘트 제공.
    • 알림 기능 Discord Webhook 구현.
  • 지출 통계 (Statistics) 모듈

    • Dummy 데이터 생성 기능 구현.
    • 지출 통계 조회 기능 구현.
      • 지난 달 대비 총액 및 카테고리 별 소비율 계산.
      • 지난 요일 대비 소비율 계산.
      • 다른 유저 대비 소비율 계산.

3. 프로젝트 구조

자세히
└── BudgetPlanner
    ├── BudgetPlannerApplication.java
    ├── auth
    │   ├── config
    │   ├── controller
    │   ├── dto
    │   ├── filter
    │   ├── jwt
    │   └── service
    ├── budget
    │   ├── controller
    │   ├── dto
    │   ├── entity
    │   ├── repository
    │   └── service
    ├── common
    │   └── exception
    ├── expense
    │   ├── controller
    │   ├── dto
    │   ├── entity
    │   ├── repository
    │   └── service
    ├── expenseadvisor
    │   ├── controller
    │   ├── dto
    │   └── service
    ├── notification
    │   ├── scheduler
    │   └── service
    ├── statistics
    │   ├── controller
    │   ├── dto
    │   └── service
    └── user
        ├── entity
        └── repository

4. ERD

스크린샷 2023-11-24 오후 5 43 24

5. 동작예시

스크린샷 2023-11-22 오전 1 30 57

6. API 문서

URL : http://server:port/swagger-ui/index.html

스크린샷 2023-11-26 오후 9 33 32

budgetplanner's People

Contributors

cjw9506 avatar

Watchers

 avatar

budgetplanner's Issues

refactor: 오늘 추천, 가이드 기능 리팩토링

🚀 목적 및 필요성

오늘 예산 추천 기능, 예산 안내 기능 및 스케쥴러, 알림기능 리팩토링하기(코드가 너무 지저분)

📋 작업 상세 내용

  • 오늘 예산 추천 리팩토링
  • 오늘 예산 안내 리팩토링
  • 스케쥴러 및 웹훅 세팅 리팩토링

📎 참고 사항

refactor: 설정 정보 추가 및 변경

🚀 목적 및 필요성

application.properties 의 내용을 약간 변경합니다.

📋 작업 상세 내용

  • 설정 정보 변경

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feat: 지출 CRUD 구현

🚀 목적 및 필요성

지출한 기록을 관리할 CRUD를 작성합니다.

📋 작업 상세 내용

  • 지출 CRUD 구현

📎 참고 사항

feat: 예산 설정 및 추천 api 구현

🚀 목적 및 필요성

유저가 예산을 카테고리별로 지정해서 등록합니다.
예산 설정을 고민하는 유저는 추천기능을 사용해 다른 유저들의 평균 카테고리 별 예산을 제공합니다.

📋 작업 상세 내용

  • 예산 설정 api 구현
  • 예산 설정 추천 api 구현
  • 관련 테스트 작성

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feat: 오늘 지출 안내 기능 구현

🚀 목적 및 필요성

  • 오늘 지출한 내용 총액카테고리 별 금액을 알려줍니다.
  • 월별설정한 예산 기준 카테고리 별 통계 제(적정 금액, 지출 금액, 위험도 등)

📋 작업 상세 내용

  • 오늘 지출 안내 api 구현

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feat: 로그인 API 및 refresh토큰 발급 구현

🚀 목적 및 필요성

계정과 비밀번호로 로그인을 진행하는 api를 구현합니다.

📋 작업 상세 내용

  • 로그인 api 구현
  • 로그인 시 jwt 발급
  • 로그인 후 security filter 적용
  • 토큰 재발급 api 구현

📎 참고 사항

test: 오늘 지출 안내 테스트 구현

🚀 목적 및 필요성

오늘 지출 안내 기능 테스트 코드를 작성합니다.

📋 작업 상세 내용

  • 오늘 지출 안내 기능 테스트 코드 작성

📎 참고 사항

feat: security 인증, 인가 및 jwt 설정

🚀 목적 및 필요성

사용자 인증과 인가에 대한 기본적인 셋팅을 진행합니다.
사용자 인증과 인가는 jwt로 이루어집니다.

📋 작업 상세 내용

  • 권한이 필요한 모든 API 요청은 Header 에 JWT가 항시 포함되며, JWT 유효성을 검증합니다.
  • security 설정(custom filter 구현 등)을 진행합니다.

📎 참고 사항

feat: 스케쥴러 및 웹훅 세팅

🚀 목적 및 필요성

  • 오늘 지출 추천/안내 를 위한 스케줄러를 구현합니다.
  • spring quartz 사용 예정
  • Discord Webhook을 위한 세팅

📋 작업 상세 내용

  • 스케줄러 구현하기!
  • 디스코드 웹훅 세팅하기!

📎 참고 사항

feat: 회원가입 api 구현

🚀 목적 및 필요성

사용자 회원가입을 위한 api를 구현합니다.
사용자는 계정과 비밀번호를 통해 회원가입을 진행합니다.
계정unique합니다.
비밀번호암호화하여 저장합니다.
계정비밀번호필수 입력값이며, 비밀번호최소 10글자 이상, 숫자, 문자, 특수문자 중 2가지 이상을 조합해야 합니다.

📋 작업 상세 내용

  • 비밀번호 암호화 구현
  • validation 적용
  • 회원의 계정은 unique
  • 회원가입 api 구현
  • 필터에 회원가입 permit 설정

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feat: 예산 설정에 사용할 카테고리 조회

🚀 목적 및 필요성

예산 설정에 사용하는 카테고리 목록 조회 api를 구현합니다.

📋 작업 상세 내용

  • 카테고리 목록 조회 api 구현
  • 관련 테스트 구현

📎 참고 사항

feat: 오늘 지출 추천 기능 구현

🚀 목적 및 필요성

설정한 월별 예산을 만족하기 위해 오늘 지출 가능한 금액을 총액카테고리 별 금액으로 제공합니다.

  • 고려사항1 : 앞선 일자에서 과다 소비하였다 해서 오늘 예산을 극히 줄이는 것이 아니라, 이후 일자에 부담을 분배한다.
  • 고려사항2 : 기간 전체 예산을 초과하더라도 0원 또는 음수의 예산을 추천받지 않아야 한다.
  • 유저의 상황에 맞는 고려사항1 문장의 멘트 노출

📋 작업 상세 내용

  • 오늘 지출 추천 api 구현

📎 참고 사항

feat: 더미데이터 생성

🚀 목적 및 필요성

통계를 위한 더미데이터를 생성합니다.

📋 작업 상세 내용

  • 더미데이터 생성

📎 참고 사항

test: 오늘 지출 추천 기능 테스트

🚀 목적 및 필요성

오늘 지출 추천 기능 테스트 코드를 작성합니다.

📋 작업 상세 내용

  • 오늘 지출 추천 기능 테스트 코드 작성

📎 참고 사항

test: 지출 CRUD 테스트 구현

🚀 목적 및 필요성

지출 CRUD에 대한 테스트를 작성합니다.

📋 작업 상세 내용

  • 지출 CRUD 테스트 작성

📎 참고 사항

refactor: Spring Security + JWT 리팩토링

🚀 목적 및 필요성

초기에 작성한 security 및 jwt서비스가 미흡하여 리팩토링 진행

📋 작업 상세 내용

  • security 리팩토링
  • jwt 리팩토링
  • 그 외 리팩토링

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feat: 통계 리팩토링

🚀 목적 및 필요성

  • 코드 가독성 증진
  • 불필요한 쿼리 줄여서 최적화하기

📋 작업 상세 내용

  • 저번달 비교 쿼리 최적화
  • 다른 유저와의 비교 쿼리 최적화
  • 코드 리팩토링

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

docs: swagger 적용

🚀 목적 및 필요성

API문서 swagger 문서로 만들기!

📋 작업 상세 내용

  • swagger 적용

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

refactor: 지출컨설팅 리팩토링

🚀 목적 및 필요성

기존 : 오늘 지출 조회 + 이번달 지출 조회
변경 : 이번달 지출 조회(필터링 - 오늘 지출)
오늘 지출 안내에서 expense의 조회가 2번 일어나는데, 한번하고 필터링으로 변경

📋 작업 상세 내용

  • 오늘 지출 안내 및 추천 코드 리팩토링

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feat: 전역 예외 설정

🚀 목적 및 필요성

�전역적인 예외 처리를 위한 코드를 작성합니다.
ErrorCode Enum 클래스를 사용하여 애플리케이션에서 발생할 수 있는 에러 유형들을 정의합니다.

📋 작업 상세 내용

  • GlobalExceptionHandler 작성
  • CustomException 작성
  • ErrorResponse Dto 클래스 작성
  • ErrorCode Enum 클래스 작성

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feat: 예산 설정 및 설계

🚀 목적 및 필요성

예산에 대한 설정과 카테고리에 대한 도메인을 설계합니다.

📋 작업 상세 내용

  • 예산 도메인 작성
  • 카테고리 enum 작성
  • 유저와의 연관관계 설정

📎 참고 사항

refactor: 웹훅 서비스단 코드 이전하기

🚀 목적 및 필요성

지출 컨설팅과 웹훅 코드가 거의 유사하다.
한쪽에 있는 것을 입출력만 바꿔서 이용하면 되는데,
거의 복붙 수준으로 쓰여져 있는 것을 바꾸고,
컨설팅 서비스단에 웹훅 메서드를 만들어 놓을 예정!

📋 작업 상세 내용

  • 코드 이전하기 + 약간의 수정

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feature: 토큰 재발급 및 로그아웃 구현

🚀 목적 및 필요성

  • AT가 만료될때마다 다시 로그인하는 사용자 경험은 좋지 않기 때문에 토큰 재발급 기능 구현할 예정
  • 로그아웃 기능 구현

📋 작업 상세 내용

  • 로그인 시 RT 발급 및 Redis에 저장
  • 토큰 재발급 요청 시 RT확인 후 재발급
  • 로그아웃 기능 구현 및 로그아웃 시 AT, RT 블랙리스트 추가

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

refactor: 지출 리팩토링 및 쿼리 최적화

🚀 목적 및 필요성

  • 지출 코드의 가독성 및 효율을 위해 최적화를 진행합니다.
  • 조회성능 향상 및 N+1문제 해결을 위해 쿼리 최적화를 진행합니다.

📋 작업 상세 내용

  • 지출 코드 리팩토링
  • 조회 쿼리 최적화

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feat: 카테고리 목록 데이터 캐싱

🚀 목적 및 필요성

Redis를 통한 데이터 캐싱

데이터 캐싱 TTL = 1day

  • 카테고리 목록
  • 예산 추천
  • 지출 목록 조회
  • 지출 컨설팅(오늘 지출 추천 및 안내 - 알림 발송 1분전)

📋 작업 상세 내용

  • 데이터 캐싱 진행

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

feat: 통계 API 구현

🚀 목적 및 필요성

지출 통계 (API)

  • 지난 달 대비 총액, 카테고리 별 소비율.
    • 오늘이 10일차 라면, 지난달 10일차 까지의 데이터를 대상으로 비교
    • ex) 식비 지난달 대비 150%
  • 지난 요일 대비 소비율
    • 오늘이 월요일 이라면 지난 월요일 에 소비한 모든 기록 대비 소비율
    • ex) 월요일 평소 대비 80%
  • 다른 유저 대비 소비율
    • 오늘 기준 다른 유저 가 예산 대비 사용한 평균 비율 대비 나의 소비율
    • 오늘기준 다른 유저가 소비한 지출이 평균 50%(ex. 예산 100만원 중 50만원 소비중) 이고 나는 60% 이면 120%.
    • ex) 다른 사용자 대비 120%

📋 작업 상세 내용

  • 통계 api 구현

📎 참고 사항

  • (여기에 참고할 사항을 작성하세요.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.