참조
1. 프로젝트 개요
현재 많은 가계부 서비스들이 자산의 다양한 형태를 관리할 수 있는 서비스를 제공하고 있다.
하지만, 재테크에 관심이 없다면 애플리케이션에서 제공하는 기능을 이해하고 사용하기가 어렵다. 10원모아 서비스는 가계부에 필요한 핵심 서비스를 최소한으로 제공함으로써 복잡한 가계부 서비스를 쉽게 사용할 수 있도록 기획하였다.
서비스는 SpringBoot, React를 사용해 구현하였으며, AWS를 통해 배포하였다.
10원모아 서비스는 수입과 지출 중심의 가계부를 관리하도록 하여 기존의 복잡하게 느껴지는 가계부 서비스를 더욱 쉽게 접근하고 사용할 수 있도록 하였으며, 그래프로 통계페이지를 시각화 하여 가계부에 등록된 정보를 더욱 효과적으로 전달하고자 하였다.
2. 프로젝트 팀 구성 및 역할
- Front
훈련생 | 역할 | 담당 업무 |
임재현 | 팀장 | ▶ 프로젝트 초기 세팅 및 컨벤션 설정
▶ 수입/지출 등록, 수정 페이지 구현
▶ 검색 페이지 구현
▶ 카테고리 모달 구현 |
신다혜 | 팀원 | ▶ 로그인, 회원가입 페이지 구현
▶ 가계부 일별, 월별 페이지
▶ 구글 로그인 Oauth2 연결
▶ Refresh 토큰 세팅 작업 |
정현진 | 팀원 | ▶ 공통 컴포넌트 구현 (button, input, dropdown, checkbox)
▶ reset-css, 디자인 시스템 세팅
▶ 달력 페이지 구현 (tui-calendar)
▶ 통계 페이지 구현 (d3 라이브러리) |
조승희 | 팀원 | ▶ CI/CD 구축
▶ 예산페이지 구현
▶ react-query 에러 핸들링 |
- Back
훈련생 | 역할 | 담당 업무 |
길근오 | 팀장 | ▶ 카테고리, 검색 API 구현
▶ Flyway, Slack 로깅 적용
▶ CORS 설정 |
정경일 | 팀원 | ▶ 지출, 일일상세내역, 월별 상세내역, 월별 합계, 연간합계, 달력 API 구현
▶ Pagination Custom 작성
▶ Jacoco 적용
▶ Spring AOP로 API 요청 정보와 API 경과 시간 로깅 |
강태산 | 팀원 | ▶ 수입, 통계 API 구현
▶ CI/CD 구축 |
이한주 | 팀원 | ▶ JWT 기반 로그인 기능 구현
▶ Oauth2(구글) 로그인 기능 구현
▶ 로그아웃, 회원 탈퇴 기능 구현
▶ ec2 Nginx, Https 설정
▶ MySQL + Docker + SpringBoot 연결 |
3. 프로젝트 수행 절차 및 방법
구분 | 기간 | 활동 | 비고 |
사전 기획 | ▶ 7/15(금) ~ 7/19(화) | ▶ 프로젝트 기획 및 주제 선정
▶ 기획안 작성 |
▶ 아이디어 선정
|
프로젝트 설계 |
▶ 7/19(화) ~ 7/22(금)
| ▶ MoSCow 작성
▶ 피그마 작성
▶ ERD 설계 |
▶ 일정산정 및 설계
|
MVP1 구현 |
▶ 7/23(토) ~ 8/3(수)
| ▶ 등록 페이지 & API 구현
▶ 수정, 삭제 API 구현
▶ 일일 페이지 조회 구현
▶ 일반 로그인 구현 |
▶ Working App Demo 영상 제출
|
MVP2 구현
|
▶ 8/3(수) ~ 8/1O(수)
| ▶ 가계부 월 별 , 검색, 통계 구현
▶ Oauth 로그인 구현 |
▶ 팀별 중간보고 실시
|
MVP3 구현 |
▶ 8/11(월) ~ 8/15(금)
| ▶ 가계부(달력), 마이 페이지,예산 구현 |
▶ 최적화, 오류 수정
|
총 개발기간 |
▶ 7/15(금) ~ 8/15(월)
(총 4주)
| ㅤ |
-
|
4. 프로젝트 수행 결과
- [프로젝트 수행 결과]는 프로젝트 결과물이 도출된 과정을 세부적으로 기록
지출 API
가계부 통계 조회 API
카테고리 API
- 카테고리 등록
- Spring Data Jpa — 쿼리 메소드
User
가 가지고 있는 카테고리를 관리하는UserCategory
와 카테고리 자체만을 관리하는Category
테이블이 따로 있어,Category
데이터가 등록되고 난 후User
,Category
정보를 활용하여UserCategory
를 등록
- 카테고리 수정
- Spring Data Jpa — Eager Fetch, Dirty Checking
- userCategoryId를 통해
UserCategory
데이터를 가져오고 이 때,User
와Category
를 Eager Fetch로 같이 가져옴 User
에 대해서는 로그인한 유저인지 확인 후, 로그인한 유저가 맞다면Category
객체의 값을 수정함. Transactional이 적용되어 있기에 메소드가 종료하면서 DirtyChecking이 일어나고 수정된 값이 DB에 반영됨
- 카테고리 삭제
- Spring Data Jpa — Bulk Update, Eager Fetch, Dirty Checking
- userCategoryId를 통해
UserCategory
데이터를 가져오고 이 때,User
와Category
를 Eager Fetch로 같이 가져옴 User
에 대해 로그인한 유저인지 확인 후,UserCategory
의Category
필드를 null로 업데이트Category
데이터를 삭제하기 전, 해당하는Category
를 가지고 있는Expenditure
와Income
에 대해서 이름 정보 최신화 작업 Bulk Update로 수행- 그 후 해당
Category
데이터를 삭제
- 해당 유저의 카테고리 조회
- Spring Data Jpa — @Query, fetch join
- User 아이디와 Category의 타입(지출, 수입)을 파라미터로 받아 아래 jpql을 통해 데이터를 가져옮
@Query("select uc from UserCategory uc " + "join fetch uc.category c " + "where uc.user.id = :userId " + "and c.categoryType = :categoryType") List<UserCategory> findByUserIdAndCategoryType( Long userId, CategoryType categoryType);
- 디폴트 카테고리 등록
- User가 가입될 때, 저장되어 있는 디폴트 카테고리의 목록을 활용하여 위의 카테고리 등록 메서드를 호출하여 등록함
검색 API
Jpa - native Query, union, paging 메서드
회원 API
- 회원가입
- email, 비밀번호, 사용자명을 요청해 DB에 저장한다.
- 로그인
- 입력한 이메일과 비밀번호가 DB에 있는 정보와 일치하면 Jwt토큰으로 access, refersh token을 발급한다.
- 토큰 재발급
- access-token이 만료가 된 경우 토큰 재발급을 요청한다.
- access-token과 매칭되는 refresh-token의 유효기간이 남아있다면 access-token을 재발급한다.
- 로그아웃
- 로그아웃을 요청한 회원의 access-token을 redis에 등록한다. 서버로 들어오는 요청의 access-token이 redis에 등록되있는지 확인한다.
- 회원의 refresh-token을 삭제 해 토큰 재발급을 막는다.
- 회원삭제
- 가계부 DB에 회원과 매칭되는 모든 데이터를 삭제한다.
- DB에서 회원 정보를 삭제한다.
- 회원의 acess, refresh 토큰을 삭제한다.
- 비밀번호 확인
- DB에 저장되어 있는 비밀번호와 요청한 비밀번호가 맞는지 확인
예시는 하나의 사례로 간단하게 제시한 것이므로 프로젝트의 성격에 따라 보다 자세하게 기록하며, 결과를 서술하는 과정에서는 활용된 기술(구현 방법), 핵심기능, 검증 결과* 등을 상세히 기재한다.
- 예. 빅데이터 직종의 경우 정확도 등
프로젝트의 결과는 그 과정이 잘 드러날 수 있도록 가공 과정부터 활용까지 전체적인 프로세스를 확인할 수 있도록 단계별로 작성
- 첨부 자료 예시: 결과물 사진, 시연 동영상 등 프로젝트의 우수성이 드러날 수 있는 자료
5. 자체 평가 의견
- [자체 평가 의견]은 프로젝트 결과물에 대한 프로젝트 기획 의도와의 부합 정도 및 실무 활용 가능 정도, 달성도, 완성도 등 훈련기관 또는 훈련생의 자체적인 평가 의견과 느낀 점을 작성한다.
개인 또는 우리 팀이 잘한 부분과 아쉬운 점을 작성한다.
- 멘토님 중간 피드백 내용 녹여서 작성하면 좋지 않을까?
- 유저 관리 정책 & 로그인 정책 등
- 예. 모델 평가 결과, 정확도가 00.00%로 정확도 향상을 위해 모델 추후 개선 필요
프로젝트를 수행하면서 느낀 점이나 경험한 성과에 대하여 기재할 수 있으며, 경력 계획 등과 연관시켜 팀별 공통 의견 또는 개인 의견을 자유롭게 작성한다.
수입 지출 관리용도의 가계부를 기획했고, 실제 사용자가 사용할 수 있을 수준의 애플리케이션을 만들었다.
회원정보 수정을 제외하고, 대부분의 기능 완성 90퍼센트가 넘는 완성도
정경일
대부분 계획했던 기능을 기한안에 끝냈다.
코드리뷰와 test를 통해 비즈니스에서 발생한 휴먼에러를 빨리 수정할 수 있었다.
비동기적 커뮤니케이션과 동기적 커뮤니케이션이 적절하게 조화를 이뤘다
이한주
로그인 기능을 구현해서 실제 비즈니스 개발은 하지 않았지만, 코드 리뷰를 통해 가계부, 예산 쪽 코드를 볼 수 있었다. 특히 query 개선을 점진적으로 개선해 실제 성능을 높이려 하는 과정을 간접적으로 체험할 수 있어서 좋았다.