본문 바로가기
Study in Bootcamp/Pre-Project

[Pre-Project] Day 5 : Git Flow 꼬임, Check Point 미적용, User

by Bhinney 2022. 10. 26.

프로젝트를 하는 과정에 있어서 기록하는 것이다.

잘못된 부분이나 수정이 필요한 부분은 꾸준히 수정할 예정이다.


🚨 Git Flow 꼬임

  • 문제 : 백엔드 초기 설정 파일이 main으로 merge된 이후, dev-be 파일로 동기화가 되지 않았다.
  • 해결 : main의 변화를 dev-be로 merge + 이전에 날린 PR 기록 close.

✔️ Check 

1️⃣ 항상 먼저 dev-be 브랜치 상태를 확인하기!

     👉🏻 이걸 확인하지 못해서 main과 dev-be가 동기화 되지 않아, 이후 문제 발생 😭

           때문에 충돌...문제도 발생하고, 동기화가 되지 못함!!

2️⃣ dev-be 브랜치를 pull 하고 그 이후에 branch 생성해서 이동 후 작업!

3️⃣ merge 하지 않고 branch 이동을 했는데, 이전의 데이터 값이 그대로 같이 이동..

     👉🏻 그냥 지우고 작업했음. 그래도 문제는 없었다. 하지만 많아지면 .. 새 창을 띄울 것!

4️⃣ 원격 branch가 지워졌는데, 로컬 브랜치가 안 지워지고 아래의 지우는 코드가 이뤄지지 않음..!

git branch -d [branch 이름]
git branch -D [branch 이름]

// branch 없다고 뜬다.

 

git fetch -p

위의 코드가 로컬 저장소를 원격 저장소의 최신 정보로 동기화 하는 것이다!

입력하니 원격에서는 지워졌으나 로컬에서 지워지지 않은 브랜치들이 사라졌다!!

 


🚨체크 포인트가 저장되지 않음

  • 문제 : Naver Convention을 지정했으나 새로 파일을 열 때마다 저장되지 않고, 새로 불러와야한다.
  • https://creampuffy.tistory.com/128 참조하여 팀원분이 세팅으로 commit 하기로 하였다.
  • 지금 프리 프로젝트 말고, 다른 프로젝트에 적용해보니 잘 되었다!

✅ User Entity Class 생성

  • USER는 예약어로 존재하기 때문에 컬럼 이름을 USERS로 지정해주었다.
  • 깃헙 꼬여서 3번 재생ㅅ......(🤯)

✅ ExceptionHandler

  • Not Found는 우선 Exception Code를 구현하지 않고 HttpStatus로 처리하였다.
  • Method Not Allowed에서 이유 없는 에러가 발생하였다.
    (@ResponseStatus 어노테이션에 Method Not Allowed 애트리뷰트를  쓸 수 없다고..)

    해당 이유를 찾아보고 싶은데, 왜 해결이 되었는가.. 우선 찾아보자..!

 

☝🏻 DTO 클래스의 유효성 검사에서 에러가 발생할 경우

@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ErrorResponse handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {
   final ErrorResponse response = ErrorResponse.of(exception.getBindingResult());

   return response;
}

✌🏻 URI 유효성 검사에서 에러가 발생할 경우

@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ErrorResponse handleConstraintViolationException(ConstraintViolationException exception) {
   final ErrorResponse response = ErrorResponse.of(exception.getConstraintViolations());

   return response;
}

🤟🏻 NOT FOUND 에러

  • 이후 "User Not Found" 같이 출력이 필요할 경우, 수정 예정
  • 왼쪽 : RuntimeException(HttpStatus.NOT_FOUND.getReasonPhrase())인 경우 출력
  • 오른쪽 : RuntimeException(HttpStatus.NOT_FOUND.toString())인 경우 출력

@ExceptionHandler
@ResponseStatus(HttpStatus.NOT_FOUND)
public ErrorResponse handleResourceNotFoundException(RuntimeException exception) {
   final ErrorResponse response = ErrorResponse.of(HttpStatus.NOT_FOUND, exception.getMessage());

   return response;
}

✌🏻✌🏻회원가입 시, email의 중복을 피하기 위한 핸들러

  • email 중복 --> "User Exist" 출력
@ExceptionHandler
public ErrorResponse handleBusinessLogicException(BusinessLogicException exception) {
   final ErrorResponse response = ErrorResponse.of(exception.getExceptionCode());

   return response;
}

✋🏻 HTTP 요청에서 Method가 잘 못 요청된 경우

  • 어떤 메서드로 잘 못 들어왔는지 알려준다.

@ExceptionHandler
@ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
public ErrorResponse handleHttpRequestMethodNotSupportException(HttpRequestMethodNotSupportedException exception) {
   final ErrorResponse response = ErrorResponse.of(HttpStatus.METHOD_NOT_ALLOWED, exception.getMessage());

   return response;
}

✋🏻☝🏻 요구하는 파라미터가 입력되지 않은 경우 

  • 빠진 Param을 알려준다.

@ExceptionHandler
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ErrorResponse handleMissingRequestParameterException(MissingServletRequestParameterException exception) {
   final ErrorResponse response = ErrorResponse.of(HttpStatus.BAD_REQUEST, exception.getMessage());

   return response;
}

✋🏻✌🏻 500 에러가 나올 경우 (예 : NPE..)

  • log로 확인하는 게 좋다고 해서 우선 log로 확인할 수 있게 작성했다.
  • 추가적인 정보를 찾을 경우, 더 좋은 방법을 찾을 경우 수정할 예정이다.
  • 예시 : NullPointerException

@ExceptionHandler
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ErrorResponse handleException(Exception exception) {
   log.error("# handle Exception : ", exception);
   final ErrorResponse response = ErrorResponse.of(HttpStatus.INTERNAL_SERVER_ERROR);

   return response;
}

❗️ rm -rf [git 파일 이름] ❗️

  • 파일 이름이 같으면 함부로 하지 말ㅈㅏ....
  • 분명 A 폴더의 같은 파일을 날렸는데, B 폴더의 해당 파일이 날라간...ㄷ...
  • 다시 하고 싶으면 그냥 pull 받고, 브랜치 정리하려면 fetch를 쓰자
  • 깃 오류시 참조하면 좋은 자료 : https://mylko72.gitbooks.io/git/content/

🔥 해야할 것

: 끝나면 취소선으로 표시

1️⃣ 연관관계 매핑

  • User : Queestion = 1 : N
  • User : Answer = 1 : N
  • Question : Answer = 1 : N
  • User : QuestionVote = N : N (?)
  • User : AnswerVote = N : N(?)
  • Question : QuestionVote = 1 : 1 (?)
  • Answer : AnswerVote = 1 :1 (?)

2️⃣ Spring Security 공부

  • 인증 된 사용자가 질문을 올리는 방법
  • OAuth2 여러 개 사용하는 방법
  • 로그인 기능 구현 공부

댓글