GlobalExceptionHandler - xx10222/selab-todo-list GitHub Wiki

Spring Boot์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•

  1. ์ „์—ญ ์ฒ˜๋ฆฌ - @ControllerAdvice
  2. ์ปจํŠธ๋กค๋Ÿฌ ๋‹จ์—์„œ ์ฒ˜๋ฆฌ - @ExceptionHandler
  3. ๋ฉ”์†Œ๋“œ ๋‹จ์œ„ ์ฒ˜๋ฆฌ - try/catch


GlobalExceptionHandler

Controller๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜๋ฉฐ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…์ด ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ, Spring MVC์—์„œ๋Š” @ExceptionHandler์™€ @ControllerAdvice๋ฅผ ์ด์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ณ  ResponseEntity๋ฅผ ์ด์šฉํ•˜์—ฌ ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค

@ExceptionHandler

  • @Controller์™€ @RestController๊ฐ€ ์ ์šฉ๋œ Bean ๋‚ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์žก์•„์„œ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค
  • Controller๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” Service์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋„ ์žก์•„๋‚ธ๋‹ค

@ControllerAdvice

  • AOP๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณตํ†ต์ ์ธ ์˜ˆ์™ธ์‚ฌํ•ญ์— ๋ณ„๋„๋กœ @ControllerAdvice๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ„๋ฆฌํ•œ๋‹ค
  • @ExceptionHandler ๊ฐ€ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ฒƒ์ด๋ผ๋ฉด, @ControllerAdvice ๋Š” ๋ชจ๋“  @Controller, ์ฆ‰ ์ „์—ญ์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋ฅผ ์žก์•„์ฃผ๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค
  • ์—ฌ๊ธฐ์„œ @RestControllerAdvice ๋Š” @ControllerAdvice์™€ ๊ฐ™์€ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ @ResponseBody๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•  ์ˆ˜๋„ ์žˆ๋‹ค
  • @ControllerAdvice๋Š” ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์Šคํ”„๋ง ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์กด์žฌ์ž„์„ ๋ช…์‹œํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๊ณ , @ExceptionHandler๋Š” ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š” ์˜ˆ์™ธ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค

Custom Exception : ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ

ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ž

  • ์ปค์Šคํ…€ ์˜ˆ์™ธ์˜ ์ด๋ฆ„๋งŒ ๋ด๋„ ์–ด๋–ค ์˜ˆ์™ธ์ธ์ง€ ์•Œ์•„๋ณด๊ธฐ ์ข‹๋‹ค
  • ๊ทธ๋Ÿฌ๋‚˜ ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  errorMessage ๋กœ ์˜ค๋ฅ˜ ์ƒํ™ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ •๋„๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, ๊ตณ์ด ์ปค์Šคํ…€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค
  • ๋ฐ˜๋Œ€๋กœ CustomException์„ ๋ฐ›๋Š” ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์‰ฝ๋„๋ก ์ถ”๊ฐ€๋กœ ์—๋Ÿฌ์— ๊ด€ํ•œ ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ฃผ๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ Exception์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์—์„œ ํ•œ๊ฐ€์ง€๋กœ Exception ํƒ€์ด๋ธก๋กœ ๋ฌถ์–ด ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” custom exception์„ ์‚ฌ์šฉํ• ๋งŒ ํ•˜๋‹ค

ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง„๋‹ค

  • NullPointerException : null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— null์„ ๊ฑด๋ƒˆ์„ ๋•Œ
  • IndexOutBoundsException : ๋ฒ”์œ„ ๋ฐ–์˜ index์— ์ ‘๊ทผํ•  ๋•Œ
  • IllegalArgumentException : ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด ์ธ์ˆ˜๋กœ ๊ฑด๋„ค์กŒ์„ ๋•Œ
  • IllegalStateException : ๊ฐ์ฒด๊ฐ€ ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ ์ ˆํ•˜์ง€ ์•Š์€ ์ƒํƒœ์ผ ๋•Œ
  • UnsupportedOperationException : ์š”์ฒญ๋ฐ›์€ ์ž‘์—…์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์ผ ๋•Œ

์ถœ์ฒ˜
https://w97ww.tistory.com/74 https://springboot.tistory.com/33

โš ๏ธ **GitHub.com Fallback** โš ๏ธ