일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 객체지향
- java
- SQL
- 인텔리제이 Web 애플리케이션
- spring 게시판 삭제
- 함수
- 자바의정석
- 이클립스 설치
- 친절한 SQL 튜닝
- SQL 튜닝
- SpringSecurity 로그아웃
- @PreAuthorize("isAuthenticated()")
- 산술 연산자
- 비교 연산자
- 연산자
- SQL튜닝
- join
- 식별자
- StringBuffer
- 상속
- SpringSecurity 로그인
- 오버로딩
- 객체
- 스프링시큐리티 로그아웃
- 반복문
- 예약어
- 친절한 SQL
- 오버라이딩
- 배열
- 논리 연산자
- Today
- Total
gi_dor
Regex를 활용한 입력 유효성 검사 본문
Regular Expression - 정규 표현식
정규표현식은 특정한 규칙을 가진 문자열의 집합을 사용하기 위해 쓰이는 형식이다
주 사용처는 전화번호 , 주민번호 , 이메일에 특정한 형식 검증
요청한 데이터가 어떤 특정 형태 및 조건을 충족하는지를 확인
회원가입을 예로들면
회원가입을 진행할때 이메일 입력칸에 "a@aver.com" 이라고 입력하고 회원가입을 했다면
사용자는 이메일로 임시 비밀번호를 발급받을수가 없다.
- ^ : 문자열의 시작
- $ : 문자열의 종료
- . : 임의의 한 문자
- * : 앞 문자가 없거나 무한정 많음
- + : 앞 문자가 하나 이상
- ? : 앞 문자가 업거나 하나 존재
- [,] : 문자의 집합이나 범위, 두 문자 사이는 ~ 기호로 범위 표현
- {, } : 횟수 또는 범위
- (, ) : 괄호 안의 문자를 하나의 문자로 인식
- | : 패턴 안에서 OR 연산을 수행
- \ : 정규식에서 역슬래시는 확장문자로 취급하고, 역슬래시 다음에 특수문자가 오면 문자로 인식
- \b : 단어의 경계
- \B : 단어가 아닌 것에 대한 경계
- \A : 입력의 시작 부분
- \G : 이전 매치의 끝
- \Z : 종결자가 있는 경우 입력의 끝
- \z : 입력의 끝
- \s : 공백 문자
- \S : 공백 문자가 아닌 나머지 문자(^\s와 동일)
- \w : 알파벳이나 숫자
- \W : 알파벳이나 숫자가 아닌 문자(^\w와 동일)
- \d : 숫자 [0-9]와 동일하게 취급
- \D : 숫자를 제외한 모든 문자(^0-9와 동일)
@Valid 어노테이션를 활용한 검사
스프링부트에서는 Regex (정규 표현식)을 쉽게 사용할 수 있도로 기능을 제공해다
User.vo 클래스에 정규 표현식 조건을 작성해주면,
Controller 에서 @Valid 어노테이션과 함께 유효성 검사를 할 수 있다.
프로젝트에서 사용하게될 회원가입 진행시에 어떻게 백엔드에서 검증 처리를 하는지 다루려고 한다..
@Valid 는 기본적으로 Controller(컨트롤러)에서만 동작하며, 다른 계층(service)에서 사용하기 위해서는
@Validated 어노테이션과 결합해서 사용해야한다
@Valid는 Java 에서 지원해주는 어노테이션
@Validated는 Spring에서 지원해주는 어노테이션이다
입력 파라미터의 유효성 검증은 컨트롤러에서 최대한 처리하고 넘겨주는 것이 좋다.
하지만 개발을 하다보면 불가피하게 다른 곳에서 파라미터를 검증해야 할 수 있는데
.
Spring에서는 이를 위해 AOP 기반으로 메소드의 요청을 가로채서 유효성 검증을 진행해주는 @Validated를 제공한다. @Validated는 JSR 표준 기술이며 Spring 프레임워크에서 제공하는 어노테이션 및 기능입니다.
@Validated는 @Valid의 기능을 포함하고 있고, 유효성을 검토할 그룹을 지정할 수 있는 추가 기능이 있습니다.
아마 Controller 에서만 사용할 예정이다.
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long userNO;
@NotBlank(message = "ID는 필수 입력값 입니다")
@Pattern(regexp = "^[a-z0-9]{5,20}$", message = "아이디는 영어 소문자와 숫자만 사용하여 5~20자리여야 합니다.")
private String userId;
@NotBlank(message= "비밀번호는 필수 입력 값 입니디")
@Size (min = 8 , message = "비밀번호는 8글자 이상 입니다")
@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[~!@#$%^&*()+|=])[A-Za-z\\d~!@#$%^&*()+|=]{8,16}$", message = "비밀번호는 8~16자 영문 대 소문자, 숫자, 특수문자를 사용하세요.")
private String userPassword;
// @Pattern(regexp = "$expression") 정규식검증
@NotBlank(message = "이름은 필수 입력 값입니다")
@Pattern(regexp="^[가-힣]{2,}$", message = "이름은 한글 2글자 이상")
private String userName;
@NotBlank(message="이메일은 필수 입력 값입니다")
@Email(message = "유효한 이메일 형식이 아닙니다")
private String Email;
private LocalDateTime userCreatedDate;
private LocalDateTime userUpdatedDate;
@NotBlank(message = "전화번호는 필수 입력 값입니다")
@Pattern(regexp="^\\d{2,3}-\\d{3,4}-\\d{4}$" , message = "유효한 전화번호 형식이 아닙니다")
private String userTel;
private String userZipCode;
private String userAddress;
private String userAddressDetail;
private String userDelYn;
}
@Email(message = "유효한 이메일 형식이 아닙니다")
@Email 어노테이션을 사용하면 별도의 정규식을 작성하지 않고 이메일 주소의 형식을 간단하게 유효성 검사할수 있다
이메일 주소의 형식이 복잡해 정규식으로 정확히 표현하기 어렵기 때문이라고 한다
.
@Pattern(regexp = "^[a-z0-9]{5,20}$", message = "아이디는 영어 소문자와 숫자만 사용하여 5~20자리여야 합니다.")
^: 문자열의 시작 , 패턴의 시작
[a-z0-9]: 소문자 알파벳(a-z) 또는 숫자(0-9) 중 하나를 뜻한다
{5,20}: 이전에 나온 패턴이 5부터 20번 반복될 수 있음을 나타낸다
$: 문자열의 끝 , 패턴의 종료 나타낸다
Ex. asdf1232
,qwer77
@Pattern(regexp = "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[~!@#$%^&*()+|=])[A-Za-z\\d~!@#$%^&*()+|=]{8,16}$",
message = "비밀번호는 8~16자 영문 대 소문자, 숫자, 특수문자를 사용하세요.")
^: 문자열의 시작 , 패턴의 시작
(?=.*[A-Za-z]): 최소한 한 개의 알파벳이 포함
(?=.*\\d): 최소한 한 개의 숫자
(?=.*[!@#$%^&*()+|=]): 최소한 한 개의 특수문자!@#$%^&*()+|=]{8,16}: 소문자, 대문자, 숫자, 특수문자
[A-Za-z\\d
$: 문자열의 끝 , 패턴의 종료 나타낸다
Ex. Password123!
, HelloWorld123$#
"password", "12345678", "abcde"와 같은 문자열은 알맞지 않다.
'Back_End > SpringBoot' 카테고리의 다른 글
마이페이지 ver.1- SpringSecurity, MySQL , MyBatis @PreAuthorize("isAuthenticated()") (0) | 2024.04.22 |
---|---|
시큐리티로 로그인한 회원 정보 조회 , 수정 - SpringSecurity, MySQL , MyBatis (0) | 2024.04.17 |
로그아웃 - SpringSecurity, MySQL , MyBatis (0) | 2024.04.17 |
로그인 SpringSecurity, MySQL , MyBatis (0) | 2024.04.15 |
회원가입 - SpringSecurity , @Valid , MySQL , MyBatis (0) | 2024.04.12 |