프로젝트를 하는 과정에 있어서 기록하는 것이다.
잘못된 부분이나 수정이 필요한 부분은 꾸준히 수정할 예정이다.
🚨 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 : NUser : Answer = 1 : NQuestion : Answer = 1 : N- User : QuestionVote = N : N (?)
- User : AnswerVote = N : N(?)
Question : QuestionVote = 1 : 1 (?)Answer : AnswerVote = 1 :1 (?)
2️⃣ Spring Security 공부
- 인증 된 사용자가 질문을 올리는 방법
- OAuth2 여러 개 사용하는 방법
- 로그인 기능 구현 공부
'Study in Bootcamp > Pre-Project' 카테고리의 다른 글
[Pre-Project] Day 8 : JWT 이용한 로그인 및 권한 부여 (0) | 2022.10.31 |
---|---|
[Pre-Project] Day 7 : CheckStyle Convention Build (0) | 2022.10.28 |
[Pre-Project] Day 6 : 연관관계 매핑 (0) | 2022.10.28 |
[Pre-Project] Day 4 : ERD 작성, 테이블 명세서 작성, API 명세서 작성 (0) | 2022.10.25 |
[Pre-Project] Day 3 : 초기 설정 및 사용자 요구사항 정의서 (0) | 2022.10.24 |
댓글