-
20221221 TIL 핸들링 해야하는 예외가 여러 개일 때 어떻게 하면 좋을까?TIL 2022. 12. 21. 18:33
오늘은 회원가입 처리를 값객체를 이용해서 진행을 했다.
기존에는 @Valid 어노테이션을 이용해서 값의 유효성 검사를 했다면,
유효성 검사는 값 객체를 이용하는 가장 큰 장점 중 하나이기 때문에 값 객체에서 진행했다.
public Password(String value) { Pattern pattern = Pattern.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$"); Matcher matcher = pattern.matcher(value); if (!matcher.find()) { throw new InvalidPassword(); } this.value = value; }
따라서 위처럼 만약 유효하지 않은 값이라면 예외를 던지게 했는데,
회원가입을 하면서 발생한 예외만 3개였다.
3개 정도면 ExceptionHandler를 모두 작성해줘도 큰 무리는 없지만
form이 조금 더 복잡해서 발생하는 예외가 많다면 컨트롤러에서 처리해야하는 예외가 너무 많아질 것 같았다.
따라서 이 부분을 어떻게 하면 좋을지 고민을 하고 있었는데,
짝꿍님께서 그 예외들을 아우르는 예외를 만들어서 상속받게 하고,
컨트롤러에서는 상위 예외만 처리를 해주게끔 하면 될 것 같다는 조언을 해주셨다!
따라서 이메일, 닉네임, 비밀번호 세 가지에 대한 유효성 검증이 실패했을 때 발생하는 예외들은
결국 회원가입을 실패하게 된 상황이기 때문에
RuntimeException을 상속받은 SignUpFailed라는 예외를 상속받게 해서
컨트롤러에서는 SignUpFailed에 대한 예외처리를 하게 하였다.
이 방식을 이용하니 한 가지 예외에 대한 처리만으로 다양한 예외 상황에 대한 처리를 간단히 할 수 있었다.
여러 타입의 상위 타입을 잡아줌으로써 복잡해질 수 있는 코드를 단순화 시킬 수 있었다.
더 효율적인 방법이 없을지 고민이 될 때는 배웠던 개념들과 디자인 패턴들을 떠올려보며 적용할 수 있는 게 있을지 고민을 해보자!
'TIL' 카테고리의 다른 글
20221223 TIL 게시글 인기순으로 정렬하기 (0) 2022.12.23 20221222 TIL JPA에서 @Query를 이용한 사용자 정의 쿼리 날리기! (0) 2022.12.22 20221220 TIL @ElementCollection (0) 2022.12.20 20221219 TIL 값 객체를 활용하기 (0) 2022.12.19 20221218 TIL 깃헙 프로젝트로 프로젝트 관리하기 (0) 2022.12.17