๐ท Spring/๊ฐ๋
[Spring] ์ ์ฝ ์กฐ๊ฑด, @Valid๋ก ๊ฐ๋จํ๊ฒ ๊ฒ์ฆํด๋ณด์.
hyeong._.ing
2026. 6. 15. 19:15
์์ฒญ ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ฉด
๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํด์ผํ๋ค.
์ด๋ @Valid๋ฅผ ์ฌ์ฉํด์
๊ฐ๋จํ๊ฒ ๊ฒ์ฆํด๋ณด์.
1. @Valid
- ๊ฐ์ฒด์ ๋ฐ์ดํฐ๊ฐ ์ ํจํ์ง ๊ฒ์ฌํ ๋ ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์ ์ด๋ค.
- ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ ์์ฒญ ๋ฐ์ดํฐ(DTO)์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ ๋ ํ์์ ์ผ๋ก ์ฌ์ฉํ๋ค.
- ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ์ ๋ถ์ด๋ฉด ํด๋น ๊ฐ์ฒด์ ํ๋์ ์ค์ ๋ ์ ์ฝ ์กฐ๊ฑด์ ๊ฒ์ฆํ๋ค.
- @NotNull, @Size ๋ฑ์ ์ ์ฝ ์ด๋ ธํ ์ด์ ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉฐ ์๋น์ค ๊ณ์ธต๊น์ง ์๋ชป๋ ๋ฐ์ดํฐ๊ฐ ์ ๋ฌ๋๋ ๊ฒ์ ์ฌ์ ์ ์ฐจ๋จํ์ฌ ๊ณ์ธต์ ๋ฐฉ์ด๋ฅผ ๊ตฌํํ๋ค.
2. @Valid ์์ ์ฝ๋
- @Valid X
์ด๋ฆ์ ํ์, ๋์ด๋ 0๋ณด๋ค ์ปค์ผํ๋ค.
@PostMapping("/user")
public void createUser(@RequestBody UserDto user) {
// if๋ฌธ์ผ๋ก ๊ฐ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋์ง
// ๋ฐ์ดํฐ๊ฐ ์ ๋ง๊ฒ ๋ค์ด์๋์ง ์ง์ ํ์ธํด์ผํ๋ค.
if (user.getName() == null || user.getName().isEmpty()) {
throw new IllegalArgumentException("์ด๋ฆ์ ํ์์
๋๋ค.");
}
if (user.getAge() <= 0) {
throw new IllegalArgumentException("๋์ด๋ 0๋ณด๋ค ์ปค์ผ ํฉ๋๋ค.");
}
userService.save(user);
}
์ด๋ ๊ฒ ์์ฑํ๋ฉด ์์ข์ ์ ์ด ๋ค๋ฅธ ๋ฉ์๋์์ ์ด๋ฆ๊ณผ ๋์ด๊ฐ ํ์ํ๋ค๋ฉด ๊ทธ ์์ ๋ ๊ฒ์ฆ ๋ก์ง์ ์์ฑํด์ผํ๋ค. ์ด๋ ๊ฒ๋๋ฉด ๊ฒ์ฆ ๋ก์ง์ด ๋น์ฆ๋์ค ๋ก์ง๊ฐ ์์ด๊ณ ๋์ค์ ์ฝ๋๋ฅผ ์์ ํ ๋ ๋ฌด์ฒ ํ๋ค์ด์ง๋ค.
- @Valid O
์ด๋ฆ์ ํ์, ๋์ด๋ 0๋ณด๋ค ์ปค์ผํ๋ค
public class UserDto {
@NotEmpty(message = "์ด๋ฆ์ ํ์์
๋๋ค.")
private String name;
@Min(value = 1, message = "๋์ด๋ 1๋ณด๋ค ์ปค์ผ ํฉ๋๋ค.")
private int age;
}
๋ฐ๋ก @Valid๋ฅผ ์ปจํธ๋กค๋ฌ์ ๋ถ์ด๋๊ฒ ์๋๋ค. ๋จผ์ DTO ํ์ผ์ ๋ด๊ฐ ์ ์ฝํด์ผํ ์กฐ๊ฑด์ ์ด๋ ธํ ์ด์ ์ ๋ถ์ธ๋ค. name์ @NotEmpty๋ก ๊ณต๋ฐฑ์ด ๋ค์ด์ค์ง ๋ชปํ๋๋ก ํ๋ค. ๊ทธ๋ฆฌ๊ณ age๋ @Min์ 1๋ก ์ค์ ํด์ ์ต์๊ฐ์ 1, ๊ทธ๋๊น 0์ด ๋ค์ด์ฌ ์ ์๋๋ก ํ๋ค.
@PostMapping("/user")
public void createUser(@Valid @RequestBody UserDto user) {
// ๊ฒ์ฆ ํต๊ณผ ์์๋ง ์ฌ๊ธฐ๊น์ง ์ฝ๋๊ฐ ์คํ๋จ
userService.save(user);
}
์ปจํธ๋กค๋ฌ ํด๋์ค๋ค. ๊ฐ๋จํ๊ฒ ํ๋ผ๋ฏธํฐ์ @Valid๋ฅผ ๋ถ์ด๋ฉด ๋๋๋ค. ํด๋น ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ Spring์ด ์์ฒญ์ผ๋ก ๋ค์ด์จ DTO ๋ด๋ถ ํ๋๋ค์ ์๋์ผ๋ก ๊ฒ์ฆํ๋ค. ๋ง์ฝ DTO์ ์ ์๋ ์ ์ฝ ์กฐ๊ฑด์ ์ด๊ธฐ๋ฉด ์์ธ๋ฅผ ๋ฐ์์์ผ ๋น์ฆ๋์ค ๋ก์ง์ด ์คํ๋์ง ์๋๋ก ์ฐจ๋จํ๋ค.