์คํ๋ง ๋ถํธ ์ค๋ฅ ํ์ด์ง
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ์์๋ ๊ธฐ๋ณธ์ ์ธ ์ค๋ฅ ์๋ต์ ๋ํ ์ฒ๋ฆฌ์ ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง์ ๋ํ ์๋ ๊ตฌ์ฑ์ ์ ๊ณตํ๋ค. ์ค๋ฅ ์ฒ๋ฆฌ์ ๋ํ ์๋ ๊ตฌ์ฑ์ ErrorMvcAutoConfiguration๋ฅผ ํตํด ์ ๊ณตํ๋ฉฐ BasicErrorController ์ DefaultErrorViewResolver๊ฐ ๋ฑ๋ก๋๋ค.
Whitelabel Error Page
์คํ๋ง ๋ถํธ์ ๊ธฐ๋ณธ ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง๋ ErrorMvcAutoConfiguration์ StaticView๋ก HTML ํ์ผ์ด ์๋ ์๋ฐ ์ฝ๋๋ก ๊ตฌํ๋์ด์๋ค. ์ด๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํผํฐ๋ก ๋นํ์ฑํํ ์ ์๋๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ด์ฅ ์น ์ปจํ ์ด๋์ธ ํฐ์บฃ์ ๊ฒฝ์ฐ ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ํฐ์บฃ์ ์ค๋ฅ ํ์ด์ง๊ฐ ์๋ต๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํฐ์บฃ์ด ์๋ ์ธ๋ํ ์ฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์ธ๋ํ ์ฐ๊ฐ ์์ฒด์ ์ธ ์ค๋ฅ ์๋ต ํ์ด์ง๋ฅผ ์ ๊ณตํ์ง ์๋๋ค.
Error Templates
ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง์ ๋นํ์ฑํ ์ฌ๋ถ์ ์๊ด์์ด error
๋ผ๋ ๋ทฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํ
ํ๋ฆฟ ํ์ผ์ ํด๋์คํจ์ค์ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ์๋ FreeMarkerViewResolver ๋๋ ThymeleafViewResolver ์ ์ํด ์ฒ๋ฆฌ๋๋ค. ErrorTemplate๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํ์ดํธ๋ผ๋ฒจ ์ค๋ฅ ํ์ด์ง์ ๋ํ ๋น ๋ฑ๋ก์ ์๋์ผ๋ก ๋นํ์ฑํ๋๋ค.
FreeMarkerViewResolver์ ThymeleafViewResolver๊ฐ ๋์์ ์กด์ฌํ๋ ๊ฒฝ์ฐ ํ๋ฆฌ๋ง์ปค์ ํ์๋ฆฌํ์ ๋ํ ์๋ ๊ตฌ์ฑ ํด๋์ค์ ๊ตฌํ ์ Order๊ฐ์ ์ํด FreeMarkerViewResolver์ ์ฒ๋ฆฌ ์์๊ฐ ๋ ๋๋ค.
error.ftlh<!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 ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ง ํ ํ๋ฆฟ ํ์ผ์ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ์ ๋ ์์ธํ๊ฒ ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌํ ์ ์๋ค. ๊ณตํต ์ค๋ฅ ํ์ด์ง ๋ด์์ ํ ํ๋ฆฟ ๋ฌธ๋ฒ์ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํ์ง๋ง ๋ช ์์ ์ผ๋ก ๋๋์ด์ ์ฒ๋ฆฌํ๊ฒ ํ๋ ๊ฒ๋ ๋์์ง ์์ ๊ฒ์ด๋ค.
error/404.ftlh<!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>