Skip to content

Wanted-Pre-Onboarding-Backend7-R/tasty-finder

Repository files navigation

logo

TastyFinder - 지리기반 맛집 추천 웹 서비스

나의 현재 위치 또는 지정한 위치를 기반으로 맛집의 메뉴를 추천해주는 서비스입니다.


목차


프로젝트 소개


Skills

SpringBoot Java JWT

MySQL Redis Swagger



컨벤션 규칙

Code 컨벤션 - click
  • Code 컨벤션
    • 변수명: 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;
          }
      }
      // 마지막 빈 줄
    • 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();
           }
       }
Git 컨벤션 - click
  • git commit 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` 중복 로직 추출
    
    예외 압축
    메소드 위치 변경
    메소드 이름 변경
    "
  • git branch rules

    # branch name format
    git checkout -b "feat/#{이슈번호}-{내용}"

ERD 설계

tasty-finder

API 설계

Swagger:

Notion

스크린샷 2023-11-08 오후 8 44 01

프로젝트 일정관리

스크린샷 2023-11-08 오후 8 58 52

구현과정(설계 및 의도)



트러블슈팅 및 회고



Members

name role github email
강석원 팀원 @piopoi [email protected]
모장현 팀원 @mojh7 [email protected]
박준승 팀원 @OldRabbit736 [email protected]
이소현 팀원 @sohyuneeee [email protected]
정준희 팀장 @JoonheeJeong [email protected]