Community

๐Ÿ•Š๏ธ ์Šคํ”„๋ง ๋ถ€ํŠธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ

๋ฐธ๋ฆฌ๋ฐ์ด์…˜(์œ ํšจ์„ฑ ๊ฒ€์‚ฌ)๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ํ’ˆ์งˆ ๊ฒ€์‚ฌ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์„ ์ƒ๋‹˜์˜ ๋‹ต์˜ ์˜ณ๊ณ  ๊ทธ๋ฆ„์„ ์ฑ„์ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ œ๊ณตํ•œ ์ •๋ณด๊ฐ€ ์ •ํ™•ํ•œ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Validation Annotations ํ•„๋“œ์— ํŠน์ • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ํ‘œํ˜„ํ•˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์‚ฌ๊ฐ€ ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. (์ด๋ฆ„๋งŒ ๋ด๋„ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์ง์ž‘์ด ๊ฐ€๋‹ˆ ์„ค๋ช…์€ ๋”ฐ๋กœ ์ ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค) * @NotNull * @NotBlank * @NotEmpty * @Min(value) * @Max(value) * @Size(min, max) * @Pattern(regex) * @Email * @Past / @Future * @AssertTrue / @AssertFalse * @CreditCardNumber * @Valid * @Validated Validation on Nested Properties Nested์ธ ๋ณต์žกํ•œ ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ @Valid ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๋ฐธ๋ฆฌ๋ฐ์ด์…˜ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ƒ์œ„ ๊ฐ์ฒด์™€ Nested ์†์„ฑ์ด ๋ชจ๋‘ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Controller Integration ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ์ˆ˜์‹ ๋˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ž์ฃผ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. Global Exception Handling ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ค๋ฅ˜๋Š” ํ”ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ๊ธ€๋กœ๋ฒŒํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค: @ControllerAdvice ์–ด๋…ธํ…Œ์ด์…˜์€ ํด๋ž˜์Šค๋ฅผ ๊ธ€๋กœ๋ฒŒ exception handler๋กœ ํ‘œ์‹œํ•˜๋ฉฐ, ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ์‹คํŒจํ•  ๋•Œ ๋˜์ ธ์ง€๋Š” MethodArgumentNotValidException์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. Custom Validation ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ์ƒˆ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ •์˜ํ•˜์—ฌ ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ ํด๋ž˜์Šค์˜ ํ•„๋“œ ๋˜๋Š” ๋ฉ”์„œ๋“œ์— ์ ์šฉํ•  ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. Validation Group ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ๋‹ค๋ฅธ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. BindingResult @Valid๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ BindingResult๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์š”์ฒญ ํ›„ ๋ฐ”๋กœ ์˜ค๋ฅ˜๋ฅผ ์บก์ฒ˜ํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. Request Body ๋ฐ”๋กœ ๋’ค์— ํ•ด๋‹น ๋กœ์ง์„ ์ž‘์„ฑํ•˜์„ธ์š”. ๐Ÿฃ ์›๋ฌธ์— ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์˜ˆ์‹œ๊ฐ€ ๋งŽ์œผ๋‹ˆ ๊ฐ™์ด ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์„ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค