kakao-tech-campus-2nd-step3 / Team13_BE

13조 백엔드
4 stars 5 forks source link

@RestControllerAdvice를 이용한 예외처리 및 logging 설정 #26

Closed pykido closed 4 days ago

pykido commented 1 week ago

📝 이슈 설명

(1) exception 디렉토리 내에 만들어주시면 좋을 거 같아요!

(2) 우선적으로 @RestControllerAdvice@ExceptionHandler에 대해 서치해보신 후에 작업하시는 것을 추천드립니다.

}


### (3) 모든 에러 상황을 예측하고 대처하기란 매우 힘듭니다. 따라서 자주 발생하는 에러와 예측 가능한 에러에 대해서 대비하는 것이 현명합니다. 또한 에러 문구를 최대한 풍부하게 작성해주세요! 그래야 프론트 입장에서도, 디버깅할 때도 행복합니당
1. 자주 발생하는 에러들 
   - IllegalArgumentException: 잘못된 인자 값이 전달될 때 발생
   - NullPointerException: null 참조 오류 발생 시
   - MethodArgumentNotValidException: 유효성 검증 실패 시
   - HttpRequestMethodNotSupportedException: 지원되지 않는 HTTP 메서드 요청 시
2. 예측 가능한 에러들 
   - ApplicationException.java와 ApplicationError.java 생성 

@AllArgsConstructor @Getter public class ApplicationException extends RuntimeException {

private final ApplicationError applicationError;

}

@AllArgsConstructor @Getter public enum ApplicationError { ROLE_NOT_FOUND("해당 유저가 ROLE을 가지고 있지 않습니다."), ... GUARDIAN_NOT_FOUND("해당 보호자를 찾을 수가 없습니다.");

    private final String message;

}

- 추가적으로 ApplicationError는 개발하며 추가되는 요소들이 많기에 현 단계에서 발생할 수 있는 에러들만 추려서 만들어주시면 좋을 거 같아요!

###(4) 추가적으로 resources 디렉토리 내부에 logging.yml 파일을 만들어 logging level을 조절합니다.
    - 로깅 설정의 이유는 디버깅할 때와 에러 핸들링을 대비해서입니다. 
    - 관련 자료들을 서칭하는 것을 추천드립니다. 

logging: level: root: info



## ☑️ TODO

- [x] `@RestControllerAdvice`와 `@ExceptionHandler`를 이용한 예외 처리 
- [x] 자주 발생하는 에러들 핸들링
- [x] 예측 가능한 에러들 핸들링
- [x] 로깅 설정
pykido commented 6 days ago

강철 멘토님 피드백을 참고하여 작성하였습니다 ㅎ

스크린샷 2024-09-25 오후 2 37 00
20jcode commented 6 days ago

예외 class 내부 필드에 해당하는 response에 대한 httpstatus를 추가하는 것은 별로인가요?

pykido commented 6 days ago

예외 class 내부 필드에 해당하는 response에 대한 httpstatus를 추가하는 것은 별로인가요?

ExceptionHandler 보시면 아시겠지만 ErrorResponse를 build하며 httpstatus정보를 넣어줍니다! 따라서 예외 class 내부 필드 하나하나에 httpstatus를 넣는다기보다는 ExceptionHandler를 통해 집단적으로 관리하는게 나은 거 같습니다!