๐๏ธ ์คํ๋ง ๋ถํธ ์ ํจ์ฑ ๊ฒ์ฌ
๋ฐธ๋ฆฌ๋ฐ์ด์ (์ ํจ์ฑ ๊ฒ์ฌ)๋ ๋ฐ์ดํฐ์ ๋ํ ํ์ง ๊ฒ์ฌ์ ๊ฐ์ต๋๋ค. ์ ์๋์ ๋ต์ ์ณ๊ณ ๊ทธ๋ฆ์ ์ฑ์ ํ๋ ๊ฒ์ฒ๋ผ, ์ ํจ์ฑ ๊ฒ์ฌ๋ ์ฌ์ฉ์๋ค์ด ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ ์ ๋ณด๊ฐ ์ ํํ์ง ํ์ธํฉ๋๋ค. 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 ๋ฐ๋ก ๋ค์ ํด๋น ๋ก์ง์ ์์ฑํ์ธ์. ๐ฃ ์๋ฌธ์ ์ฝ๋์ ํจ๊ป ์์๊ฐ ๋ง์ผ๋ ๊ฐ์ด ์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ฏ ํฉ๋๋ค.