오늘은 Spring boot을 활용한 프로젝트에서 정규표현식을 사용하는 법을 알아보겠다.
우선 정규표현식이란 쉽게말하면 우리가 로그인을 할때 사이트에서 정한 형식대로 아이디나 비밀번호를 적지않으면 다시 적게되는 경우가 있는데 그형식을 적용할때 사용하는 문자들이라고 생각하면 편할것 같다.
이글에선 문법하나하나를 살펴보진 않고 Spring boot에선 이러한 기능을 어떤식으로 적용하는지 알아 보겠다.
Validation
Validation 이란 Spring 에서 null을 확인하거나 문자 길이, 형식 등의 검증을 쉽게해주는 것이다.
프로젝트를 구현할때 직접 형식을 지정하지 않고 간단하게 사용할 수 있는 형식과 직접 지정해 사용하는 형식이 있다 바로 예시코드를 살펴보자.
Validation을 사용하기 위해 라이브러리를 추가해준다.
사용자의 데이터를 받기위해 사용하는 RequestDto를 위와 같이 구현한다,
여기서 @NotBlank 와 같은 어노테이션이 Validation을 사용한 모습이고 @NotBlank은 말그대로 데이터가 없으면 안된다는것을 의미한다.
이와같이 구현자가 따로 지정하지않아도 되는 기능이 있고 @Pattern과 같이 직접 형식을 지정해 사용하는 방식이 있다.
예시 코드에서 보이는것과 같이 @Pattern(regxp="") 에서 ""안에 표현식을 지정하면 된다.
""안에 들어갈 표현식은 JAVA정규 표현식을 사용하는 문법과 같다.
예시코드의 구현자가 직접 지정한 정규표현식의 의미는 이메일 형식으로 작성 하는데 @이가 들어가고 @앞부분은 영어 대문자,소문자,숫자와 ' _ '를 사용가능하고 @뒷부분은 대문자,소문자,숫자 가 가능하도록 지정한것이다.
다음으로 @NotBlank와 같이 이미 지정되어있는 어노테이션을 몇가지 살펴보자.
@Emaill
위의 예시코드에서 직접 작성하지 않아도 @Emaill 어노테이션을 사용하면 편하게 정규표현식을 지정할 수 있다.
@NotBlank
@NotBlank 는 위에서도 사용했지만 null 뿐만 아니라 ""," " 등 빈 값들도 불가능하다.
이러한 Validation을 지정하고 사용자가 데이터를 지정한 형식대로 입력하지 않을때 예외처리를 하는 방법을 살펴보자.
우선 Controller에서 요청값을 받을때 @Valid 어노테이션을 붙혀준다.
이 요청은 Validation을 적용한 값이다를 뜻하는것 같다.
또 BindingResult 형식의 인자도 함께 받아준다 BindingResult는 발생한 에러데이터를 담고있는 것같다.
위으 코드는 Service 코드로 사용자가 입력한 데이터를 데이터베이스와 비교하는 역할을 한다.
우리가 살펴볼 고드는 초록색을 표시된 부분의로 getFialdErrors() 를 이용해 리스트로 오류코드들을 받고 if문을 사용해 받은 에러가 있다면 리스트의 값이 증가할 것이고 리스트에 값이 들어있다면 에러가 발생했다는 소리다.
이와같은 방법으로 사용자가 데이터를 입력했을때 잘못입력했다면 다시 입력하도록 기능을 설정할 수 있다.
하지만 이와같이 기능을 구현한다면 사용자가 어떤 부분을 잘못 입력한지 모를것이다.
이때 앞서 말한 리스트에 오류코드들을 받는다는 점을 이용하면 된다 그 오류코드들은 사용자가 어느부분을 잘못 입력한지를 나타내주기 때문이다.
위와 같이 코드를 변경하면 어떤부븐을 잘못 적은지 알 수 있다.
향상된 for문을 사용해 BindingResult를 이용해 받은 데이터들을 위와같이 log로 출력해보면 다음과 같은 결과를 확인할 수 있다.
위의 결과는 서버쪽에서 확인한 데이터이지만 클라이언트에서 확인 하려면 반환할때 error값을 log 에서 본것과같이 보내준다면 가능할 것 같다.
Validation은 쉽지만 웹개발에있어서 사용자가 입력할 데이터를 지정할 수 있다는 점에서 알아두어야할 중요한 기능이라고 생각한다.