2022 01 29 - oneso123456789/2022 GitHub Wiki
post get ๋ฐฉ์ ๋๋๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ์ฌ์ด๊ฒ ๋ณด์ด๋๊ฒ์ get ์๋ณด์ด๋๊ฒ์ post๋ก ํ๋ค
Controller๋ฅผ ์์ฑํ ๋ ์์ธ ์ํฉ์ ๊ณ ๋ คํ๋ฉด ์ฒ๋ฆฌํด์ผ ํ๋ ์์
์ด ์์ฒญ๋๊ฒ ๋์ด๋ ์ ๋ฐ์ ์์
์คํ๋ง MVC์์๋ ์ด๋ฌํ ์์
์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ ์ ์์
- @ExceptionHandler์ @ControllerAdvice๋ฅผ ์ด์ฉํ ์ฒ๋ฆฌ
- @ResponseEntity๋ฅผ ์ด์ฉํ๋ ์์ธ ๋ฉ์์ง ๊ตฌ์ฑ
@ControllerAdvice๋ ๋ค์์ ๋ฐฐ์ฐ๊ฒ ๋๋ AOP(Aspect-Oriented-Programming)๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์
๊ฐ๋จํ ๋งํ๋ฉด ํต์ฌ์ ์ธ ๋ก์ง์ ์๋์ง๋ง ํ๋ก๊ทธ๋จ์์ ํ์ํ '๊ณตํต์ ์ธ ๊ด์ฌ์ฌ(cross-concern)๋ ๋ถ๋ฆฌํ์`
๋ผ๋ ๊ฐ๋
์
Controller๋ฅผ ์์ฑํ ๋๋ ๋ฉ์๋์ ๋ชจ๋ ์์ธ์ฌํญ์ ์ ๋ถ ํธ๋ค๋งํด์ผ ํ๋ค๋ฉด ์ค๋ณต์ ์ด๊ณ ๋ง์ ์์ ์ฝ๋๋ฅผ
์์ฑํด์ผํ์ง๋ง, AOP๋ฐฉ์์ ์ด์ฉํ๋ฉด ๊ณตํต์ ์ธ ์์ธ์ฌํญ์ ๋ํด์๋ ๋ณ๋๋ก
@ControllerAdvice๋ฅผ ์ด์ฉํด์ ๋ถ๋ฆฌํ๋ ๋ฐฉ์์
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 ํด๋ ๋ด์ ์์ฑํด์ผํจ
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