231126W
며칠 간 이어진 스프링 시큐리티를 이용한 프로젝트.
내가 맡아 구현해야 할 API는 회원가입, 로그인, 비밀번호 수정, 프로필 수정 이렇게 네 가지 였는데, 그 중에서 ‘프로필 수정’을 작업 중이었다.
Client로 부터 요청 값을 받을 ‘UserRequestDto’를 작성하고 있었는데, 프로필에 들어갈 자기소개용 필드 ‘content’ 하나를 마련했다.
그런데 언젠가 다른 웹사이트에서 글을 작성하다 글자 수 500자였나 1500자였나 제한이 걸렸던 적이 있었던게 생각나서 이번에 적용해 보기로 했다.
제일 처음 생각난 건 ‘정규식’ 이었다.
회원가입 API를 만들며 작성한 RequestDto에서 ‘username’과 ‘password’필드를 선언했었는데, 각각 제한을 걸어줬었다.
@Getter
public class UserSignupRequestDto {
@NotBlank
@Pattern(regexp = "^[0-9a-zA-Z]{4,10}+$", message = "유저의 이름은 영문자와 숫자 중 4글자 이상 10글자 이하의 조합입니다.")
private String username;
@NotBlank
@Pattern(regexp = "^[0-9a-zA-Z]{8,15}+$", message = "비밀번호는 영문자와 숫자 중 8글자 이상 15글자 이하의 조합입니다.")
private String password;
}
@Pattern (패턴 어노태이션)을 이용해 ‘정규식’을 걸어줬었는데, 보시다시피 앞에서 [0-9a-zA-Z]로 숫자,영문자,영대문자를 허용시키고 그 뒤에 {4, 10}로 길이 제한을 줬다.
처음에 생각했던 건, 앞 쪽에 들어올 수 있는 글자들은 모조리 적용시키고, 그 다음 뒤의 글자 수 제한에 {0, 1500} 이런식으로 원 하는 만큼 글자 수를 허용시키는 거였다.
하지만 내가 생각해도 뭔가 이상하다.
그러면 역시 검색이지.
해답은 Size Annotation 이었다.
사용법은 간단하다.
@Size(max = '설정하고싶은 최대 글자 수') 이렇게 사용하면 된다.
거기에 최대 글자 수를 초과 했을 때 뜰 메세지까지 띄워주면 더 맛있는? 코드가 되겠다.
@Getter
@RequiredArgsConstructor
public class UserUpdateProfileRequestDto {
@Size(max = 1500, message = "1500자 이내로 작성해 주세요!")
private String content;
}
쨘.
그런데 사실 제일 처음에 고민했던대로 @Pattern을 사용해도 방법은 있다.
@Getter
@RequiredArgsConstructor
public class UserUpdateProfileRequestDto {
@Pattern(regexp = "^.{0,1000}$", message = "1000자 이내로 작성해 주세요!")
private String content;
}
정규식 regexp 에다 입력되는 모든 값을 받는 . 을 적어주고 그 다음 ^.{0,1500}$ 을 적어주면 되겠다.
하지만 역시 @Size 이 간단 명료하겠다.
개발공부를 시작한지 이제 두어달 정도 되어가는데, 이런 식으로 무언가 찾아보면 항상 방안이 나오는 이 ‘커뮤니티’ 라고 해야하나? 신기한 느낌들을 받는다.
‘나만 이 문제로 고생하는게 아니구나 역시!’ 라거나, ‘그만큼 어려운 걸 공부하는 걸까?’ 라는 생각들이 들었다.
오케, 계속 진행해보자.
'코딩 > JAVA' 카테고리의 다른 글
:PP (0) | 2023.11.27 |
---|---|
NoErrorMessege (1) | 2023.11.06 |
TPJ-호텔 예약 프로그램 (5) (1) | 2023.11.02 |
TPJ-호텔 예약 프로그램 (4) (1) | 2023.11.01 |
TPJ-호텔 예약 프로그램 (3) (1) | 2023.11.01 |