Loading...

Spring/Blog-V2 / / 2022. 3. 23. 20:32

스프링 42강. ErrorHandler

반응형

 

오류가 나서 터지면 code를 1이 아닌 -1을 전송해야 한다

캐치를 타게 만들어서 원하는 데이터를 응답하는 방법을 알아보자.

 

서비스에서 save 하다가 터지는 것인데

이때는 캐치에서 return을 -1을 해줘야 한다.

 

근데 save 메서드 내부에 트라이 캐치가 걸려있어서

내가 걸어준 트라이 캐치까지 도달하지 않는다.

 

내가 제어할 수 없는 것이다.

 

이를 잡기 위해 방법을 제공해준다.

 

handler 폴더를 만들어주고 파일을 생성하자.

 

 

@RestControllerAdvice 어노테이션을 걸어주면

모든 예외를 낚아채는 컨트롤러의 역할을 한다.

 

@ExceptionHandler는 어떤 예외가 발생했을 때 낚아챌 것인지 정하는 것인데

여기 (value = Exception.class)라고 제일 부모를 잡아주면

모든 예외가 발생했을 때 낚아채버린다.

 

어떤 예외가 터질지는 하나하나 실행해보지 않는 이상

모르니까 제일 부모인 Exception으로 잡아주는 것이다.

 

Exception은 크게 런타임 Exception, 컴파일 Exception으로 나뉜다.

 

컴파일 예외는 코드에 빨간 줄이 나는 오류로

트라이 캐치를 통해 우리가 코드로 잡아주는 오류이다.

 

ErrorHandler에서 잡아줄 오류들은 모두 RuntimeException이기 때문에

우리는 RuntimeException으로 잡아줄 것이다.

 

RuntimeException 중에 어떤 오류가 발생했는지는

e를 통해 스프링이 모든 정보를 넘겨준다.

e에 접근하여 어떤 오류가 났는지 확인할 수 있다.

 

// 모든 예외를 낚아채는 어노테이션
@RestControllerAdvice
public class ErrorHandler {

    @ExceptionHandler(value = RuntimeException.class)
    public void error1(RuntimeException e) {
        System.out.println("오류 내용 : " + e.getMessage());
    }
}

 

통신에 실패했을 때 바디 데이터에 오류 내용을 넣어서 리턴해주면 되겠다.

 

// 모든 예외를 낚아채는 어노테이션
@RestControllerAdvice
public class ErrorHandler {

    @ExceptionHandler(value = RuntimeException.class)
    public ResponseDto<String> error1(RuntimeException e) {
        return new ResponseDto<String>(-1, "실패", e.getMessage());
    }
}

 

회원가입 폼에서 자바스크립트를 통해 아래와 같이 if문을 걸어주면

실패 이유도 함께 제공해준다.

 

// (4) 회원가입이 잘되면 알림창을 띄우고 로그인 페이지로 이동
if (responseObject.code == 1) {
  alert("회원가입에 성공하였습니다.");
  location.href = "/loginForm";
} else {
  alert("회원가입에 실패하였습니다.\n실패 이유 : " + responseObject.data);
}

 

일반인들은 이런 실패 이유를 봐도 알지 못한다.

이렇게 던져줄게 아니라 "글자가 너무 길어요"라는 식으로

e.getmassage가 어떤지에 따라 한글로 바꿔줘야 한다.

 

근데 나는 실패 이유를 주지 않을 것이다.

안 주면 클라이언트가 싫어할 텐데 왜 안 줄까?

 

회원가입이 실패할 수 있는 요청을

일반적인 클라이언트는 하지 않기 때문이다.

 

악의적인 의도로 장난치는 애들이 거는 요청이기 때문에

이유를 알려줄 필요가 없기 때문이다.

 

이제 코드가 터질 때마다 에러 코드를 재사용할 것이기 때문에

더 이상 내부적으로 터지는 오류는 신경 쓸 필요가 없다.

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 

 

반응형