๋๋ถ๋ถ์ ์น์ฌ์ดํธ๋
ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ฐ์ง๋ค.
๊ทธ ์ค ํ์๊ฐ์ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด์!
1. ํ๋ฉด ๋์๊ณผ ์ ์ฒด์ฝ๋
- ํ์๊ฐ์ ์์
- ํ์๊ฐ์ ์ค๋ณต
- ๋๋ ํ ๋ฆฌ์ ํด๋์ค

- Vue์ Spring์ ์ฐ๊ฒฐํด์ฃผ๋ dto
Register-Web-backend/src/main/java/com/example/JoinWeb/dto at master · hyeong-ing/Register-Web-backend
์ผ๋ฐ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ, ๊ฐํธ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ๊ตฌํํ์ต๋๋ค. Contribute to hyeong-ing/Register-Web-backend development by creating an account on GitHub.
github.com
- ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ ํจํด ์ฒดํฌ
Register-Web-backend/src/main/java/com/example/JoinWeb/register/check at master · hyeong-ing/Register-Web-backend
์ผ๋ฐ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ, ๊ฐํธ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ๊ตฌํํ์ต๋๋ค. Contribute to hyeong-ing/Register-Web-backend development by creating an account on GitHub.
github.com
- ํ์๊ฐ์ ์ปจํธ๋กค๋ฌ + ์์ด๋,์ด๋ฉ์ผ ์ค๋ณต์ฒดํฌ ์ปจํธ๋กค๋ฌ
Register-Web-backend/src/main/java/com/example/JoinWeb/register/controller at master · hyeong-ing/Register-Web-backend
์ผ๋ฐ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ, ๊ฐํธ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ๊ตฌํํ์ต๋๋ค. Contribute to hyeong-ing/Register-Web-backend development by creating an account on GitHub.
github.com
- ์ ๋ ฅ๋ ์ ๋ณด๋ฅผ ๋ ํฌ์งํ ๋ฆฌ์ ์ฐ๊ฒฐํ Member, MemberService
Register-Web-backend/src/main/java/com/example/JoinWeb/register at master · hyeong-ing/Register-Web-backend
์ผ๋ฐ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ, ๊ฐํธ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ๊ตฌํํ์ต๋๋ค. Contribute to hyeong-ing/Register-Web-backend development by creating an account on GitHub.
github.com
- ๋ ํฌ์งํ ๋ฆฌ
Register-Web-backend/src/main/java/com/example/JoinWeb/repository at master · hyeong-ing/Register-Web-backend
์ผ๋ฐ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ, ๊ฐํธ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ๊ตฌํํ์ต๋๋ค. Contribute to hyeong-ing/Register-Web-backend development by creating an account on GitHub.
github.com
- ํ์๊ฐ์ vue
Register-Web-frontend/src/views/BasicRegister.vue at master · hyeong-ing/Register-Web-frontend
์ผ๋ฐ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ, ๊ฐํธ ํ์๊ฐ์ ๊ณผ ๋ก๊ทธ์ธ์ ๊ตฌํํ์ต๋๋ค. WebStrom์ผ๋ก Vue.js์ Vite๋ฅผ ์ฌ์ฉํ์ต๋๋ค. - hyeong-ing/Register-Web-frontend
github.com
2. ์ด๋ป๊ฒ ๋ง๋ค์ง ๊ตฌ์
- ์ฒ์์ ์๊ฐํ ํ๋ฉด


- ์ค์ ๋ก ๋ง๋ ํ๋ฉด

