ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20221221 TIL 핸들링 해야하는 예외가 여러 개일 때 어떻게 하면 좋을까?
    TIL 2022. 12. 21. 18:33

    https://www.computerhope.com/jargon/e/exception.jpg

    오늘은 회원가입 처리를 값객체를 이용해서 진행을 했다.

    기존에는 @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에 대한 예외처리를 하게 하였다.

    이 방식을 이용하니 한 가지 예외에 대한 처리만으로 다양한 예외 상황에 대한 처리를 간단히 할 수 있었다.

     

    여러 타입의 상위 타입을 잡아줌으로써 복잡해질 수 있는 코드를 단순화 시킬 수 있었다.

    더 효율적인 방법이 없을지 고민이 될 때는 배웠던 개념들과 디자인 패턴들을 떠올려보며 적용할 수 있는 게 있을지 고민을 해보자!

    댓글

Designed by Tistory.