본문 바로가기
Develop/Spring

[Spring] Spring에서 예외 처리하기

by 코딩의성지 2020. 4. 5.

하이 ~~ 

 

자바 기반의 개발을 했던 분들은 대부분 이 예외처리를 굉장히 골치아파 하셨을 것 같다.

예외처리는 굉장히 중요한 작업이다. 그러므로 우리는 프로그램의 기능을 작성하는 것 이상으로 예외처리를 잘 설계해서 개발해야한다.

 

자바 어플리케이션에서는 예외 발생 시 프로그램을 중지하고 예외객체를 던지는 식으로 예외가 처리되는데.. 이때 예외처리를 안해주면 클라이언트가 쌩으로 에러메시지를 받게 된다. 이건 완전 Trash 프로그램이다. ㅎㅎ (괜히 찔림...)

 

스프링의 가장 큰 장점 중 하나는 이 예외처리를 굉장히 간단하게 할 수 있다는 점인 것 같다.

 

Spring 예외처리 방법

 

 

스프링 시스템은 전에도 설명한 것처럼 Layered 한 시스템이다. 고로 각 통신은 인접한 영역끼리 일어난다.

 

스프링에서 예외를 처리하는 방식은 위에서 보는 것처럼 세가지 방식이다.

 

1. 메서드 단위에서 try/catch를 통해 처리하는 방법.

2. 컨트롤러단에서 @ExceptionHandler를 이용해서 처리하기

3. Global level에서 컨트롤러 이후 Client에게 전달되기 직전 처리하기.

 

어떤 방법을 처리하든지 본인 자유지만, 어플리케이션 규모가 그리 크지 않다면 Global level에서 처리하는 걸 추천한다.

 

오늘 구현해볼 내용도 그래서 Global level에서 처리하는 방식이다. 잘 알아두자.

 

 

구현

 

코드는 굉장히 간단하다. ㅎㅎ

 

컨트롤러 패키지에 하나 만들어주자. 실제로 우리가 만들 Handler는 컨트롤러니깐 말이다.. ㅎㅎ

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
 
@ControllerAdvice
@RestController
public class GlobalExceptionHandler {
    @ExceptionHandler(value = Exception.class)
    public Map<StringString> handleException(Exception e) {
        Map<StringString> map = new HashMap<>();
        map.put("errMsg", e.getMessage());
        return map;
    }
}
 
 

 

자 이렇게 해주면 끝이다. ㅎㅎ 근데 지금은 최상위 부모인 Exception 에 대해서만 핸들링 하고 있는데

세부적으로 각 에러처리 메서드를 만들어서 해줄수도 있다. 이때는 handleException 메서드 위에다 구현해주자. 

( 무슨말인지 모르겠으면 Try Catch 만들때 Exception 에 대한 catch문을 맨아래로 내려 주는거 생각하면 된다.)

 

그러고 나서 에러를 발생시킨뒤에 메시지를 받아보자.

PostMan으로 URL을 콜하면 ㅎㅎ 우리가 클라이언트가 된다.

 

간단하게 토큰이 필요한 메서드에 토큰 없이 보내면 에러가 발생할수 있다.

 

후후 원하는대로 에러메시지를 받았다. 

반응형

댓글