본문 바로가기
SPRING/SPRING 프로젝트

SPRING 팀 플젝 : @valid를 이용한 회원 가입 유효성

by 스노위13 2023. 1. 11.

1. 내용: 회원가입 화면, 1차에서는 기본 정보를 2차에서는 제품 추천을 위해 나이와 키, 몸무게, 체형 등을 입력 받는다. 입력 데이터의 유효성을 검사하기 위해 Validation을 적용하였다. 

2. 과정 중 특이점: @valid 어노테이션을 사용하여 값이 없거나 특정 조건에 맞지 않으면 다음 단계로 넘어갈 수 없도록 만들었다. 프론트엔드에서도 검증은 할 수 있지만 악의적인 사용자를 막기 위해서는 백엔드에서 검증을 하는 것이 더 확실하다. 거기다 VO나 DTO가 있다면 @vailid를 사용하면 편하게 검증할 수 있다!

3. 실제 화면 및 코드

1) VO : 내가 사용한 @valid는 아래와 같다. 

@NotBlank : null이 아니며 길이가 0보다 크면 통과 → 필수값에 적용
@Max(value=) : 설정한 값 이하면 통과 → 나이에 적용
@Min(value=) : 설정한 값 이상이면 통과 → 키, 몸무게, 나이에 적용
@Size(min=, max=) : 문자열 또는 배열이 설정값 사이일 경우 통과 가능 → 비밀번호, 사이트 내 별명에 사용
@Email : 이메일 형식에 맞을 경우만 통과 가능 → 이메일에 사용

그리고 아래 코드는 각각의 @valid가 적용된 예시이다. message를 입력하면 유효값을 통과하지 못했을 경우 사용자에게 안내할 내용을 쓸 수 있다. getter와 setter 등은 생략하였다. 

public class MemberVO {
	
	@NotBlank(message = "아이디 입력은 필수입니다.", groups = {Step1.class})
	private String memId;                             /* 아이디 */
	
	@NotBlank(message = "비밀번호 입력은 필수입니다.", groups = {Step1.class})
	@Size(min=4, message = "4글자 이상 입력하세요.", groups = {Step1.class})
	private String memPw;                             /* 비밀번호 */
	
	@NotBlank(message = "사이트 내 별명 입력은 필수입니다.", groups = {Step1.class})
	@Size(min=2, max=15, message = "2글자 이상 15글자 이하의 값을 입력하세요.", groups = {Step1.class})
	private String memNickname;                       /* 닉네임 */
	
	@NotBlank(message = "이름 입력은 필수입니다.", groups = {Step1.class})
	private String memName;                           /* 본명 */
	
	private String memAddNo;                          /* 우편번호 */
	@NotBlank(message = "주소 입력은 필수입니다.", groups = {Step1.class})
	private String memAddress1;                       /* 주소 */
	@NotBlank(message = "상세주소 입력은 필수입니다.", groups = {Step1.class})
	private String memAddress2;                       /* 상세주소 */
	
	@NotBlank(message = "전화번호 입력은 필수입니다.", groups = {Step1.class})
	private String memPh;                             /* 전화번호 */
	
	@NotBlank(message = "이메일 입력은 필수입니다.", groups = {Step1.class})
	@Email(message = "이메일 형식이 아닙니다.", groups = {Step1.class})
	private String memEmail;                          /* 이메일 */
	
	@Min(value = 14, message = "14세 이상부터 가입이 가능합니다.", groups = {Step2.class})
	@Max(value = 100, message = "100세 이상은 가입이 불가능합니다.", groups = {Step2.class})
	private int memAge;                               /* 나이 */
	
	@Min(value = 150, message = "150 이상으로 입력해주세요.", groups = {Step2.class})
	private int memHeight;                            /* 키 */
	
	@Min(value = 30, message = "30 이상으로 입력해주세요.", groups = {Step2.class})
	private int memWeight;                            /* 몸무게 */
	
	private int memBody;                              /* 삼각형(1)/역삼각형(2)/사각형(3)/타원형(4) */
    
    }

