개인프로젝트

[개인 프로젝트] 가계부 프로젝트 step1 : 기획

ydin 2024. 4. 24. 21:54

1. 시작 계기

다시 취업을 준비하면서 이력서와 포트폴리오에 갱신이 필요함을 크게 느꼈다. 기존에 진행했던 프로젝트는 기술적으로 협업적으로 내가 봐도 크게 매력있다고 생각하지 않아서 프로젝트를 하나 더 해야겠다 싶었다.

 

가장 고민이 되었던 건 팀 프로젝트와 개인 프로젝트 중 어떤 방식으로 프로젝트를 진행할 것이었다. 팀 프로젝트에 합류해서 협업 능력과 체계적으로 개발을 할 수 있지만 지금까지 경험상 여럿이 같이 진행하는 만큼 일정이 빠그라지는 상황도 자주 발생하기도 하고, 회사에서 개발 업무를 하면서 아직 협업하기에는 개인 실력이 많이 부족하다고 생각해 개인 능력을 키우는 것이 더 필요하다고 생각했다. 그래서 삽질을 하더라도 혼자서 해보는 경험도 나쁘지 않을 것이라 생각해 개인 프로젝트를 진행해야겠다고 결정했다.

 

이전에 부트캠프에서 개인 프로젝트로 회원가입, 로그인, CRUD 같이 기본적인 서버 기능들은 구현해 놓은 프로젝트가 있어서 여기에 살을 더 붙이는 쪽으로 프로젝트 방향성을 잡았다. 프로젝트 테마는 가계부이다. 서버를 더 발전시킬 수 있으면 백엔드 개발자로서는 더 나을 수 있긴 하겠지만, 이력서와 포트폴리오를 면접관에게 어필하기 위해서는 일단 가시적인 결과물이 있으면 설득에 더 용이할 것이라 생각해 화면을 추가로 구현하기로 했다. html, css, 부트스트랩 정도는 조금은 알지만 javascript는 아예 몰랐기 때문에 막막하긴 했지만 일단 시작했다. 추가로 백엔드 개발자이지만, 프론트 관련해서 어느정도 숙지는 필요하다고 생각했기에 이 기회에 프론트 관련해서 뭔가를 만들어 보는 것도 괜찮겠다 싶었다.

 

2. 기획

2-1. 프로젝트 주제

사용자가 지출 내역을 직접 입력하고 1달/1년 단위로 카테고리별로 얼마를 썼는지 지출내역을 보여주는 가계부 프로젝트

 

2-2. 소프트웨어 구조

2-3. 기술스택

[FrontEnd]

HTML, CSS, BootStrap, Jquery, JavaScript

 

[BackEnd]

Java8, SpringBoot, Spring Data JPA, Spring Security, WebSocket, JWT, MySQL, Redis, Junit5, Mockito

 

[Tool]

Git/Github

 

2-4. 요구사항

[회원가입]

  • 입력 내용
    • 이메일
      • 이메일 형태의 값만 입력 가능
      • 한번 설정하면 수정 불가능
      • 이메일 중복 불가능
    • 이메일 인증
      • 인증키는 6자리의 임의의 숫자
      • 인증 이메일 전송 후 3분 이내로 인증키 입력
      • 이메일 인증 성공시 24시간 안에 회원가입 가능
    • 비밀번호
      • passwordEncoder로 암호화돼서 저장
    • 이름
      • 이름 중복 가능

[로그인]

  • 스프링 시큐리티와 JWT를 이용해서 구현
  • 입력 내용
    • 아이디
    • 비밀번호
  • Cookie에 access token 담아서 진행(유효시간은 30분)

 

