본 서비스는 사용자들이 개인 예산을 설정하고 지출을 추적/모니터링하여 개인 재무 목표를 달성하는 데 도움을 주는 웹 애플리케이션입니다.
- A. 유저는 본 사이트에 들어와 회원가입을 통해 서비스를 이용합니다.
- B. 예산 설정 및 설계 서비스
월별총 예산을 설정합니다.- 본 서비스는
카테고리별 예산을 설계(=추천)하여 사용자의 과다 지출을 방지합니다.
- C. 지출 기록
- 사용자는
지출을금액,카테고리등을 지정하여 등록 합니다. 언제든지 수정 및 삭제 할 수 있습니다.
- 사용자는
- D. 지출 컨설팅
월별설정한 예산을 기준으로 오늘 소비 가능한지출을 알려줍니다.- 매일 발생한
지출을카테고리별로 안내받습니다.
- E. 지출 통계
지난 달 대비,지난 요일 대비,다른 유저 대비등 여러 기준카테고리 별지출 통계를 확인 할 수 있습니다.
Code 컨벤션 - click
-
변수명: boolean인 경우 형용사, 그 외 명사
-
함수명: 동사 현재형으로 시작
-
클래스명: 명사
-
if, for 중괄호 한 줄이라도 항상 치기
-
커밋하기 전에
- import 정리:
ctrl + alt(option) + o - line formatting:
ctrl(command) + alt(option) + l - 마지막 빈 줄 추가
/** 예시 **/ public class Clazz { public int addCountIfValid(int count, boolean isValid) { if (isValid) { return count + 1; } return count; } } // 마지막 빈 줄
- import 정리:
-
Optional 줄바꿈
Member member = memberRepository.findByEmail(dto.getEmail()) .orElseThrow(NotFoundMemberByEmailException::new);`
-
객체 생성 규칙
- 외부에서 직접적인 new 지양하고 내부적으로 활용
@Builder및 정적 팩토리 메서드 활용 - 정적 팩토리 메서드 이름은 단일 인자일 경우
from, 다중 인자일 경우는of로 명명 - Bean 제외 DTO, Entity들은
@All-/@Required-ArgsContructor활용 제한, 직접 코드로 생성자 작성 및 private/protected 등으로 잠그기 - 목적: 같은 타입의 필드 연속될 때 1) 잘못된 값 입력하는 human error 최소화, 2) 필드 순서를 바꿀 경우 IDE에 의한 리팩토링이 적용되지 않는 Lombok 에러 방지, 3) 가독성을 위한 작성법 통일을 위하여
@Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) @EqualsAndHashCode(of = "accountName", callSuper = false) @Entity public class Member extends BaseEntity { @Column(nullable = false, unique = true) private String accountName; @Column(nullable = false) private String email; @Column(length = 60, nullable = false) private String password; @Column(length = 6, nullable = false) private String approvalCode; @Column(nullable = false) private Boolean isApproved; @Enumerated(EnumType.STRING) private Authority authority; @Builder private Member(String accountName, String email, String password, String approvalCode, Boolean isApproved) { this.accountName = accountName; this.email = email; this.password = password; this.approvalCode = approvalCode; this.isApproved = isApproved; authority = Authority.ROLE_USER; } public static Member of(MemberJoinRequest dto, String encodedPassword, String approvalCode) { return builder() .accountName(dto.getAccountName()) .email(dto.getEmail()) .password(encodedPassword) .approvalCode(approvalCode) .isApproved(false) .build(); } }
- 외부에서 직접적인 new 지양하고 내부적으로 활용
Git 컨벤션 - click
-
commit message rules
| type | description | |----------|-------------| | feat | 새로운 기능 추가 | | fix | 버그 및 로직 수정 | | refactor | 기능 변경 없는 코드 구조, 변수/메소드/클래스 이름 등 수정 | | style | 코드 위치 변경 및 포맷팅, 빈 줄 추가/제거, 불필요한 import 제거 | | test | 테스트 코드 작성 및 리팩토링 | | setup | build.gradle, application.yml 등 환경 설정 | | docs | 문서 작업 |
# commit title format git commit -m "{커밋 유형} #{이슈번호}: #{내용}" # example of git conventions git commit -m "refactor #125: `ChatService` 중복 로직 추출 예외 압축 메소드 위치 변경 메소드 이름 변경 "
-
branch naming rules
# branch name format git checkout -b "feat/#{이슈번호}-{내용}"
| name | github | |
|---|---|---|
| 정준희 | @JoonheeJeong | [email protected] |