๐Ÿ๏ธ Spring

์ด๋ฒˆ์— Exception์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€๋ฅผ ์ข€ ํ•˜๋‹ค๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋ฅด๊ณ  ์ญ‰ ์‚ฌ์šฉํ–ˆ์—ˆ๋˜ ์ค‘์š”ํ•œ ์‚ฌ์‹ค์„ ์•Œ์•„๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. (์ด๊ฒƒ๋„ ๋ชจ๋ฅด๊ณ  ๋ฌด์ง€์„ฑ์œผ๋กœ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค๋‹ˆ..ใ… ใ…  ์ฐธ.. ์ด๋Ÿฌ๋ฉด์„œ ์„ฑ์žฅํ•˜๋Š” ๊ฑฐ๊ฒ ์ฃ ..) ์šฐ์„  ์ •๋ง ๊ฐ„๋‹จํ•˜๊ฒŒ Checked Exception๊ณผ Unchecked Exception์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Checked Exception์€ Exception์˜ ํ•˜์œ„ ์˜ˆ์™ธ๋“ค ์ค‘ RuntimeException์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์˜ˆ์™ธ๋“ค์„ Checked Exception์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค. Checked Exception์€ ์ปดํŒŒ์ผ ์‹œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•„์ˆ˜๋กœ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ, ํ•ด์ฃผ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ์ด์™€๋Š” ๋Œ€์กฐ์ ์œผ๋กœ Unchecked Exception์€ RuntimeException๊ณผ ์ด๋ฅผ ์ƒ์†๋ฐ›์€ ..
์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์—๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๊ต‰์žฅํžˆ ์‰ฝ๊ฒŒ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ErrorPage๋ฅผ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค. ์ด๋•Œ ๊ฒฝ๋กœ๋Š” "/error"์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ์š”์ฒญ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด BasicErrorController๋ผ๋Š” ์Šคํ”„๋ง ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค. ์˜ค๋ฅ˜ ํŽ˜์ด์ง€ ๋“ฑ๋ก ๋ฐฉ๋ฒ• BasicErrorController๋Š” ๊ธฐ๋ณธ์ ์ธ ๋กœ์ง์ด ๋ชจ๋‘ ๊ฐœ๋ฐœ๋˜์–ด ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” BasicErrorController๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฃฐ๊ณผ ์šฐ์„ ์ˆœ์œ„์— ๋”ฐ๋ผ์„œ ์˜ค๋ฅ˜ ํŽ˜์ด์ง€๋ฅผ ๋“ฑ๋กํ•˜๋ฉด ๋œ๋‹ค. ์ด์ œ๋ถ€ํ„ฐ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž. ๋ทฐ ์„ ํƒ ์šฐ์„ ์ˆœ์œ„ ๋ทฐ ํ…œํ”Œ๋ฆฟ resources/templates/error/500.html resources/templates/error/5xx.html ์ •์  ๋ฆฌ์†Œ์Šค (static..
ํ™•์ธํ•ด๋ณด๋‹ˆ๊นŒ, ์ €๋ฒˆ์— ๋Œ“๊ธ€์ด๋ž‘ ๋Œ€๋Œ“๊ธ€ ์„œ๋น„์Šค๋Š” ๋Œ€๋ถ€๋ถ„ ๊ตฌํ˜„์„ ํ•ด๋†“์•˜์—ˆ๋„ค์š”...ใ…Žใ…Ž;; ์ด๋ฒˆ์—๋Š” ์ €๋ฒˆ์— ๊ตฌํ˜„ํ–ˆ๋˜ ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ๋งŒ ์ˆ˜์ •ํ•˜๊ณ , ๊ทธ์— ๋”ฐ๋ผ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉํ•œ JSON ๋ฐ์ดํ„ฐ๋กœ ๋กœ๊ทธ์ธ (์™„๋ฃŒ) JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ (์™„๋ฃŒ) ๋„๋ฉ”์ธ, ํ…Œ์ด๋ธ” ์„ค๊ณ„, ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ (์™„๋ฃŒ) ๋Œ“๊ธ€ ์‚ญ์ œ ๋กœ์ง ๊ตฌํ˜„ (์™„๋ฃŒ) ํšŒ์›๊ฐ€์ž… + ์ •๋ณด์ˆ˜์ • ๋“ฑ ํšŒ์› ์„œ๋น„์Šค ๊ตฌํ˜„ (์™„๋ฃŒ) ๊ฒŒ์‹œํŒ ์„œ๋น„์Šค ๊ตฌํ˜„ (์ง„ํ–‰ ์ค‘) ๋Œ“๊ธ€ ์„œ๋น„์Šค ๊ตฌํ˜„ (1๋Œ“๊ธ€ -> *(๋ฌดํ•œ) ๋Œ€๋Œ“๊ธ€ ๊ตฌ์กฐ) (์ง„ํ–‰ ์ค‘) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (์™„๋ฃŒ) ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€ ๊ตญ์ œํ™” ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ฒŒ์‹œํŒ ๋ถ„๋ฅ˜ ๊ฒŒ์‹œ๊ธ€ ํŽ˜์ด์ง• ๋™์ ์ธ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰ ์‚ฌ์šฉ์ž ๊ฐ„ ์ชฝ์ง€ ๊ธฐ๋Šฅ ๋ฌดํ•œ ์ชฝ์ง€ ์Šคํฌ๋กค ๊ฒŒ์‹œ๋ฌผ & ๋Œ“๊ธ€์— ๋Œ€ํ•œ ์•Œ๋žŒ ์ชฝ์ง€์— ๋Œ€ํ•œ ์•Œ๋žŒ ์ ‘์†ํ•œ ์‚ฌ์šฉ์ž ๊ฐ„ ์‹ค์‹œ๊ฐ„ ..
์Šคํ”„๋ง์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ˆœ์ˆ˜ํ•œ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๋Š” ์˜ˆ์™ธ๋ฅผ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. Exception - ์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๊ทธ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์™ธ response.sendError(HTTP ์ƒํƒœ ์ฝ”๋“œ, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€) 1. Exception์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ž๋ฐ”์˜ ๋ฉ”์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ, main์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค. ๋งŒ์•ฝ ์‹คํ–‰ ๋„์ค‘์— ์˜ˆ์™ธ๋ฅผ ์žก์ง€ ๋ชปํ•˜๊ณ  ์ฒ˜์Œ ์‹คํ–‰ํ•œ main() ๋ฉ”์„œ๋“œ๋ฅผ ๋„˜์–ด์„œ ์˜ˆ์™ธ๊ฐ€ ๋˜์ ธ์ง€๋ฉด, ์˜ˆ์™ธ ์ •๋ณด๋ฅผ ๋‚จ๊ธฐ๊ณ  ํ•ด๋‹น ์“ฐ๋ ˆ๋“œ๋Š” ์ข…๋ฃŒ๋œ๋‹ค. ์ด๊ฑด ๋งŽ์ด๋“ค ๊ฒฝํ—˜ํ•ด ๋ณด์•˜์„ ๊ฒƒ์ด๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์š”์ฒญ๋ณ„๋กœ ๋ณ„๋„์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ• ๋‹น๋˜๊ณ , ์ด๋Š” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์•ˆ์—์„œ ์‹คํ–‰๋œ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ, try catch๋กœ ์žก์ง€ ๋ชปํ•˜๊ณ  ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ๋ฐ–์œผ๋กœ ์˜ˆ..
์‹œ์ž‘ํ•˜๊ธฐ์— ์•ž์„œ ํ•„ํ„ฐ๋Š” ์„œ๋ธ”๋ฆฟ์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๊ณ , ์ธํ„ฐ์…‰ํ„ฐ๋Š” ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ์ด๋ฅผ ์•Œ๊ณ  ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•ด๋ณด๋„๋ก ํ•˜์ž. ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋กœ๊ทธ์ธ ์ฒ˜๋ฆฌ ๋“ฑ๊ณผ ๊ฐ™์€, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ์Šคํ”„๋ง AOP๋กœ๋„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์›น๊ณผ ๊ด€๋ จ๋œ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋Š” ํ•„ํ„ฐ ๋˜๋Š” ์ธํ„ฐ์…‰ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์›น๊ณผ ๊ด€๋ จ๋œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ๋•Œ์—๋Š” HTTP์˜ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ํ•„ํ„ฐ๋‚˜ ์ธํ„ฐ์…‰ํ„ฐ๋Š” HttpServletRequest, HttpServletResponse๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•„ํ„ฐ์˜ ํ๋ฆ„ Http ์š”์ฒญ -> WAS -> ํ•„ํ„ฐ -> (๋””์ŠคํŒจ์ฒ˜)์„œ๋ธ”๋ฆฟ -> ์ปจํŠธ๋กค๋Ÿฌ ํ•„ํ„ฐ๋ฅผ ํ˜ธ์ถœํ•œ ๋‹ค์Œ์— ์„œ๋ธ”๋ฆฟ์ด ํ˜ธ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์š”์ฒญ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๋Šฅ ๋“ฑ์˜ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ..
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Post์— ๋Œ€ํ•œ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ , ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” File Service๊นŒ์ง€ ์ž‘์„ฑํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ œ๊ฐ€ ๋ถ€์Šคํ„ฐ์ƒท์„ ๋งž์•„ ๋ชธ์ƒํƒœ๊ฐ€ ์ข‹์ง€ ์•Š์€ ๊ด€๊ณ„๋กœ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๊นŒ์ง€ ์ž‘์„ฑํ•  ํž˜์€ ์—†์–ด์„œ, ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋Š” ์ดํ›„ ํฌ์ŠคํŒ…์—์„œ ์ž‘์„ฑํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉํ•œ JSON ๋ฐ์ดํ„ฐ๋กœ ๋กœ๊ทธ์ธ (์™„๋ฃŒ) JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ (์™„๋ฃŒ) ๋„๋ฉ”์ธ, ํ…Œ์ด๋ธ” ์„ค๊ณ„, ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ (์™„๋ฃŒ) ๋Œ“๊ธ€ ์‚ญ์ œ ๋กœ์ง ๊ตฌํ˜„ (์™„๋ฃŒ) ํšŒ์›๊ฐ€์ž… + ์ •๋ณด์ˆ˜์ • ๋“ฑ ํšŒ์› ์„œ๋น„์Šค ๊ตฌํ˜„ (์™„๋ฃŒ) ๊ฒŒ์‹œํŒ ์„œ๋น„์Šค ๊ตฌํ˜„ (์ง„ํ–‰ ์ค‘) ๋Œ“๊ธ€ ์„œ๋น„์Šค ๊ตฌํ˜„ (1๋Œ“๊ธ€ -> *(๋ฌดํ•œ) ๋Œ€๋Œ“๊ธ€ ๊ตฌ์กฐ) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (์™„๋ฃŒ) ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€ ๊ตญ์ œํ™” ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ฒŒ์‹œํŒ ๋ถ„๋ฅ˜ ๊ฒŒ์‹œ๊ธ€ ํŽ˜์ด์ง• ๋™์ ์ธ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•œ ๊ฒ€์ƒ‰ ์‚ฌ์šฉ์ž ๊ฐ„ ์ชฝ์ง€ ๊ธฐ๋Šฅ ๋ฌดํ•œ ์ชฝ์ง€ ์Šคํฌ๋กค ๊ฒŒ์‹œ..
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ž‘์„ฑํ•˜๊ธฐ ์ „์—, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ๋Š” ์‹œ๊ฐ„์„ ๊ฐ–๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ํ•ญ์ƒ ์ƒํƒœ์ฝ”๋“œ๋ฅผ 200์œผ๋กœ ๋ฐœ์ƒ์‹œ์ผฐ์—ˆ๋Š”๋ฐ, ์ด๋ฅผ ๋‹ค์‹œ ์˜ˆ์™ธ ์ผ€์ด์Šค์— ๋งž๊ฒŒ ์ƒํƒœ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์•„๋‹ˆ๊ธฐ์— ๊ฑด๋„ˆ๋›ฐ์…”๋„ ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ง€ ์ดํ›„ ์ €์™€ ์ฝ”๋“œ๊ฐ€ ์ผ๋ถ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๊ทธ๋ถ€๋ถ„๋งŒ ์ฃผ์˜ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹น. ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉํ•œ JSON ๋ฐ์ดํ„ฐ๋กœ ๋กœ๊ทธ์ธ (์™„๋ฃŒ) JWT๋ฅผ ์ด์šฉํ•œ ์ธ์ฆ (์™„๋ฃŒ) ๋„๋ฉ”์ธ, ํ…Œ์ด๋ธ” ์„ค๊ณ„, ์—”ํ‹ฐํ‹ฐ ์ƒ์„ฑ (์™„๋ฃŒ) ๋Œ“๊ธ€ ์‚ญ์ œ ๋กœ์ง ๊ตฌํ˜„ (์™„๋ฃŒ) ํšŒ์›๊ฐ€์ž… + ์ •๋ณด์ˆ˜์ • ๋“ฑ ํšŒ์› ์„œ๋น„์Šค ๊ตฌํ˜„ (์™„๋ฃŒ) ๊ฒŒ์‹œํŒ ์„œ๋น„์Šค ๊ตฌํ˜„ ๋Œ“๊ธ€ ์„œ๋น„์Šค ๊ตฌํ˜„ (1๋Œ“๊ธ€ -> *(๋ฌดํ•œ) ๋Œ€๋Œ“๊ธ€ ๊ตฌ์กฐ) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (์ง„ํ–‰ ์ค‘) ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€ ๊ตญ์ œํ™” ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ๊ฒŒ์‹œํŒ ๋ถ„๋ฅ˜ ๊ฒŒ์‹œ๊ธ€ ํŽ˜์ด์ง• ๋™์ ์ธ..
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..
๋ง ๋ž‘
'๐Ÿ๏ธ Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (10 Page)