[사용자]

  • 사용자 정보 조회
    • 사용자 본인만 가능
    • 이름
    • 이메일
    • 비밀번호 수정 가능한 버튼
    • 현재시점의 month와 설정한 예산
  • 사용자 정보 재설정
    • 이름 변경 가능
    • 비밀번호 변경 가능
      • 해당 기능은 별도의 기능으로 분리
    • 해당 month의 예산 변경 가능
      • 숫자 0이상이어야 함
    • 이메일 재설정 불가능
  • 회원 탈퇴
    • 본인만 탈퇴 가능
    • soft delete 형식으로 회원 삭제
      • 회원 테이블 role 컬럼의 값 DELETE로 변경 -> role != DELETE인 회원 체크 로직 필요

 

[예산]

  • 예산 저장
    • 사용자가 목표 예산 직접 설정
    • 매월 1일 이후 설정 가능
  • 예산 수정
    • 계정주만 변경 가능
    • 사용자 정보에서 예산 수정 가능
  • 예산 삭제
    • 예산은 해당 앱에서 필수인 필드이므로 삭제 하지않는 것으로 구현할 예정
  • 알림 전송 - 웹소켓
    • 달력에서 ‘예산 알림 받기’ 버튼 클릭시 요청한 월에 대한 예산 상태 알림
    • [추후 일정 시간에 자동 알림 구현 예정]

 

[매일 지출내역]

  • 지출 내역 입력 및 저장
    • 본인 페이지 외에 지출 내역 추가 불가능
    • 지출 금액을 입력한다
    • 결제 수단을 입력한다
    • 상점 이름 입력(ex. 스타벅스, 스타벅스 서판교점,,,)
    • 지출 카테고리는 1개 선택가능
    • 지출내역에 대한 메모 입력 가능
      • 일반 문장 형태(ex. ‘배고파서 편의점’)
    • 객체 생성 시간은 자동 입력
  • 지출 내역 조회
    • 날짜에 해당하는 지출내역 리스트 형태로 조회 가능
      • 조회 할때마다 DB쿼리 날리면 부하가 올 수 있으므로 캐시 이용
  • 지출 내역 수정
    • 본인 페이지 외에 지출 내역 수정 불가능
    • 지출 내역 선택 시 수정할 수 있다
      • 지출 금액, 결제 수단, 상점 이름, 카테고리 ,메모, 지출 날짜 수정 가능
  • 지출 내역 삭제
    • 본인 페이지 외에 지출 내역 삭제 불가능

 

[매일 지출내역 검색]

  • 키워드로 검색 가능
    • 거래처와 메모에 대응되는 매일 지출내역 리스트 조회
    • 해시태그로 구현은 지금 상황에서는 어려워 메모로 변경

 

[카테고리]

  • 카테고리 id로 식별하므로 카테고리명 중복 가능
  • 카테고리 추가
    • 한글/알파벳/숫자/특수기호 모두 사용 가능
  • 카테고리 수정
  • 카테고리 삭제
    • 사용자만 카테고리 삭제 가능
    • 카테고리명 삭제 시 관련된 지출내역의 카테고리명을 “미분류”으로 변경
  • 카테고리 조회
    • 전체 리스트만 조회
      • 리스트에는 각 카테고리의 이름이 나열되어있음

 

[Monthly 지출내역 통계]

  • 한달치 매달 지출 내역을 합산해 카테고리 별로 분류해서 조회
    • 이번달을 조회할 때와 지난달을 조회할 때 로직 구분해서 DB 부하가 좀 더 적은 방향으로 구현
    • 예) 12월 총 지출 : 50만원, [식비 : 18만원, 카페 : 8만원 ,,, ]
  • 매월 1일 0시 정각에 지난달 데이터 저장
    • 한달 총 지출 금액을 회원별로 나눠서 저장
    • 카테고리별 한당 총 지출 금액을 회원별로 나눠서 저장

 

[Yearly 지출내역 통계]

  • 한 해의 모든 카테고리 별 지출내역을 모두 합산해서 조회
    • 결과는 내림차순으로 출력
    • 예) 1위 식비(xxx만원), 2위 쇼핑(xxx만원),,