2) 화면 및 JSP

아이디와 이메일의 중복확인을 누르지 않으면 다음 단계로 넘어가지 않는다.
그리고 form:form 태그를 사용해서 위에서 설정한 @valid의 조건에 부합하지 않으면 위의 사진과 같이 input의 아래에 안내가 뜨도록 만들었다. valid를 설정했으므로 jsp에서는 매우 짧은 코드로 가능하다.

맨 위에 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> 를 쓰고
<form:form modelAttribute="member" action="step2.wow" method="post"> </form:form>안에 

<form:input path="memId" /><br>
<form:errors path="memId"/>   

이렇게만 넣으주면 위의 사진처럼 에러가 났을 때 바로 message를 띄워주는 것!

form:form 전체 코드는 아래의 더보기를 누르면 확인하실 수 있으니 참고해주시길

더보기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>   
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입 1단계</title>
</head>
<body>
<div class="container">
	<h3>회원 가입 1단계</h3>
	
<div class="joininfo">
<form:form modelAttribute="member" action="step2.wow" method="post">
<table>
	<colgroup>
		<col width="25%" />
		<col />
		<col width="20%" />
	</colgroup>
	<tr>
		<th>아이디</th>
		<td>
			<form:input path="memId" /><br>
			<form:errors path="memId"/>				     
		</td>
		<td>
		<button type = "button" id="idDuplCheck" class="btn btn-primary btn-sm">중복확인</button>
		</td>
	</tr>
	<tr>
		<th>비밀번호</th>
		<td>
			<form:password path="memPw" /><br>
			<form:errors path="memPw"/>		
		</td>
	</tr>	
	<tr>
		<th>별명</th>
		<td>
			<form:input path="memNickname" placeholder="2글자 이상 작성해주세요." value="${naverLogin.user.nickname}"/><br>
			<form:errors path="memNickname"/>	
		</td>
	</tr>
	<tr>
		<th>이름</th>
		<td>
			<form:input path="memName" /><br>
			<form:errors path="memName"/>	
		</td>
	</tr>	
	<tr>		
		<th>우편번호</th>
		<td>
			<input type="text" name="memAddNo" id="memAddNo" class="postcodify_postcode5" />
		</td>
		<td>
			<button type="button" class="btn btn-primary btn-sm" id="postcodify_search_button">검색</button>
		</td>
	</tr>
	<tr>
		<th>도로명 주소</th>
		<td>
			<form:input path="memAddress1" id="memAddress1" class="postcodify_address" /><br>
			<form:errors path="memAddress1"/>		
		</td>
	</tr>
	<tr>
		<th>상세주소</th>
		<td>
			<form:input path="memAddress2" /><br>
			<form:errors path="memAddress2"/>		
		</td>
	</tr>	
	<tr>
		<th>휴대전화</th>
		<td>
			<form:input path="memPh" id="telInput" maxlength="13" placeholder="예) 010-1234-5678" /><br>
			<form:errors path="memPh"/>		
		</td>
	</tr>	
	<tr>
		<th>이메일</th>
		<td>
			<form:input path="memEmail"/><br>
			<form:errors path="memEmail"/>
		</td>
		<td>
		<button type = "button" id="emailDuplCheck" class="btn btn-primary btn-sm">중복확인</button>
		</td>
	</tr>		
	<tr>
		<th></th>
		<td></td>
		<td>
		<div class="pull-right">
				<a href="cancel" class="btn btn-primary btn-sm" >
					취 소
				</a>	
				<button type="submit" class="btn btn-primary btn-sm" >
					다 음 
				</button>
			</div>
		</td>
	</tr>	
</table>
</form:form>
</div>
</div>
</body>
</html>

 


회원가입 2단계도 이와 같다. validation에 대해 더 자세한 내용이 궁금하시면 아래 블로그를 참고해주시길!

validation 설정 참고 : https://brilliantdevelop.tistory.com/95
validaiton 종류 참고 : https://wedul.site/448  

댓글