1. 비밀번호 검증이 너무 약하다. password에 @NotBlank만 있음. → 한 글자도 통과하므로 최소길이, 패턴 걸기
@NotBlank
@Size(min = 8, max = 20, message = "비밀번호는 8~20자여야 합니다")
@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d).{8,20}$", message = "영문+숫자 조합")
String password;
지금은 DTO에서 안 막으니, Service에서 막고 있거나 아예 검증이 없을 가능성이 있음.
확인 필요!
2. gender를 Integer로 받는 점1, 2로 받는 것 같은데, 숫자라 3, 99, -1 같은 이상한 값도 @NotNull은 통과시킨다. 보통은 enum으로 받거나 @Min/@Max로 범위를 거는 게 안전하다.(지금 구조 바꾸기 부담되면 Service에서 검증하고 있는지만 확인)
3. purposeList, interestList가 List<String>인 점 import를 보면 Purpose, Interest enum이 있는데 정작 DTO는 List<String>으로 받음. ["CAREER", "STUDY"]는 통과하지만 ["XYZ"] 같은 잘못된 문자열도 @NotEmpty는 통과 실제 enum 변환은 Service에서 일어날 텐데, 거기서 잘못된 값이 들어오면 어떻게 처리하는지가 트러블슈팅 포인트. (IllegalArgumentException 터질 수 있음)
4. @Getter @Setter 둘 다 있는 점 요청 DTO는 한번 받으면 값이 바뀔 일이 없어서 보통 @Setter는 뺌. Jackson이 역직렬화할 때 setter 없이도 필드에 값을 넣을 수 있다. 큰 문제는 아니지만, 불변으로 두는 게 더 안전