1년 전 진행했던 마실가실 프로젝트를 🛠️리팩토링하며 정리한 내용입니다.
최근에 마실가실 리팩토링 보완점을 들을 수 있던 좋은 기회가 있어서 관련된 내용을 리리팩토링하고 있습니다👩🏫!
현재 프로젝트에서는 유효성 검증을 전역으로 하고 있었습니다.
무슨 말이냐면.. SignUpDto에서 이메일, 전화번호, 비밀번호 등을 받을 때, 유효성 검증이 들어가는데 저는
'ValidationUtils'를 통해서 빈 값은 아닌지 형식은 맞는지 검증을 했었죠.
하지만, 회원가입 시 한 번만 쓰이는 Validation은 전역보다는 해당 DTO에서 처리하는 좋은 방법도 있다는 걸 알게 되었는데..
문제는.. 기존에 @RestControllerAdvice 설정들이 움직이지 않는다는 것,,
이 참에 예외 처리를 제대로 정리해 보고자 합니다,,🌟
SignUpRequestDTO.java
* Validation
* ValidationUtils → Annotation 활용(@NotNull, @Pattern 등)
* UserType: String → Enum 값 유효성 검사로 변경
🚨 Annotation 사용을 통해 CustomErrorCode의 검증이 이뤄지지 않음
🔨 이참에 Exception 처리 방식을 공부하면서 고치자
GlobalExceptionHandler.java
* @RestControllerAdvice를 선언하여 여러 컨트롤러에 대해 전역적으로 ExceptionHandler를 적용
* ExceptionHandler: Exception 클래스들을 속성으로 받아 처리할 예외를 지정할 수 있음
ErrorCode.java
* 클라이언트에게 보내줄 에러 코드를 정의
* ErrorCode: 인터페이스를 이용해 추상화
* CommonErrorCode: 애플리케이션에서 전역적으로 사용
* UserErrorCode: 특정 도메인에 대해 구체적 사용
BusinessException.java
* ErrorCode를 받아서 처리해줄 CustomException class
* RuntimeException을 상속
* 예외가 발생했을 때, 프로그램을 종료하기보다는 해당 예외를 적절히 처리하여 비즈니스 로직을 올바르게 진행하거나 사용자의 잘못된 요청에 대한 피드백을 제공하는 것이 목표
🚨 스프링 프레임워크가 제공하는 선언적 트랜잭션(@Transactional)안에서 에러 발생 시 체크 예외는 롤백이 되지 않고, 언체크 예외는 롤백됨
ErrorResponse.java
* 클라이언트에 반환할 ErrorResponse 설정
* ValidationError
* @Valid를 사용했을 때 에러가 발생한 경우 어느 필드에서 에러가 발생했는지 응답을 위한 내부 정적 클래스
* FieldError
* Spring에서 유효성 검사가 실패한 필드에 대한 정보를 제공하는 클래스
GlobalExceptionHandler.java
* ResponseEntityExceptionHandler
* 스프링 예외에 대한 ExceptionHandler가 모두 구현되어 있음
* 에러 메세지는 반환하지 않으므로 스프링 예외에 대한 에러 응답을 보내려면 handleExceptionInternal()를 오버라이딩
* @Valid에 의한 MethodArgumentNotValidException
* @Valid 관련 정보: MethodArgumentNotValidException의 getBindingResult 참조
🙋♀️
본 포스트는 공부 목적으로 작성하였습니다.
보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글로 알려주시면 수정하도록 하겠습니다.
📑
참고 자료
https://mangkyu.tistory.com/205
'PlayGround > 마실가실 리팩토링' 카테고리의 다른 글
[1년 후 마실가실] 로그 설정 (2) | 2024.10.03 |
---|---|
[1년 후 마실가실] 커밋 규칙 (2) | 2024.10.01 |
[1년 후 마실가실] 쉬어가는 마실가실 - Code Style (0) | 2024.09.24 |
[1년 후 마실가실] .gitignore 재적용 (0) | 2024.09.23 |
[1년 후 마실가실] @WebMvcTest Security 403 (0) | 2024.09.21 |