Spring MVC ๊ฐ„๋‹จํ•œ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ (+ ํผ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆํ•˜๊ธฐ Validator)

2021. 12. 1. 10:57ใ†Spring

728x90

 

https://hyejin.tistory.com/270?category=1022293 

 

Spring MVC ๊ฐ„๋‹จํ•œ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ

๊ฐ„๋‹จํ•œ ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ , ์˜ˆ์ „์— jsp๊ณต๋ถ€ํ•  ๋•Œ ๋งŒ๋“ค์—ˆ๋˜ jdbc ๊ฒŒ์‹œํŒ์„ ์‘์šฉํ•ด Spring MVC ๋ฒ„์ „์œผ๋กœ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค์–ด๋ณผ ์˜ˆ์ •์ด๋‹ค. ์ตœ์ข… ๊ฒฐ๊ณผ ํ™”๋ฉด์œผ๋กœ ๊ธ€ ์ž‘์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ, ์กฐํšŒ๊ฐ€

hyejin.tistory.com

Spring MVC ๊ฒŒ์‹œํŒ ๊ตฌํ˜„์€ ์—ฌ๊ธฐ์„œ ์ž์„ธํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

์ €๋ฒˆ์— ํ–ˆ๋˜ ๊ฒŒ์‹œํŒ์—์„œ๋Š” ๊ธ€ ์ž‘์„ฑ ํผ์—์„œ 

์ž‘์„ฑ์ž๋‚˜ ์ œ๋ชฉ ๋“ฑ์„ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ ์„œ '๋“ฑ๋ก' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•  ๋•Œ ์ž‘์„ฑ์ž๋‚˜ ์ œ๋ชฉ์€ NOT NULL๋กœ ์„ค์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 

์—๋Ÿฌ๊ฐ€ ๋ฐ”๋กœ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์„ฑ์ž๋‚˜ ์ œ๋ชฉ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์•Œ๋ฆผ ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•œ๋‹ค. 

https://hyejin.tistory.com/269?category=1022293 

 

Spring Validation ํผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ Validator, @Vaild

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š”๋ฐ ์žˆ์–ด ํผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ์€ ๋ฐ˜๋“œ์‹œ ํ•ด์•ผํ•˜๋Š” ๊ณผ์ • ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๋จผ์ € ํด๋ผ์ด์–ธํŠธ์—์„œ submit ํ•˜๊ธฐ์ „์— ๊ฒ€์ฆ์„ ํ•ด์ค˜์•ผํ•˜๊ณ , (JavaScript) ๊ทธ ๋‹ค์Œ ์„œ๋ฒ„์—์„œ๋„ ๊ฒ€์ฆ์„ ํ•ด์ค˜์•ผํ•œ

hyejin.tistory.com

์ด๋•Œ ๋ฐฐ์› ๋˜ ํผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ Validator๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ์„ ์ถ”๊ฐ€ํ•  ๊ฒƒ์ด๋‹ค!

 

 

1๏ธโƒฃ BoardValidator.java 

Validator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” BoardValidator ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. 

โ— Validator๋Š” ์Šคํ”„๋ง์—์„œ ์ œ๊ณตํ•˜๋Š” ํผ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ๊ฐ์ฒด์ด๋‹ค!

 

validate() ์—์„œ๋Š” ์ฃผ์–ด์ง„ ๊ฐ์ฒด์ธ target์— ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•˜๊ณ , ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๋•Œ๋Š” ์ฃผ์–ด์ง„ ๊ฐ์ฒด์— ์ด ์˜ค๋ฅ˜๋“ค์„ errors์— ๋“ฑ๋กํ•ด์ค€๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  rejectValue()์— ํผ ๋ฐ์ดํ„ฐ ์—๋Ÿฌ ์ •๋ณด๋ฅผ filed์™€ errorCode๋กœ ๋“ฑ๋กํ•ด์ค€๋‹ค. 

 

 

2๏ธโƒฃ BoardController.java

writeOk.do

WriteOk.do์—์„œ๋Š” ๊ธ€ ์ž‘์„ฑ ํŽ˜์ด์ง€์—์„œ ์ œ๋ชฉ๊ณผ ์ž‘์„ฑ์ž๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•ด board/list.do๋กœ ๊ฐ€์ง€ ์•Š๋„๋ก ํ•œ๋‹ค. 

updateOk.do

์ˆ˜์ • ํŽ˜์ด์ง€์—์„œ๋„ ์—ญ์‹œ ์ œ๋ชฉ์„ ๋นˆ์นธ์œผ๋กœ ๋‘๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์—๋Ÿฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•ด board/list.do๋กœ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

 

๊ธ€์„ ์ž‘์„ฑ๊ณผ ์ˆ˜์ •์—์„œ ํผ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ ๋ฉ”์„œ๋“œ์— BindingResult ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

โ— BindingResult 

: ๋งˆ์น˜ handler์˜ Model ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ DispatcherServlet์—์„œ ์ œ๊ณต(์ž๋™ ์ฃผ์ž…) ํ•ด์ฃผ๋Š” ๊ฐ์ฒด๋กœ 

validator๊ฐ€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ด๊ธฐ๋Š” ๊ฐ์ฒด์ด๋‹ค. 

 

๋”ฐ๋ผ์„œ result์—๋Š” validator๊ฐ€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ด๊ธด ๊ฐ์ฒด์ด๋‹ค. 

 

 

BoardController ์•ˆ์— ์ž‘์„ฑ

showErrors()๋Š” Errors์•ˆ์— ๋‹ด๊ธด ์—๋Ÿฌ๋“ค์„ ์ถœ๋ ฅํ•ด ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•ด์ค€ ๋ฉ”์„œ๋“œ์ด๋‹ค. (๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผํ•˜๋Š” ๋ฉ”์„œ๋“œ๋Š” ์•„๋‹˜)

 

BoardController

initBinder()๋Š” Validator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์˜ validate() ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ค€ ๋ฉ”์„œ๋“œ์ด๋‹ค. 

 

@InitBinder ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด BoardController ํด๋ž˜์Šค์˜ handler ์—์„œ ํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•  ๋•Œ ๊ฒ€์ฆํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ง€์ •ํ•ด์ค€๋‹ค. 

writeOk์— @Valid ์ถ”๊ฐ€

 

 

updateOk์— @Valid ์ถ”๊ฐ€

๊ฐ๊ฐ์˜ ๋ฉ”์„œ๋“œ์— @Valid๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋ฐ”์ธ๋”ฉํ•˜๋Š” ์‹œ์ ์—์„œ @InitBinder๋กœ ๋“ฑ๋ก๋œ validator ๊ฐ์ฒด์ธ BoardValidor๋กœ ๊ฒ€์ฆํ•œ๋‹ค! 

 

 

3๏ธโƒฃ write.jsp , update.jsp

write.jsp
update.jsp

 

 

4๏ธโƒฃ ๊ฒฐ๊ณผ 

์ž‘์„ฑ์ž, ์ œ๋ชฉ ๋ชจ๋‘ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์„ ๋•Œ 
์ž‘์„ฑ์ž, ์ œ๋ชฉ ๋ชจ๋‘ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์„ ๋•Œ 

 

์ œ๋ชฉ๋งŒ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์„ ๋•Œ
๊ธ€ ์ˆ˜์ •์‹œ ์ œ๋ชฉ์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์•˜์„ ๋•Œ 

 

728x90