[Spring Boot] 예외 처리 라이브러리 만들기 (1)

2024. 8. 13. 14:41·Web/Spring Boot 예외 처리

 

어떠한 어플리케이션을 생성할 때마다 항상 고민하는 것은 바로 예외를 어떻게 처리할까에 대한 고찰이다.

특히, 웹 어플리케이션에서는 서버에서 발생한 예외들을 어떻게 할 것인가에 대한 처리가 중요하다고 생각한다.

이 글에서는, spring boot 에서 예외를 처리하는 흐름과, 이를 정의할 수 있는 방법 등에 대한 내용을 적어보려한다.

 

Spring Boot 예외 처리 흐름

먼저, 내가 공부한 스프링에서 예외처리의 흐름은 아래과 같다.

예외 처리 흐름도

 

위의 흐름을 살펴보면 아래와 같이 설명할 수 있다.

 

1. 클라이언트에서 요청이 들어온다.

2. 디스패처 서블릿이 적절한 컨트롤러로 전달한다.

3. 서비스단에서 비즈니스 로직을 수행한다.

4. 수행 중 예외가 발생한다.

5. 예외를 디스패처 서블릿이 가로채서 처리한다.

6. 예외를 처리할 핸들러 리졸버들을 탐색한다.

7. ExceptionHandlerExceptionResolver에서 사용자가 정의한 Handler가 있으면 해당 핸들러로 예외를 넘긴다.

8. 사용자가 정의한 Handler가 없으면 DefaultHandlerExceptionResolver로 넘어간다.

9. Spring 에서 기본으로 설정된 BasicErrorController에서 예외 처리 및 응답을 생성한다.

10. 클라이언트로 응답을 반환한다.

 

아주 복잡한 과정을 통해 예외를 처리하는 것 같지만, 의외로 매우 간단하다.

- 사용자가 핸들러를 등록했는가? -> 등록한 핸들러로 예외처리

- 그렇지 않다 -> 기본 핸들러로 예외처리

 

이렇게보면, 어차피 기본적으로 spring boot 에서 예외처리를 해주는데 무엇이 문제인가 싶은 의문이 든다.

 

다음은, 스프링부트에서 기본적으로 제공해주는 예외 응답에 대한 포맷을 확인해보자.

{
  "timestamp": "2024-08-12T12:34:56.789+00:00",
  "status": 500,
  "error": "Internal Server Error",
  "message": "Cannot invoke \"String.toString()\" because \"str\" is null",
  "path": "/null-pointer"
}

 

이런식으로, 응답이 오게 되는데 불필요한 내용들이 들어있고, 특히 에러 메세지는 클라이언트 요청과는 상관없는 서버 내부 에러이기 때문에 사용할 수 없는 경우가 대다수이게 될 것이다.

 

이러한, 한계때문에 보통 spring boot에서 예외처리를 할 때 @ControllerAdvice나 @Handler를 직접등록하여 예외처리와 해당 응답을 직접 생성하도록 설정한다.

 

다음 글에서는, 예외처리 방법 중 하나에 대한 예시를 보고 해당 방법의 장단점을 알아보도록 하자.

저작자표시 비영리 변경금지 (새창열림)

'Web > Spring Boot 예외 처리' 카테고리의 다른 글

[Spring Boot] 예외 처리 라이브러리 만들기 (3)  (0) 2024.08.13
[Spring Boot] 예외 처리 라이브러리 만들기 (2)  (0) 2024.08.13
'Web/Spring Boot 예외 처리' 카테고리의 다른 글
  • [Spring Boot] 예외 처리 라이브러리 만들기 (3)
  • [Spring Boot] 예외 처리 라이브러리 만들기 (2)
뚝딱뚝딱2
뚝딱뚝딱2
  • 뚝딱뚝딱2
    개발도상국
    뚝딱뚝딱2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 공부
        • Java
        • Spring Boot
        • LORA
      • Web
        • 인스타 클론 코딩
        • GPT 응답 API 서버
        • Spring Boot 예외 처리
        • 코테 준비용 서비스 만들기
      • DevOps
        • 쿠버네티스
        • 서버 만들기
      • 코딩테스트
        • 알고리즘
      • 교육
        • 스파르타코딩클럽 - 내일배움단
        • 혼자 공부하는 컴퓨터 구조 운영체제
      • 잡다한것
  • 블로그 메뉴

    • 홈
  • 링크

    • GITHUB
  • 공지사항

  • 인기 글

  • 태그

    쿠버네티스
    클러스터
    spring boot
    백준
    스프링 부트
    예외
    react
    Java
    클론코딩
    리액트
    chat GPT
    MSA
    인스타그램
    티스토리챌린지
    mapstruct
    REST API
    오블완
    스프링부트
    Entity
    OpenAI API
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
뚝딱뚝딱2
[Spring Boot] 예외 처리 라이브러리 만들기 (1)
상단으로

티스토리툴바