2022 01 29 - oneso123456789/2022 GitHub Wiki

other

post get ๋ฐฉ์‹ ๋‚˜๋ˆ„๋Š” ๋ฐฉ๋ฒ•์€ ๊ฐ€์žฅ ์‰ฌ์šด๊ฒŒ ๋ณด์ด๋Š”๊ฒƒ์€ get ์•ˆ๋ณด์ด๋Š”๊ฒƒ์€ post๋กœ ํ•œ๋‹ค

Controller์˜ Exception์ฒ˜๋ฆฌ

Controller๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์˜ˆ์™ธ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜๋ฉด ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋Š˜์–ด๋‚  ์ˆ˜ ๋ฐ–์— ์—†์Œ
์Šคํ”„๋ง MVC์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

  • @ExceptionHandler์™€ @ControllerAdvice๋ฅผ ์ด์šฉํ•œ ์ฒ˜๋ฆฌ
  • @ResponseEntity๋ฅผ ์ด์šฉํ•˜๋Š” ์˜ˆ์™ธ ๋ฉ”์‹œ์ง€ ๊ตฌ์„ฑ

@ControllerAdvice

@ControllerAdvice๋Š” ๋’ค์—์„œ ๋ฐฐ์šฐ๊ฒŒ ๋˜๋Š” AOP(Aspect-Oriented-Programming)๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹์ž„

AOP๋ž€

๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด ํ•ต์‹ฌ์ ์ธ ๋กœ์ง์€ ์•„๋‹ˆ์ง€๋งŒ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ•„์š”ํ•œ '๊ณตํ†ต์ ์ธ ๊ด€์‹ฌ์‚ฌ(cross-concern)๋Š” ๋ถ„๋ฆฌํ•˜์ž`
๋ผ๋Š” ๊ฐœ๋…์ž„ Controller๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ๋ฉ”์„œ๋“œ์˜ ๋ชจ๋“  ์˜ˆ์™ธ์‚ฌํ•ญ์„ ์ „๋ถ€ ํ•ธ๋“ค๋งํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ค‘๋ณต์ ์ด๊ณ  ๋งŽ์€ ์–‘์˜ ์ฝ”๋“œ๋ฅผ
์ž‘์„ฑํ•ด์•ผํ•˜์ง€๋งŒ, AOP๋ฐฉ์‹์„ ์ด์šฉํ•˜๋ฉด ๊ณตํ†ต์ ์ธ ์˜ˆ์™ธ์‚ฌํ•ญ์— ๋Œ€ํ•ด์„œ๋Š” ๋ณ„๋„๋กœ
@ControllerAdvice๋ฅผ ์ด์šฉํ•ด์„œ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž„

com.crow.exception ํŒจํ‚ค์ง€ ์ƒ์„ฑ, CommonExceptionAdvice ํด๋ž˜์Šค ์ƒ์„ฑ

CommonExceptionAdvice ํด๋ž˜์Šค๋Š” @ControllerAdvice ์–ด๋…ธํ…Œ์ด์…˜์„ ์ ์šฉํ•˜์ง€๋งŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ํด๋ž˜์Šค์ด๋ฏ€๋กœ ๋ณ„๋„์˜ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Œ
@ControllerAdvice: ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ์Šคํ”„๋ง์˜ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ๋ฅผ
์ฒ˜๋ฆฌํ•˜๋Š” ์กด์žฌ์ž„์„ ๋ช…์‹œํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•จ

@ExceptionHandler: ํ•ด๋‹น ๋ฉ”์„œ๋“œ๊ฐ€ ()์— ๋“ค์–ด๊ฐ€๋Š” ์˜ˆ์™ธ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ
@ExceptionHandler ์–ด๋…ธํ…Œ์ด์…˜์˜ ์†์„ฑ์œผ๋กœ๋Š” Exception ํด๋ž˜์Šค ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ ์ด ์ฝ”๋“œ๋Š” Exception.class๋ฅผ ์ง€์ •ํ•˜์˜€์œผ๋ฏ€๋กœ
๋ชจ๋“  ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ except()๋งŒ์„ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

๋งŒ์ผ ํŠน์ •ํ•œ ํƒ€์ž…์˜ ์˜ˆ์™ธ๋ฅผ ๋‹ค๋ฃจ๊ณ  ์‹ถ๋‹ค๋ฉด Exception.class ๋Œ€์‹ ์—
๊ตฌ์ฒด์ ์ธ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ด์•ผํ•จ
JSP ํ™”๋ฉด์—์„œ๋„ ๊ตฌ์ฒด์ ์ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด Model์„ ์ด์šฉํ•ด์„œ
์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ
com.crow.exception ํŒจํ‚ค์ง€๋Š” servlet-context.xml์—์„œ ์ธ์‹ํ•˜์ง€ ์•Š๊ธฐ
๋•Œ๋ฌธ์— ์„ ์ด์šฉํ•ด์„œ com.crow.exception ํŒจํ‚ค์ง€ ๋“ฑ๋ก
<context:component-scan base-package="com.crow.exception"/>

CommonExceptionAdvice์˜ except()์˜ ๋ฆฌํ„ด๊ฐ’์€ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ JSPํŒŒ์ผ์˜
๊ฒฝ๋กœ๊ฐ€ ๋จ JSP๋Š” error_page.jsp ์ด๋ฏ€๋กœ WEB-INF/views ํด๋” ๋‚ด์— ์ž‘์„ฑํ•ด์•ผํ•จ

error_page.jsp ์ž‘์„ฑ

taglib๋ฅผ ์ด์šฉํ•ด jstl ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•จ
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
html ๋ฒ„์ „๋„ 4.01๋กœ ๋ฐ”๊ฟ”์คŒ, metaํƒœ๊ทธ ์ชฝ์— ์ธ์ฝ”๋”ฉ์—ญ์‹œ ํ•ด์คŒ
http-equiv content ์†์„ฑ์‚ฌ์šฉ
๋ณด๋””์— ์•„๊นŒ ์„ ์–ธํ•ด์ค€ jstl๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด์„œ ์˜ค๋ฅ˜๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์˜ด
<c:out value="${exception.getMessage()} }"></c:out>
ul ํƒœ๊ทธ๋กœ ๋ชฉ๋ก์„ ๋งŒ๋“ค์–ด์คŒ ์ด๋•Œ forEach๋ฅผ ๋Œ๋ ค์คŒ itmes๋Š”
exception.getStackTrace()๋กœ ์ง€๊ธˆ๊นŒ์ง€ ์–ด๋–ค ํ•จ์ˆ˜๋“ค์„ ๊ฑฐ์ณ์™”๋Š”์ง€ ์ถ”์ฒ™ํ•œ ํ›„ liํƒœ๊ทธ๋กœ ์Šคํƒ์„ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์™€์„œ ๋‚ด์šฉ์„ ์ž…๋ ฅํ•จ

์˜ˆ์™ธ ๋ฉ”์‹œ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ๊ณ ์˜๋กœ ์ˆซ์ž๋‚˜ ๋‚ ์งœ๋“ฑ์˜
ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์„ ๋ณ€ํ™˜์— ๋ฌธ์ œ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์„œ ํ˜ธ์ถœํ•ด ๋ณผ ์ˆ˜ ์žˆ์Œ
EX: sample/ex04?name=aaa&age=bbb

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