@Vaild

@Valid ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ ์š”์ฒญ ๊ฒ€์ฆ ๋กœ์ง์€ ์ผ๋ฐ˜์ ์œผ๋กœ Spring MVC์˜ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ ๋‚ด์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค.

์ด ์š”์ฒญ ๊ฒ€์ฆ์€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ๋งŒ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ , ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ฐ”์ธ๋”ฉ๋˜๊ธฐ ์ „์— ๊ฒ€์ฆ์„ ์‹คํ–‰ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ @Valid ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•œ ์š”์ฒญ ๊ฒ€์ฆ์€ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ ๋‚ด๋ถ€์—์„œ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์†Œ๋“œ ์‹คํ–‰ ์ „์— ์ˆ˜ํ–‰๋œ๋‹ค.

๋™์ž‘ ์›๋ฆฌ

์™ธ๋ถ€์—์„œ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  Request๋Š” ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์„ ํ†ตํ•ด์„œ Controller๋กœ ๋“ค์–ด์˜จ๋‹ค.

Spring์€ RequestMapping์„ ํ†ตํ•ด ๋ฐ›์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ argumentResolver๋ฅผ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

@Valid๊ฐ€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋™์ž‘ํ•˜๋Š” ์ด์œ ๋Š” argumentResolver ๊ณผ์ •์—์„œ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ์—์„œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›๋Š” @RequestBody๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ "HandlerMethodArgumentResolver Interface"์˜ ๊ตฌํ˜„์ฒด, "RequestResponseBodyMethodProcessor"๊ฐ€ ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์ฆ‰, @RequestBody๋Š” RequestResponseBodyMethodProcessor๋ฅผ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๊ณ , RequestReponseBodyMethodProcessor๋Š” @Valid๊ฐ€ ๋ถ™์€ vaildation์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

resolveArgument()์—์„œ ์œ ํšจ์„ฑ์ด ๊ฒ€์‚ฌ๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด MethodArgumentNotValidException ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

๋™์ž‘ ๊ณผ์ •

  1. Dispatcher Servlet: ์š”์ฒญ์„ ๋ฐ›์•„ ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๋Š”๋‹ค.

  2. HandlerAdapter: ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์„ ํƒํ•œ๋‹ค.

  3. HandlerMethod: ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

  4. ArgumentResolver: ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ฃผ์ž…ํ•œ๋‹ค.

  5. @Valid ๊ฒ€์ฆ: ArgumentResolver๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ์ฃผ์ž…ํ•˜๊ธฐ ์ „์— @Valid ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ๊ฒ€์ฆํ•œ๋‹ค.

  6. ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ ์‹คํ–‰: ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ @Valid ๊ฒ€์ฆ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด MethodArgumentNotValidException ๋˜๋Š” ConstraintViolationException์™€ ๊ฐ™์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • Advice์™€ ExceptionHandler๋ฅผ ์ •์˜ํ–ˆ๋‹ค๋ฉด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— Advice์—์„œ ์ •์˜๋œ ExceptionHandler Method๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค.

Last updated