티스토리 뷰

스프링 과제에서 회원가입 API 요구조건에서 
 
회원 가입 API
  • username, password를 Client에서 전달받기
  • username은 최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9)로 구성되어야 한다.
  • password는 최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9)로 구성되어야 한다.
위와 같은 조건이 붙었다. 나는 바로 if문 하고 for문 으로 해결하려고 했다. 
하지만 코드가 너무 더럽다.
if (!(username.length() >= 4 || username.length() <= 10)) throw new IllegalArgumentException("아이디는 최소 4자 이상, 10자 이하입니다.");
        if (!(password.length() >= 8 || password.length() <= 15)) throw new IllegalArgumentException("비밀번호는 최소 8자 이상, 15자 이하입니다.");
        for (char c : username.toCharArray()) {
            if (c < 'a' && c > 'z' && c < '0' && c > '9') {
                throw new IllegalArgumentException("알파벳 소문자(a~z), 숫자(0~9)");
            }
        }
        for (char c : password.toCharArray()) {
            if (c < 'a' && c > 'z' && c < 'A' && c > 'Z' && c < '0' && c > '9') {
                throw new IllegalArgumentException("알파벳 대소문자(a~z, A~Z), 숫자(0~9)");
            }
        }
그래서 사용한것이 @Valid 어노테이션이다.
@Valid란?
@Valid는 Java에서 사용되는 어노테이션(annotation) 중 하나로, 객체 유효성 검사를 위해 사용됩니다. 이 어노테이션을 사용하면, Spring Framework에서 제공하는 유효성 검사 기능을 쉽게 사용할 수 있습니다.
@Valid 어노테이션을 사용하면, 컨트롤러에서 유효성 검사를 수행하고, 문제가 있는 경우 BindingResult 객체를 통해 오류 메시지를 받을 수 있습니다.

 

import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

@Getter
@Setter
public class SignupRequestDto {

    @NotNull(message = "username은 필수 입니다.")
    @Size(min = 4, max = 10, message = "최소 4자 이상, 10자 이하의 숫자를 입력하세요")
    @Pattern(regexp = "^[a-z0-9]*$", message = "알파벳 소문자(a~z), 숫자(0~9)만 입력 가능합니다.")
    private String username;

    @NotNull(message = "password은 필수 입니다.")
    @Size(min = 8, max = 15, message = "최소 8자 이상, 15자 이하의 숫자를 입력하세요")
    @Pattern(regexp = "^[a-zA-Z0-9]*$", message = "알파벳 대소문자(a~z, A~Z), 숫자(0~9)만 입력 가능합니다.")
    private String password;

    private boolean admin = false;

    private String adminToken = "";
}
너무나 깔끔하다.ㅎㅎ
그리고 @Valid를 사용하면서 정규식도 사용하게 되어 살짝 알아보았다.
정규표현식(Regular Expression)이란
자열 데이터 중에서 원하는 조건(패턴)과 일치하는 문자열 부분을 찾아내기 위해 사용하는 것으로, 미리 정의된 기호와 문자를 이용해서 작성한 문자열을 말한다.
문자 설명
. 임의의 한 문자
* 앞 문자가 0개 이상
+ 앞 문자가 1개 이상
? 앞 문자가 0개 또는 1개
{n} 앞 문자가 n개
{n,} 앞 문자가 n개 이상
{n,m} 앞 문자가 n개 이상, m개 이하
[abc] a 또는 b 또는 c
[^abc] a, b, c가 아닌 문자
[a-z] a부터 z까지 중 하나
[^a-z] a부터 z까지 이외의 문자
\d 숫자
\D 숫자 이외의 문자
\s 공백 문자
\S 공백 문자 이외의 문자
\w 알파벳 대소문자, 숫자, _ 중 하나
\W 알파벳 대소문자, 숫자, _ 이외의 문자
예제
  • .*at: "at"으로 끝나는 어떤 문자열이라도 가능한 문자열
  • ^[A-Z][a-zA-Z]{0,7}$: 첫 글자가 대문자인, 길이가 1에서 8 사이인 영문자 문자열

 

 

참고 사이트

https://bamdule.tistory.com/35

 

[Spring Boot] @Valid 어노테이션으로 Parameter 검증하기

java.validation의 @Valid 어노테이션 사용법 정리 글입니다. Spring Boot 라이브러리에서 기본적으로 탑재된 기능이며 따로 dependency해 줄 필요가 없습니다. Spring Boot Version은 2.2.2.RELEASE 입니다. 1. java.valid

bamdule.tistory.com

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%A0%95%EA%B7%9C%EC%8B%9DRegular-Expression-%EC%82%AC%EC%9A%A9%EB%B2%95-%EC%A0%95%EB%A6%AC

 

[JAVA] ☕ 자바 정규식(Regular Expression) 사용법 💯 정리

정규표현식 이란 정규표현식(Regular Expression)이란 문자열 데이터 중에서 원하는 조건(패턴)과 일치하는 문자열 부분을 찾아내기 위해 사용하는 것으로, 미리 정의된 기호와 문자를 이용해서 작성

inpa.tistory.com

 

'Spring' 카테고리의 다른 글

ERD와 JPA 연관관계  (0) 2023.03.08
HTTP, MVC 패턴  (1) 2023.03.05
JPA  (0) 2023.03.04
트랜젝션(Transaction)  (0) 2023.03.02
IoC 와 DI  (0) 2023.03.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함