์ด๋ฆ, ์์ด๋, ๋น๋ฐ๋ฒํธ, ์ ํ๋ฒํธ, ์ด๋ฉ์ผ์ ๋ชจ๋ ํจํด์ฒดํฌ๊ฐ ๋ค์ด๊ฐ๋ค. ํจํด์ ์ด๊ธ๋๋ฉด ๊ฒฝ๊ณ ์ฐฝ์ด ์ถ๋ ฅ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ด๋์ ์ด๋ฉ์ผ์ ์ค๋ณต์ฒดํฌ๋ฅผ ํด์ผํ๋ค. ์ค๋ณต์ฒดํฌ๋ฅผ ํ์ง ์์ผ๋ฉด ๊ฒฝ๊ณ ์ฐฝ์ด ์ถ๋ ฅ๋๋ค.
3. ํ์ธํด์ผํ ๊ฒ
| ์ด๋ฆ | ์์ด๋ | ๋น๋ฐ๋ฒํธ | |
| 1 | ํ๊ธ๋ง ๊ฐ๋ฅ | ์๊ธ์๋ ๋ฌด์กฐ๊ฑด ์์ด | ๋๋ฌธ์, ํน์๋ฌธ์ ์ฌ์ฉํ์ฌ 8์ ์ด์ |
| 2 | 2์์ด์ 5์ ์ดํ | ์์ด์ ์ซ์๊ฐ ํจ๊ป | ๋น๋ฐ๋ฒํธ์ ๋น๋ฐ๋ฒํธ ํ์ธ์ด ๋ค๋ฅด๋ฉด ๊ฐ์ ๋ถํ |
| 3 | ์ ๋ณด ๋ฏธ๊ธฐ์ ์ ๊ฐ์ ๋ถํ | ์ค๋ณต์ฒดํฌ | ์ ๋ณด ๋ฏธ๊ธฐ์ ์ ๊ฐ์ ๋ถํ |
| 4 | ์์ด๋ ๋ฏธ์
๋ ฅ์, ์ค๋ณต์ฒดํฌ ๋ฒํผ์ ๋๋ฅด๋ฉด '์์ด๋๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์.' ๋ฉํธ ์ถ๋ ฅ |
||
| 5 | ์์ด๋ ์์ ํ, ์ค๋ณต์ฒดํฌ ๋ค์ ๋๋ฌ์ผํจ | ||
| 6 | ์ ๋ณด ๋ฏธ๊ธฐ์ ์ ๊ฐ์ ๋ถํ | ||
| 7 | ์ค๋ณต์ฒดํฌ ์ํ๋ฉด ๊ฐ์ ๋ถํ |
| ์ ํ๋ฒํธ | ์ด๋ฉ์ผ | |
| 1 | ํ๊ตญ ์ ํ๋ฒํธ ํ์ค์ ๋ง์ถฐ ๊ธฐ์ | ์ด๋ฉ์ผ ํ์ค์ ๋ง์ถฐ ๊ธฐ์ |
| 2 | ์ ๋ณด ๋ฏธ๊ธฐ์ ์ ๊ฐ์ ๋ถํ | ์ด๋ฉ์ผ ๋ฏธ์ ๋ ฅ์, ์ค๋ณต์ฒดํฌ ๋ฒํผ์ ๋๋ฅด๋ฉด '์์ด๋ ์ ๋ ฅํด์ฃผ์ธ์.' ๋ฉํธ ์ถ๋ ฅ |
| 3 | ์ด๋ฉ์ผ ์์ ํ, ์ค๋ณต์ฒดํฌ ๋ค์ ๋๋ฌ์ผํจ | |
| 4 | ์ ๋ณด ๋ฏธ๊ธฐ์ ์ ๊ฐ์ ๋ถํ | |
| 5 | ์ค๋ณต์ฒดํฌ ์ํ๋ฉด ๊ฐ์ ๋ถํ |
4. RegisterRequest.class (dto)
DTO (Data Transfer Object, ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด)
: ํ๋ก์ธ์ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฐ์ฒด๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ณต์กํ ๋ก์ง ์์ด ์์ํ๊ฒ ์ ๋ฌํ๊ณ ์ถ์ ๋ฐ์ดํฐ๋ง ๋ด๊ณ ์๋ค.
@ToString
@Getter
@Setter
public class RegisterRequest {
private String name;
private String userId;
private String pwd;
private String pwdConfirm;
private String tel;
private String birth;
private String email;
}
@ToString
: ๊ฐ์ฒด์ ๋ชจ๋ ํ๋ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณด๊ธฐ ์ข๊ฒ ์ถ๋ ฅํ๋ค.
@Getter
: ๊ฐ์ฒด ์์ ์ ์ฅ๋ ๊ฐ์ ๊บผ๋ด์ ์ฝ๋ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ค.
@Setter
: ๊ฐ์ฒด ์์ ๊ฐ์ ๋ณ๊ฒฝ/์ ์ฅํ๋ ๋ฉ์๋๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ค.
์ฌ์ฉ์๊ฐ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ฉด, ์ ๋ ฅํ ๋ฐ์ดํฐ๋ RegisterRequest ํด๋์ค์ ํ๋์ ์ ์ฅ๋๋ค. ๋ฌผ๋ก ํ์ฌ ํด๋์ค์์ ํ ์ ์๋ ๊ฒ์ ์๋ค. ์ด๋ ๊ฒ ๋ง๋ค์ด๋๋ฉด ๋์ค์ ํ์๊ฐ์ ์ ์ฒ๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ์์ RegisterRequest ํด๋์ค๋ฅผ dto๋ก ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๋๋ค.
ํ์ฌ ์ฝ๋์์ @ToString์ ํ์ํ์ง ์๋ค. ์คํ๋ ค ์์ด์ผํ๋ ์ฝ๋๋ก, ์ ๋ ฅ๊ฐ์ด ์ ๋๋ก ์ ๋ฌ๋๊ณ ์๋์ง ํ์ธํ๊ธฐ ์ํด ์ด๋ฐ์ ์ค์ ํด๋ ์ฝ๋์๋ค.(ํน์ ํ์ํ ๋ถ์ ์ํด ์ ์ด๋๋ค) ๋ง์ฝ @ToString์ ์ค์ ํด๋ ์ฑ ๋ฐฐํฌ๋ฅผ ํ๊ฒ๋๋ฉด ๋น๋ฐ๋ฒํธ๊น์ง ๋ ธ์ถ๋์ด ๋ณด์ ์ฌ๊ณ ๋ก ์ด์ด์ง๋ ์ญ์ ํ๋ ๊ฒ์ด ์์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ @ToString.Exclude๋ฅผ ์ด์ฉํด ๋น๋ฐ๋ฒํธ ํ๋๋ฅผ ์ถ๋ ฅ ๋์์์ ์ ์ธํ ์ ์์ผ๋ ์์๋๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
+ ์ถ๊ฐ ์ ๋ณด
@NotBlank
@Pattern(regexp = "^[๊ฐ-ํฃ]{2,5}$", message = "์ด๋ฆ์ 2-5๊ธ์ ํ๊ธ๋ง ๊ฐ๋ฅํฉ๋๋ค.")
private String name;
@NotBlank
: null, "", " "์ ๋ชจ๋ ํ์ฉํ์ง ์๋๋ค.
@Pattern
: ์์ฒญ ๊ฐ์ด ์ ๊ทํํ์์ ๋ง๋ ๋ฌธ์์ด์ธ์ง ๊ฒ์ฆํ๋ค.
์ฒ์์๋ ์์ ์ฝ๋์ฒ๋ผ dto์์ ์ ๋ ฅ๊ฐ์ ์กฐ๊ฑด์ ๋ถ์๋ค.(๋ค์ํ ์ํฉ์ ๋ง๊ฒ alert ๋ฌธ๊ตฌ๋ฅผ ๋จ๊ธฐ๊ณ ์ถ์ด์ ๋์ค์ ๋ฐ๊ฟจ๋ค)
null๊ณผ "" ๊ทธ๋ฆฌ๊ณ " "์ ๊ฐ์ด ๋ฌด์กฐ๊ฑด ๊ธ์๊ฐ ํ๋๋ผ๋ ๋ค์ด์ค๋๋ก @NotBlank๋ฅผ ์ค์ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ๊ตฌ์ฒด์ ์ธ ์์ฒญ ๊ฐ์ @Pattern์ผ๋ก ์ค์ ํ ์ ์๋ค. ๋ฌผ๋ก ๋๋ ์์ ๋ฐ๋ก ํด๋์ค๋ฅผ ๋ง๋ค์ด์ ์ค์ ํ๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ dto์์ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ๋ ์์ผ๋ ์์๋๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
์ปจํธ๋กค๋ฌ์ @Valid๋ฅผ ๋ถ์ฌ์ผํ๋ ๋ฑ ์ฌ์ฉ๋ฒ(?)์ ๋ํ ์์ ์ฝ๋๊ฐ ์์ผ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์๊ณ ์ถ์ผ๋ฉด ์๋ ์ถ์ฒ๋ฅผ ๋๋ฅด๋ฉด ๋๋ค.
- @NotNull, @NotEmpty, @NotBlank ์ฐจ์ด์ ๊ณผ ์์ ์ฝ๋
[Spring Boot] @NotNull, @NotEmpty, @NotBlank แแ ด แแ กแแ ตแแ ฅแท ๋ฐ ์ฌ์ฉ๋ฒ
๊ฐ๋ฐํ์๋ API ์ request parameter ์ null ์ฒดํฌ๋ฅผ ์ด๋ป๊ฒ ํ๊ณ ๊ณ์ ๊ฐ์? ๋๋ถ๋ถ ๋ณ๋์ null ์ฒดํฌ util ์ ์ฌ์ฉํ๊ฑฐ๋, Controller ์์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ์ฌ null ์ ์ฒดํฌํ๊ธฐ๋ ํฉ๋๋ค. ์ด๋ฌํ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฉ
sanghye.tistory.com
5. Check
♠ ์ค๋ณต์ฒดํฌ ๋๋ฌธ์ ์ด๋ฉ์ผ๊ณผ ์์ด๋๋ ๋ค์ ๋ธ๋ก๊ทธ์์ ๋ค๋ฃจ๋๋ก ํ๊ณ ์ฌ๊ธฐ์๋ ์ด๋ฆ, ํจ์ค์๋, ์ ํ๋ฒํธ๋ง ์ฌ๋ฆฌ๊ฒ ์ต๋๋ค. ♠
- CheckName
public class CheckName {
private static final String NAME_PATTERN = "^[๊ฐ-ํฃ]{2,5}$";
private static final Pattern pattern = Pattern.compile(NAME_PATTERN);
public static String checkName(String name) {
if(name == null || name.isBlank()) {
return "์ฑํจ์ ์
๋ ฅํด์ฃผ์ธ์.";
}
if (!pattern.matcher(name).matches()) {
return "์ฑํจ์ 2~5๊ธ์์ ํ๊ธ๋ง ๊ฐ๋ฅํฉ๋๋ค.";
}
return "ok";
}
}
^[๊ฐ-ํฃ]{2,5}$๋ฅผ ํ ๋ฒ ํด์ฒดํด๋ณด์. ^์ $๋ ์ต์ปค๋ผ๋ ๊ฒ์ผ๋ก ๋ฌธ์์ด์ ์์๊ณผ ๋์ ๋ํ๋ด๋ฉฐ, ์ ์ฒด ํจํด์ ์์ ํ ์ผ์นํด์ผํ๋ค. [๊ฐ-ํฃ]๋ ํ๊ธ์ ๋ชจ๋ ์์ ์ ๋ํ๋ด๋ฉฐ, ํ๊ธ๋ง ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋ค. ์์ด๋ ๊ฐ๋ฅํ๊ฒ ํ๋ ค๋ฉด [A-Za-z]๋ฅผ ๋ถ์ด๋ฉด ๋๋ค. {2, 5}๋ 2-5๊ธ์๋ก ๊ธธ์ด๋ฅผ ์ ํํ๋ค.
์ด๋ ๊ฒ ์ค์ ํ NAME_PATTERN์ ์ปดํ์ผํด์ pattern ๊ฐ์ฒด๋ก ๋ง๋ค์๋ค. ์ฌ์ค ํด๋น ์ฝ๋๋ฅผ ๋ณต๋ถํด์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์ private static final์ด ๋ถ๋์ง๊น์ง ๋ชฐ๋๋ค. ์ด๋ ๊ฒ ๋ธ๋ก๊ทธ๋ฅผ ์ ๋ฆฌํ๋ค๋ณด๋ฉด ๋จ์ํ ๋์ด๊ฐ๋ ์ฝ๋๋ค๋ ๋์๋ณด๊ฒ ๋๋ค. pattern ๊ฐ์ฒด์ private static final์ ๋ถ์ฌ ์ฑ๊ธํค ๊ฐ์ฒด๋ก ๋ง๋ ์ด์ ๋ ์ ๊ท์์ ํด์ํด ๋ด๋ถ ์ํ๋ก ๋ฐ๊พธ๋ ๋น์ฉ์ด ๋๋ ์์ ์ด๋ผ ์ฌ์ฌ์ฉ์ด ์ค์ํด์๋ผ๊ณ ํ๋ค. ์ด๋ ๊ฒ ์ปดํ์ผ์ ํด๋๋ฉด ๋งค์นญ ๋น์ฉ๋ง ์ง๋ถํ๊ฒ ๋๋ ๋ ํจ์จ์ ์ด๋ผ๊ณ ํ๋ค.
์ด๋ฆ๋์ null ๊ฐ์ด ๋ค์ด์ค๊ฑฐ๋, ๊ธ์๊ฐ ๋ค์ด์ค์ง ์์ผ๋ฉด "์ฑํจ์ ์ ๋ ฅํด์ฃผ์ธ์."๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ๋จ๋๋ก ์ค์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ท์์ด ๋ถ์ผ์นํ๋ฉด "์ฑํจ์ 2~5๊ธ์์ ํ๊ธ๋ง ๊ฐ๋ฅํฉ๋๋ค." ๋ฌธ๊ตฌ๊ฐ ์ถ๋ ฅ๋๋๋ก ํ๋ค. ๋ฌธ์ ๊ฐ ์์ผ๋ฉด "ok"๋ฅผ ๋ฐํํ๋ค.
์ฌ๊ธฐ์ ๋๊ฐ์ง ์ฌ์ค์ ์๊ฒ๋๋ค. ์ฒซ๋ฒ์งธ๋ ๋์ด์ฐ๊ธฐ๋ฅผ ๋ฃ์ผ๋ฉด matches๊ฐ ๋ฐ๋๋์ด "์ฑํจ์ 2~5๊ธ์์ ํ๊ธ๋ง ๊ฐ๋ฅํฉ๋๋ค." ๊ฒฝ๊ณ ์ฐฝ์ด ์ถ๋ ฅ๋๋ค. null ๊ฐ๋ง "์ฑํจ์ ์ ๋ ฅํด์ฃผ์ธ์."๋ผ๊ณ ๋ฌ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ฒ์งธ๋ ์ด์ฐจํผ matches๋ก ํจํด์ ์ฒดํฌํ๊ธฐ ๋๋ฌธ์ ์ต์ปค๋ฅผ ์ฐ์ง ์์๋ ๋๋ค๋ ๊ฒ์ด๋ค. matcher( ).matches ์์ฒด๊ฐ ๋ฌธ์์ด ์ ์ฒด ์ผ์น๋ฅผ ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ ์ต์ปค๋ฅผ ๋นผ๋ ์ ๋์๊ฐ๋ค.
์ ๋ง๋ก ์น์ฌ์ดํธ๋ฅผ ์ด๊ธฐ ์ํจ์ด ์๊ฑฐ๋ ํ์ ๋์ด๋ ค๋ฉด ๋ฐํ๊ฐ๋ String์ด ์๋, boolean+๋ฉ์ธ์ง ํน์ enum ํน์ ์์ธ/์๋ฌ์ฝ๋๋ก ๊ตฌ์กฐํํ๋ฉด ์ฌ์ฉ์ฑ์ด ๋ ๋์ด๋ ๊ฑธ ์ถ์ฒํ๋ค.
- CheckPwd
public class CheckPwd {
private static final String PASSWORD_PATTERN =
"^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])(?=.*[!@#$%^&*()-+=]).{8,}$";
private static final Pattern pattern = Pattern.compile(PASSWORD_PATTERN);
public static String checkPwd(String pwd, String pwdConfirm) {
if(pwd == null || pwd.isBlank()) {
return "ํจ์ค์๋๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.";
}
if (pwdConfirm == null || pwdConfirm.isBlank()) {
return "ํจ์ค์๋ ํ์ธ๋์ ์
๋ ฅํด์ฃผ์ธ์.";
}
if (!pwd.equals(pwdConfirm)) {
return "ํจ์ค์๋๊ฐ ์ผ์นํ์ง ์์ต๋๋ค.";
}
if (!pattern.matcher(pwd).matches()) {
return "ํจ์ค์๋์ ๋๋ฌธ์์ ํน์๋ฌธ์๊ฐ ํฌํจ๋ 8๊ธ์ ์ด์์ด์ด์ผํฉ๋๋ค.";
}
return "ok";
}
CheckPwd ํด๋์ค์์๋ pwd์ pwdConfirm์ ์ ๋ ฅ๋ ๊ฐ์ด ๋์ผํ์ง ํ์ธํด์ผํ๋ค. ์ปจํธ๋กค๋ฌ์์ CheckPwd ํด๋์ค๋ก ๋งค๊ฐ๋ณ์ pwd์ pwdConfirm์ ๋ณด๋ผ ๊ฒ์ด๋ค. ๊ทธ๋ผ CheckPwd ํด๋์ค์์ ๋ฐ์ ๋ ์ธ์ ๊ฐ์ด ๋๋ฑํ์ง equals๋ฅผ ํตํด ํ์ธํ ๊ฒ์ด๋ค.
- CheckTel
public class CheckTel {
private static final String TEL_PATTERN = "^01(?:0|1|[6-9])[-](\\d{3}|\\d{4})[-](\\d{4})$";
private static final Pattern pattern = Pattern.compile(TEL_PATTERN);
public static String checkTel(String tel) {
if(tel == null || tel.isBlank()) {
return "ํด๋ํฐ ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.";
}
if (!pattern.matcher(tel).matches()) {
return "ํด๋ํฐ ๋ฒํธ ์์์ 010-0000-0000 ์
๋๋ค.";
}
return "ok";
}
}
6. RigisterController
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:5173")
public class RegisterController {
@Autowired
private MemberService memberService;
@PostMapping("/register")
public ResponseEntity<String> register(@RequestBody RegisterRequest request) {
// ์ด๋ฆ ์ฒดํฌ
String nameCheckResult = CheckName.checkName(request.getName());
if (!"ok".equals(nameCheckResult)) {
return ResponseEntity.badRequest().body(nameCheckResult);
}
// ํจ์ค์๋ ์ฒดํฌ
String pwdCheckResult = CheckPwd.checkPwd(request.getPwd(), request.getPwdConfirm());
if (!"ok".equals(pwdCheckResult)) {
return ResponseEntity.badRequest().body(pwdCheckResult);
}
// ํฐ๋๋ฒ ์ฒดํฌ
String telCheckResult = CheckTel.checkTel(request.getTel());
if (!"ok".equals(telCheckResult)) {
return ResponseEntity.badRequest().body(telCheckResult);
}
// ์ถ๋ ฅ์ฉ -> ์์ ์ผํ๋ ์ฝ๋
System.out.println("=========================");
System.out.println("ํ์๊ฐ์
์ ๋ณด๊ฐ ๋ค์ด์์ต๋๋ค.");
System.out.println("=========================");
System.out.println(request);
System.out.println("=========================");
// ํ์ธ์ด ๋๋ ๋ฐ์ดํฐ๋ member์ ์ ์ฅ
Member member = new Member();
member.setName(request.getName());
member.setUserId(request.getUserId());
member.setPwd(request.getPwd());
member.setTel(request.getTel());
member.setBirth(request.getBirth());
member.setEmail(request.getEmail());
memberService.save(member);
// ํ์๊ฐ์
ํ๊ฐ
return ResponseEntity.ok("ok");
}
}
๋ค๋ฅธ ํฌ์คํ ์์ ์์ ์ฝ๋๋ ๋ ์์ธํ๊ฒ ์ดํด๋ณด๊ธฐ๋ก ํ๊ณ , ํจํด ์ฒดํฌ์ ๊ด๋ จ๋ ์ ๋ฐ์ ์ธ ์ฝ๋๋ง ์ค๋ช ํ๊ฒ ๋ค. @RequestBody RegisterRequest request๋ก vue์์ ๋ณด๋ธ JSON ๋ฐ์ดํฐ๋ฅผ RegisterRequest DTO๋ก ๋ณํํด์ ๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ ResponseEntity<String>์ ์๋ต์ ์ํ ์ฝ๋์ body ํํ๋ก ๋๋ ค์ฃผ๋ ํ์ ์ด๋ค. ์์ ์ฝ๋์์ ๊ฐ์ ์ ์ฑ๊ณตํ๋ฉด 200 OK + "ok"๊ฐ ๋ณด๋ด์ง๋ค.
String nameCheckResult = CheckName.checkName(request.getName()); ์ฝ๋๋ฅผ ๋ณด์. request.getName( )์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ด๋ฆ์ ๊ฐ์ ธ์จ๋ค. ์ด๋ dto์ ์ค์ ํ๋ Getter๊ฐ ํธ์ถ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ธ์จ ์ด๋ฆ์ CheckName.checkName์ผ๋ก CheckName ํด๋์ค๋ก ํฅํด ๋ง๋ค์ด๋ if๋ฌธ์ ๊ฑฐ์น๊ฒ ๋๋ค. ๋ง์ฝ if๋ฌธ์ ํต๊ณผํ๋ฉด "ok"๊ฐ ๋์ด๊ฐ ๊ฒ์ด๊ณ , if๋ฌธ์ ๊ฑธ๋ฆฌ๋ฉด ๊ทธ์ ๋ง๋ ๋ฌธ์์ด์ด ๋์ด๊ฐ๋ค.
if (!"ok".equals(nameCheckResult)) ๋์ด๊ฐ ๊ฒฐ๊ณผ๊ฐ์ด ok๊ฐ ์๋๋ผ๋ฉด? ResponseEntity.badRequest().body(nameCheckResult);์ผ๋ก "์ฑํจ์ ํ๊ธ๋ก ์์ฑํ์ ์ผํฉ๋๋ค."๊ฐ body์ ๋ด๊ธฐ๊ณ 400 Bad Request ์๋ต์ ๋ณด๋ด๊ฒ ๋๋ค. ์ด์ ํ๋ก ํธ๋ ํด๋น ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ฌ์ฉ์ ํ๋ฉด์ ์ถ๋ ฅ์ํจ๋ค.
์๋์ ์ถ์ฒ๋ฅผ ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค.
๋ธ๋ก๊ทธ์ ์ ๊ฐ ์ต๋ํ ์ดํดํ ๋ด์ฉ๊น์ง๋ง ์ ๋๊ฑฐ๋ผ
์ถ์ฒ์ ๋ค์ด๊ฐ์๋ฉด ๋ ๋ง์ ๋ด์ฉ์ด ์์ด ๊ณต๋ถํ์๋๋ฐ ๋์๋์ค๊ฒ๋๋ค.
๐ชฝ
ํ๋ฆฐ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์
- ์ฌ๋ฐ๋ฅธ ํจ์ค์๋ ์์ฑ ๊ท์น
์ฌ๋ฐ๋ฅธ ํจ์ค์๋ ์์ฑ๊ท์น(๊ธธ์ด vs ๋ณต์ก๋)
๊ฐ์ธ์ ๋ณด์ ๊ธฐ์ ์ ·๊ด๋ฆฌ์ ๋ณดํธ์กฐ์น ๊ธฐ์ค ์ 4์กฐ(์ ๊ทผํต์ ) โฆ ์ ๋ณดํต์ ์๋น์ค ์ ๊ณต์๋ฑ์ ์ด์ฉ์๊ฐ ์์ ํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ด์ฉํ ์ ์๋๋ก ๋น๋ฐ๋ฒํธ ์์ฑ๊ท์น์ ์๋ฆฝํ๊ณ , ์ดํํ๋ค. โง ์ ๋ณดํต
peim.tistory.com
์ต์ปค: ๋ฌธ์์ด์ ์์ ^๊ณผ ๋ $
ko.javascript.info
์ ๊ทํํ์
๋ฌธ์์ด์ ๋ค๋ฃจ๋ ํจํดํ๋ ์์ ์ ์ ์ํ๋ ์์๋ฌธ์์ด ๋งค์นญ, ํ ํ๋ฆฟ ์ผ์น ์ฌ๋ถ ํ์ธ, ํ ํ๋ฆฟ ๋งค์นญ ๊ฒ์(๋ฌธ์๊ฐ ์์ ๋ ์ด๋ฉ์ผ๋ง ๋ฝ๋ ์์ ์ ํ ๋ ๋ฑ๋ฑ)์ ๊ทํํ์์ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋จ์ฉํ๋ฉด
velog.io
[JAVA] ์ ๊ท์์ ์ด์ฉํ์ฌ ํจ์ค์๋ Validator ๋ง๋ค๊ธฐ!
ํจ์ค์๋ Validator Java๋ฅผ ํตํด์ ๊ฐ๋จํ ํจ์ค์๋ Validator๋ฅผ ์์ฑํด๋ณด์. ์์ฆ ๋ณด์์ด ๋์์ง์ ๋ฐ๋ผ ํจ์ค์๋ ๊ท์น๋ ๋ณต์กํด์ง๋ค. ์ฐ์ ๋ํ์ ์ธ ๊ท์น๋ค์ ๋์ดํด๋ณด์. (?=.*[A-Z]): ๋๋ฌธ์๊ฐ
jay-cheol.tistory.com
ResponseEntity์ ์ฌ์ฉ๋ฒ ๋ฐ ์ ์ง๋ณด์
ResponseEntity๋ฅผ ์ฐ๋ ์ด์ ์ผ๋ฐ์ ์ผ๋ก Controller์์ ์๋์ ๊ฐ์ด ๊ฐ์ฒด๋ฅผ Return ํ๋ ๊ฒฝ์ฐ HTTP ์๋ต์ ์ ์ดํ ์๊ฐ ์์ต๋๋ค. @GetMapping("/") public User getUser() { User user = userService.getUser(); return user; } ํ์ง
stir.tistory.com
@Getter and @Setter
projectlombok.org