์คํ๋ง ๋ถํธ ์ค๋ฅ ํ์ด์ง
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ์์๋ ๊ธฐ๋ณธ์ ์ธ ์ค๋ฅ ์๋ต์ ๋ํ ์ฒ๋ฆฌ์ ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง์ ๋ํ ์๋ ๊ตฌ์ฑ์ ์ ๊ณตํ๋ค. ์ค๋ฅ ์ฒ๋ฆฌ์ ๋ํ ์๋ ๊ตฌ์ฑ์ ErrorMvcAutoConfiguration๋ฅผ ํตํด ์ ๊ณตํ๋ฉฐ BasicErrorController ์ DefaultErrorViewResolver๊ฐ ๋ฑ๋ก๋๋ค.
Whitelabel Error Page
์คํ๋ง ๋ถํธ์ ๊ธฐ๋ณธ ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง๋ ErrorMvcAutoConfiguration์ StaticView๋ก HTML ํ์ผ์ด ์๋ ์๋ฐ ์ฝ๋๋ก ๊ตฌํ๋์ด์๋ค. ์ด๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํผํฐ๋ก ๋นํ์ฑํํ ์ ์๋๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ด์ฅ ์น ์ปจํ ์ด๋์ธ ํฐ์บฃ์ ๊ฒฝ์ฐ ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ํฐ์บฃ์ ์ค๋ฅ ํ์ด์ง๊ฐ ์๋ต๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํฐ์บฃ์ด ์๋ ์ธ๋ํ ์ฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ธ๋ํ ์ฐ๊ฐ ์์ฒด์ ์ธ ์ค๋ฅ ์๋ต ํ์ด์ง๋ฅผ ์ ๊ณตํ์ง ์๋๋ค.
Error Templates
ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง์ ๋นํ์ฑํ ์ฌ๋ถ์ ์๊ด์์ด error
๋ผ๋ ๋ทฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํ
ํ๋ฆฟ ํ์ผ์ ํด๋์คํจ์ค์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ์๋ FreeMarkerViewResolver ๋๋ ThymeleafViewResolver ์ ์ํด ์ฒ๋ฆฌ๋๋ค. ErrorTemplate๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง์ ๋ํ ๋น ๋ฑ๋ก์ ์๋์ผ๋ก ๋นํ์ฑํ๋๋ค.
FreeMarkerViewResolver์ ThymeleafViewResolver๊ฐ ๋์์ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํ๋ฆฌ๋ง์ปค์ ํ์๋ฆฌํ์ ๋ํ ์๋ ๊ตฌ์ฑ ํด๋์ค์ ๊ตฌํ ์ Order๊ฐ์ ์ํด FreeMarkerViewResolver์ ์ฒ๋ฆฌ ์์๊ฐ ๋ ๋๋ค.
<!DOCTYPE html>
<html lang="${.lang}">
<head>
<title>Error</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Oops!</h1>
<div>Error: ${error}</div>
<div>Path: ${path}</div>
<div>Status: ${status}</div>
<div>Timestamp: ${timestamp?datetime?iso_utc}</div>
<p><a href="/">Go to main</a></p>
</body>
</html>
Error Templates based HTTP Status Code
์๋ฌ ํ์ด์ง๋ฅผ ๊ณตํต์ผ๋ก ์ฒ๋ฆฌํ ์๋ ์๊ณ DefaultErrorViewResolver๋ error ๋๋ ํ ๋ฆฌ ํ์์ HTTP Status Code ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ํ ํ๋ฆฟ ํ์ผ์ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ์ ๋ ์์ธํ๊ฒ ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค. ๊ณตํต ์ค๋ฅ ํ์ด์ง ๋ด์์ ํ ํ๋ฆฟ ๋ฌธ๋ฒ์ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ์ง๋ง ๋ช ์์ ์ผ๋ก ๋๋์ด์ ์ฒ๋ฆฌํ๊ฒ ํ๋ ๊ฒ๋ ๋์์ง ์์ ๊ฒ์ด๋ค.
<!DOCTYPE html>
<html lang="${.lang}">
<head>
<title>404 - Not Found</title>
<meta charset="UTF-8">
</head>
<body>
<h1>Oops! Not Found</h1>
<div>Error: ${error}</div>
<div>Path: ${path}</div>
<div>Status: ${status}</div>
<div>Timestamp: ${timestamp?datetime?iso_utc}</div>
<p><a href="/">Go to main</a></p>
</body>
</html>