์ด์ ๊น์ง์ ์์ธ ์ฒ๋ฆฌ ํฌ์คํ
์์๋ API ๋ฐฉ์์ด ์๋ ๊ธฐ๋ณธ์ ์ธ ํ๋ฉด์ ๋ฐํํ๋ ๋ฐฉ์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋ค๋ฃจ์๋ค. ๊ทธ๋ฌ๋ API ํต์ ์์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ํ๋ฉด์ ๋ฐํํ๋ ๊ฒ์ ์๋ฌด๋ฐ ์ธ๋ชจ๊ฐ ์๋ค. ๋ฐ๋ผ์ API ํต์ ์์ ์์ธ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ์๋ ์ด๋ค ์์ผ๋ก ์์ธ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํ ๊ฒ์ธ์ง๋ฅผ ์ ํ๊ณ , ๊ทธ์ ๋ง๊ฒ json์ผ๋ก ์์ธ ๋ฉ์ธ์ง๋ฅผ ๋ฐํํด ์ฃผ์ด์ผ ํ๋ค. ์คํ๋ง ๋ถํธ๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ์์ธ ์ฒ๋ฆฌ ์คํ๋ง ๋ถํธ๋ BasicErrorController๋ฅผ ํตํด ๊ธฐ๋ณธ์ ์ธ ์์ธ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ค๊ณ ํ์๋ค. API ์์ธ ๋ํ ์ด๊ณณ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฒ๋ฆฌํด ์ฃผ๋๋ฐ, ๋ฐํํด์ฃผ๋ json์ ๋ค์๊ณผ ๊ฐ์ ํ์์ด๋ค. Accept ํค๋๊ฐ application/json์ธ ๊ฒฝ์ฐ { "timestamp": "2022-01-07T13:17:21..
๐๏ธ Spring/Web MVC
์คํ๋ง ๋ถํธ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ์๋ฌ ํ์ด์ง๋ฅผ ๊ต์ฅํ ์ฝ๊ฒ ๋ฑ๋กํ ์ ์๋ค. ์คํ๋ง ๋ถํธ๋ ErrorPage๋ฅผ ์๋์ผ๋ก ๋ฑ๋กํด์ค๋ค. ์ด๋ ๊ฒฝ๋ก๋ "/error"์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ์์ฒญ์ ๋ํด ์ฒ๋ฆฌํ๊ธฐ ์ํด BasicErrorController๋ผ๋ ์คํ๋ง ์ปจํธ๋กค๋ฌ๋ฅผ ์๋์ผ๋ก ๋ฑ๋กํ๋ค. ์ค๋ฅ ํ์ด์ง ๋ฑ๋ก ๋ฐฉ๋ฒ BasicErrorController๋ ๊ธฐ๋ณธ์ ์ธ ๋ก์ง์ด ๋ชจ๋ ๊ฐ๋ฐ๋์ด ์๋ค. ๊ฐ๋ฐ์๋ BasicErrorController๊ฐ ์ ๊ณตํ๋ ๋ฃฐ๊ณผ ์ฐ์ ์์์ ๋ฐ๋ผ์ ์ค๋ฅ ํ์ด์ง๋ฅผ ๋ฑ๋กํ๋ฉด ๋๋ค. ์ด์ ๋ถํฐ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์. ๋ทฐ ์ ํ ์ฐ์ ์์ ๋ทฐ ํ
ํ๋ฆฟ resources/templates/error/500.html resources/templates/error/5xx.html ์ ์ ๋ฆฌ์์ค (static..
์คํ๋ง์ ์ฌ์ฉํ์ง ์๋ ์์ํ ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ ์์ธ๋ฅผ ๋ค์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ค. Exception - ์ฐ๋ฆฌ๊ฐ ์๊ณ ์๋ ๊ทธ ์ผ๋ฐ์ ์ธ ์์ธ response.sendError(HTTP ์ํ ์ฝ๋, ์ค๋ฅ ๋ฉ์์ง) 1. Exception์ ์ฒ๋ฆฌ ๋ฐฉ์ ์๋ฐ์ ๋ฉ์ธ ๋ฉ์๋๋ฅผ ์ง์ ์คํํ๋ ๊ฒฝ์ฐ, main์ด๋ผ๋ ์ด๋ฆ์ ์ฐ๋ ๋๊ฐ ์คํ๋๋ค. ๋ง์ฝ ์คํ ๋์ค์ ์์ธ๋ฅผ ์ก์ง ๋ชปํ๊ณ ์ฒ์ ์คํํ main() ๋ฉ์๋๋ฅผ ๋์ด์ ์์ธ๊ฐ ๋์ ธ์ง๋ฉด, ์์ธ ์ ๋ณด๋ฅผ ๋จ๊ธฐ๊ณ ํด๋น ์ฐ๋ ๋๋ ์ข
๋ฃ๋๋ค. ์ด๊ฑด ๋ง์ด๋ค ๊ฒฝํํด ๋ณด์์ ๊ฒ์ด๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์์ฒญ๋ณ๋ก ๋ณ๋์ ์ฐ๋ ๋๊ฐ ํ ๋น๋๊ณ , ์ด๋ ์๋ธ๋ฆฟ ์ปจํ
์ด๋ ์์์ ์คํ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์
์์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, try catch๋ก ์ก์ง ๋ชปํ๊ณ ์๋ธ๋ฆฟ ์ปจํ
์ด๋ ๋ฐ์ผ๋ก ์..
์์ํ๊ธฐ์ ์์ ํํฐ๋ ์๋ธ๋ฆฟ์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๊ณ , ์ธํฐ์
ํฐ๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค. ์ด๋ฅผ ์๊ณ ๊ณต๋ถ๋ฅผ ์์ํด๋ณด๋๋ก ํ์. ์๋ธ๋ฆฟ ํํฐ ํํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์, ์ ํ๋ฆฌ์ผ์ด์
์์ ๊ณตํต์ ์ผ๋ก ๊ด์ฌ์ด ์๋ ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํจ์ด๋ค. ์คํ๋ง AOP๋ก๋ ์ฒ๋ฆฌํ ์ ์์ง๋ง, ์น๊ณผ ๊ด๋ จ๋ ๊ณตํต ๊ด์ฌ์ฌ๋ ํํฐ ๋๋ ์ธํฐ์
ํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ์น๊ณผ ๊ด๋ จ๋ ๋ก์ง์ ์ฒ๋ฆฌํ ๋์๋ HTTP์ ์ ๋ณด๊ฐ ํ์ํ๋ฐ, ํํฐ๋ ์ธํฐ์
ํฐ๋ HttpServletRequest, HttpServletResponse๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ด๋ค. ํํฐ์ ํ๋ฆ Http ์์ฒญ -> WAS -> ํํฐ -> (๋์คํจ์ฒ)์๋ธ๋ฆฟ -> ์ปจํธ๋กค๋ฌ ํํฐ๋ฅผ ํธ์ถํ ๋ค์์ ์๋ธ๋ฆฟ์ด ํธ์ถ๋๊ธฐ ๋๋ฌธ์, ์์ฒญ ๋ก๊ทธ๋ฅผ ๋จ๊ธฐ๋ฅ ๋ฑ์ ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ..
Bean Validation ๊ธฐ๋ณธ์ ์ ๊ฒ์ฆ ๋ก์ง์ ๊ณตํตํํ๊ณ , ํ์คํ ํ ๊ฒ์ด Bean Validation์ด๋ค. Bean Validation์ ํน์ ํ ๊ตฌํ์ฒด๊ฐ ์๋๋ผ Bean Validation 2.0์ด๋ผ๋ ๊ธฐ์ ํ์ค์ด๋ค. ๊ฐ๋จํ๊ฒ ๋งํ์๋ฉด, ๊ฒ์ฆ ์ ๋
ธํ
์ด์
๊ณผ ์ฌ๋ฌ ์ธํฐํ์ด์ค์ ๋ชจ์์ด๋ค. ์ด๋ฌํ Bean Validation์ ๊ตฌํํ ๊ธฐ์ ๋ค ์ค ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ํ์ด๋ฒ๋ค์ดํธ Validatior๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ฆ์ ํ์ด๋ฒ๋ค์ดํธ๊ฐ ๋ถ์ด์์ง๋ง ORM๊ณผ๋ ๊ด๋ จ์ด ์๋ค. ์๋๋ ์ฐธ๊ณ ์ฌ์ดํธ๋ค Hibernate Validator 6.2.1.Final - Jakarta Bean Validation Reference Implementation: Reference Guide Validating data is a commo..
๋ฉ์์ง ์ํฉ์ ํ๋ ๊ฐ์ ํด์, ๊ฒ์ํ ์๋น์ค๋ฅผ ๋ง๋ค์๋ค๊ณ ์๊ฐํ์. ๋ชจ๋ ๊ฒ์ํ์์ ๊ฒ์ํ์ ๋ฌ๋ฆฐ ๊ธ์ "๋๊ธ"์ด๋ผ๊ณ ํ์ํ๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทธ ์ํฉ์์ ๋๊ธ์ "๋ต๊ธ"๋ก ๊ณ ์น๋ผ๋ ๋ช
๋ น์ด ๋จ์ด์ก๋ค๊ณ ์๊ฐํด๋ณด์. ์ฐ๋ฆฌ๋ ๋ชจ๋ ํ์ด์ง์ ๋๊ธ์ ์ฐพ์ ๋ต๊ธ๋ก ๊ณ ์ณ์ผ ํ ๊ฒ์ด๋ค. ํ๋ฉด์ด ๋ง์ผ๋ฉด ๋ง์์๋ก ํด๋น ์์
์ ํ๋ค๊ณ , ๋๋ฝํ ๊ฐ๋ฅ์ฑ๋ ์กด์ฌํ ๊ฒ์ด๋ค. ์ด๋ฐ ๋ค์ํ ๋ฉ์์ง๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๋ฉ์์ง ๊ธฐ๋ฅ์ด๋ผ ํ๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. 'messages.properties'๋ผ๋ ๋ฉ์์ง ๊ด๋ฆฌ์ฉ ํ์ผ์ ๋ง๋ค๊ณ comment=๋ต๊ธ comment.writer=์์ฑ์ ... ์์๊ฐ์ด ์์ฑํ ํ, ๊ฐ HTML(ํ์๋ฆฌํ)๋ค์ ๋ค์๊ณผ ๊ฐ์ด ํด๋น ๋ฐ์ดํฐ๋ฅผ key๊ฐ์ผ๋ก ๋ถ๋ฌ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. (์ด๋ ๋ทฐ ํ
ํ..
ํผ์์ ๊ณต๋ถ๋ฅผ ํ๋ ์ค @RequestBody๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ๋ง๋ค์ด์ฃผ์ง ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ต๋๋ค. @RequestBody๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ธ๋ฉ ํ ๋๋ ObjectMapper๊ฐ ์ฌ์ฉ๋๋ฉฐ, ์ด๋ ๊ฐ์ ๋ฐ์ธ๋ฉํด์ฃผ๊ธฐ ์ํด์๋ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ํ์์
๋๋ค. ์ฐธ๊ณ ๋ก ObjectMapper๊ฐ ์ฌ์ฉ๋๋ฉด setter๊ฐ ์์ด๋ ๋ฐ์ดํฐ์ ๊ฐ์ด ๋ฐ์ธ๋ฉ ๋ ์ ์์ต๋๋ค. ์ด์ ๊ด๋ จํด์๋ ์๋ ๋ธ๋ก๊ทธ๋ค์ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. https://bbbicb.tistory.com/46 @RequestBody ๋ชจ๋ธ์ ๊ธฐ๋ณธ์์ฑ์, setter/getter๊ฐ ํ์ํ๊ฐ? ์๋ก ์ต๊ทผ์ Entity ๋ชจ๋ธ์ ์์ฑ์ ์ฑ๊ฒฉ์ ์ ์๊ฐํด๋ณด๊ณ ๋ถ๋ณํด์ผ ํ๋ ๊ฒ๋ค์ final๋ก ์ ์ธํด ๋ช
ํํ๊ฒ ํ๋ผ๋ ์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์๋ค. ํ๋ฒ..
๐ง HttpMessageConverter @RequestBody๋ @ResponseBody๋ ๋ฉ์์ง ๋ฐ๋์ ๋ค์ด์๊ฑฐ๋ ๋ฉ์ธ์ง ๋ฐ๋์ ์์ฑ๋๋ ๋ฌธ์ ํน์ JSON ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ String ๋๋ ๊ฐ์ฒด๋ก ๋ฐ๋ก ๋ณํํ์ฌ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด์ ๊ฐ์ด HTTP ๋ฉ์์ง ๋ฐ๋์ ๋ด์ฉ์ ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๊ฒ ํธ๋ฆฌํ๋๋ก ๋ณํํ์ฌ ์ฃผ๋ ์ญํ ์ HttpMessageConverter๊ฐ ๋ด๋นํฉ๋๋ค. HttpMessageConverter๋ @RequestBody, HttpEntity๊ฐ ํ๋ผ๋ฏธํฐ์ ๋ถ์ด์๋ ๊ฒฝ์ฐ, ๊ทธ๋ฆฌ๊ณ ๋ฐํ ์ @ResponseBody ํน์ HttpEntity๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๋ํฉ๋๋ค. ๐ง HttpMessageConverter ๊ตฌ์กฐ HTTP ๋ฉ์์ง ์ปจ๋ฒํฐ๋ ์ธํฐํ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. public in..