Learning/JAVA

회원가입 축하 + 비밀번호 변경 이메일 보내기 (Naver mail)

monique 2022. 7. 26. 11:39

sql

create table member(
member_uuid VARCHAR(100) not null,
member_id VARCHAR(100),
member_pw VARCHAR(200),
member_grant int(1),
member_last_login	DATETIME,
member_inuse	int(1),
member_regi_date	DATETIME,
member_edit_date	DATETIME,
primary key (member_uuid)
);

alter table member add member_email VARCHAR(200) after member_pw;
더보기

* 로직 : 아이디와 이메일 일치 확인후 임시비밀번호로 DB값 변경후 변경된 임시비밀번호 이메일로 전송 

Member.VO

package egovframework.sample.vo;


import java.util.Date;

import lombok.Data;

@Data
public class Member {
	private String memberUuid;
	private String memberId;
	private String memberPw;
	private String memberEmail;
	private int memberGrant; 
	private Date memberLastLogin;
	private int memberInuse ; 
	private Date memberRegiDate;
	private Date memberEditDate;

	
	public Member() {}


	public Member(String memberUuid, String memberId, String memberPw, String memberEmail, int memberGrant, Date memberLastLogin,
			int memberInuse, Date memberRegiDate, Date memberEditDate) {
		super();
		this.memberUuid = memberUuid;
		this.memberId = memberId;
		this.memberPw = memberPw;
		this.memberEmail = memberEmail;
		this.memberGrant = memberGrant;
		this.memberLastLogin = memberLastLogin;
		this.memberInuse = memberInuse;
		this.memberRegiDate = memberRegiDate;
		this.memberEditDate = memberEditDate;
	}


	public Member(String memberUuid, String memberId, String memberEmail, String memberPw, Date memberEditDate) {
		super();
		this.memberUuid = memberUuid;
		this.memberId = memberId;
		this.memberEmail = memberEmail;
		this.memberPw = memberPw;
		this.memberEditDate = memberEditDate;
	}


	public Member(String memberUuid, int memberInuse, Date memberEditDate) {
		super();
		this.memberUuid = memberUuid;
		this.memberInuse = memberInuse;
		this.memberEditDate = memberEditDate;
	}


	public Member(String memberId, String memberPw, Date memberEditDate) {
		this.memberId = memberId;
		this.memberPw = memberPw;
		this.memberEditDate = memberEditDate;
	}



	

}

MemberService

package egovframework.sample.service;

import java.util.List;

import egovframework.sample.vo.Criteria;
import egovframework.sample.vo.Mail;
import egovframework.sample.vo.Member;

public interface MemberService {

	void memberSave(Member member);
	
	Member selectById(String memberId);
	
	Member selectByUuid(String memberUuid);
	
	void lastLoginUpdate(String memberUuid);
	
	List<Member> memberList(Criteria cri);
	
	void updateMember(Member member);
	
	void delMember(Member member);
	
	int idCheck(String memberId);
	
	int emailCheck(Member member);
	
	int selectCount();
	
	String pwGenerate(Member member);
	
	int emailDupl(String memberEmail);
	
	
	
	
}

GeneratePw (임시비밀번호코드 생성)

package egovframework.sample.service;

import java.util.Random;

import org.springframework.stereotype.Service;

@Service("GeneratePw")
public class GeneratePw{
    private int pwdLength = 8;
    private final char[] passwordTable =  { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
            'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
            'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
            'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
            'w', 'x', 'y', 'z', '!', '@', '#', '$', '%', '^', '&', '*',
            '(', ')', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };

    public String excuteGenerate() {
        Random random = new Random(System.currentTimeMillis());
        int tablelength = passwordTable.length;
        StringBuffer buf = new StringBuffer();

        for(int i = 0; i < pwdLength; i++) {
            buf.append(passwordTable[random.nextInt(tablelength)]);
        }

        return buf.toString();
    }

    public int getPwdLength() {
        return pwdLength;
    }

    public void setPwdLength(int pwdLength) {
        this.pwdLength = pwdLength;
    }

}

MemberServiceImpl

package egovframework.sample.service.impl;


import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import egovframework.com.cmm.service.impl.CommonDAO;
import egovframework.sample.service.GeneratePw;
import egovframework.sample.service.MemberService;
import egovframework.sample.service.Sha256;
import egovframework.sample.vo.Criteria;
import egovframework.sample.vo.Member;


@Service("MemberService")
public class MemberServiceImpl implements MemberService {

	
	@Resource(name = "CommonDAO")
	private CommonDAO commonDAO;
	
	@Resource(name = "GeneratePw")
	private GeneratePw generatePw; //패스워드 자동 생성 서비스
	

	@Override
	public void memberSave(Member member) {
		
		System.out.println(member+"받아오는지 테스트");
		
		Member newMember = new Member(null, member.getMemberId(), Sha256.encrypt(member.getMemberPw()), member.getMemberEmail(), member.getMemberGrant(), null, 1, null, null);
		
		commonDAO.insert("Member.saveMember", newMember); 
		
		System.out.println(newMember+"실행완료 테스트");
	}

	@Override
	public Member selectById(String memberId) {
		Member loginCheck =  commonDAO.selectOne("Member.selectById", memberId);
		return loginCheck;
	}

	@Override
	public void lastLoginUpdate(String memberUuid) {
		commonDAO.update("Member.lastLogin", memberUuid);
		
	}

	@Override
	public List<Member> memberList(Criteria cri) {
		List<Member> member =  commonDAO.selectList("Member.selectMember", cri);
		return member;
	}


	@Override
	public Member selectByUuid(String memberUuid) {
		Member mem =  commonDAO.selectOne("Member.selectByUuid", memberUuid);
		return mem;

	}

	@Override
	public void updateMember(Member member) {
		
		Member mem = new Member(member.getMemberUuid(), member.getMemberId(), member.getMemberEmail(), Sha256.encrypt(member.getMemberPw()), null);
		
		commonDAO.update("Member.updateMember", mem); 
		
	}

	@Override
	public void delMember(Member member) {
		
		Member mem = new Member(member.getMemberUuid(), 0, null); //inuse 상태 0:탈퇴
		
		commonDAO.update("Member.deleteMember", mem); 
	}

	
	@Override
	public int idCheck(String memberId) {
		int cnt = commonDAO.selectOne("Member.idCheck", memberId);
		return cnt;
	}

	@Override
	public int selectCount() {
		return commonDAO.selectOne("Member.selectCount");
		
	}

	@Override
	public int emailCheck(Member member) {
		int cnt = commonDAO.selectOne("Member.emailCheck", member);
		return cnt;
	}
	
	@Override
	public int emailDupl(String memberEmail) {
		int cnt = commonDAO.selectOne("Member.emailDupl", memberEmail);
		return cnt;
	}

	@Override
	public String pwGenerate(Member member) {
		
		String temp = generatePw.excuteGenerate(); //비밀번호 생성
		
		Member mem = new Member(member.getMemberId(), Sha256.encrypt(temp), null); //pw, date
		
		commonDAO.update("Member.findPw", mem); 
		
		return temp;
	}

	@Override
	public Member selectByEmail(String memberEmail) {
		Member emailCheck =  commonDAO.selectOne("Member.selectByEmail", memberEmail);
		return emailCheck;
	}




	
}

MailService

package egovframework.sample.service;

import java.util.Properties;

import javax.annotation.Resource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.springframework.stereotype.Service;

@Service("MailService")
public class MailService{
	
	/** 메일 HOST **/
	private static final String HOST = "smtp.naver.com";
	/** 메일 PORT **/
	private static final String PORT = "587";
	/** 메일 ID **/
	private static final String MAIL_ID = "naverid@naver.com";
	/** 메일 PW **/
	private static final String MAIL_PW = "naverpassword";
	
	public static void sendNotiMail(String subejct, String address, String body) {
		try {

			InternetAddress add = new InternetAddress(address);
			
			System.out.println("이메일 주소"+body);
			
			// SMTP 발송 Properties 설정
			Properties props = new Properties();
			props.put("mail.transport.protocol", "smtp");
			props.put("mail.smtp.host", MailService.HOST);
			props.put("mail.smtp.port", MailService.PORT);
			props.put("mail.smtp.starttls.enable", "true");
			props.put("mail.smtp.ssl.trust", MailService.HOST);
			props.put("mail.smtp.auth", "true");
			
			// SMTP Session 생성
			Session mailSession = Session.getDefaultInstance(props, new javax.mail.Authenticator(){
				protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
					return new javax.mail.PasswordAuthentication(MailService.MAIL_ID, MailService.MAIL_PW);
				}
			});
			
			// Mail 조립
			Message mimeMessage = new MimeMessage(mailSession);
			mimeMessage.setFrom(new InternetAddress(MailService.MAIL_ID));
			mimeMessage.setRecipient(Message.RecipientType.TO, add);
            		// 메일 제목
			mimeMessage.setSubject(subejct);
            		// 메일 본문 (.setText를 사용하면 단순 텍스트 전달 가능)
			mimeMessage.setContent(body, "text/html; charset=UTF-8");
			
			// Mail 발송
			Transport.send(mimeMessage);
			
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

}

Mailsender Contoller

package egovframework.sample.web;


import javax.mail.MessagingException;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import egovframework.sample.service.MailService;
import egovframework.sample.service.MemberService;
import egovframework.sample.vo.Member;
import lombok.AllArgsConstructor;

@Controller
@AllArgsConstructor
public class MailSenderController {

	private final MemberService memberService;
	private final MailService mailService; 		

	@PostMapping("/findPw") // 패스워드 변경 실행(이메일 보내기)
	public String sendEmail(Member member) throws MessagingException {

		String temp = memberService.pwGenerate(member); //아이디와 이메일 정보 넘겨받아 비밀번호 생성
		
		Member mem = memberService.selectById(member.getMemberId());
		
		String memberAddress = mem.getMemberEmail();
		
		
		StringBuffer stringBuffer = new StringBuffer();
		
		stringBuffer.append("회원님의 임시 비밀번호는 "+ temp +"입니다. \n 로그인 후 꼭 비밀번호를 바꿔주세요."); // 엔터 수정하기
		
		String body = stringBuffer.toString();

		mailService.sendNotiMail("[안내] 임시 비밀번호 발급", memberAddress, body);
   
		
		return "sample/sendOk";

	    }

	
}

MemberController

package egovframework.sample.web;

import java.util.List;


import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import egovframework.sample.service.MemberService;
import egovframework.sample.vo.Criteria;
import egovframework.sample.vo.Member;
import egovframework.sample.vo.PageMaker;
import lombok.AllArgsConstructor;


@Controller
@AllArgsConstructor
public class MemberController {
	

	private final MemberService memberService;
	
	
	@GetMapping("/findPw") //비밀번호 찾기
    public String findPw(Model model, Member member) { 
		
		return "sample/findPw";
	}
	
	@GetMapping("/signin") //회원가입 페이지 이동
    public String signin(Model model, Member member) { 
	
	return "sample/signin";
    }
	
	@GetMapping("/login") //회원가입 페이지 이동
    public String login(Model model, Member member) { 
	
	return "sample/login";
    }
	
	@GetMapping("/loginOk") //일반회원 로그인 성공 페이지
    public String loginOk(Model model, Member member) { 
	
	return "sample/loginOk";
    }
	
	@GetMapping("/logout") //로그아웃
    public String logout(Model model, Member member, HttpSession session) { 
		 session.invalidate();

	return "sample/login";
    }
	
	@GetMapping("/adminOk") //관리자 로그인 성공 페이지
    public String admin(Model model, Member member) { 
	
	return "sample/adminOk";
    }
	
	@GetMapping("/accessFail") //접근제한 페이지
    public String accessFail(Model model, Member member) { 
	
	return "sample/accessFail";
    }
	
	@GetMapping("/memberList") //회원목록
    public String memberList(Model model, Member member, Criteria cri) { 	
		
		
		List<Member> mem = memberService.memberList(cri); //criteria로 페이지 수 세서 보드 조회
		model.addAttribute("member", mem);
		
		PageMaker pm = new PageMaker();
		pm.setCri(cri);
		pm.setTotalCount(memberService.selectCount());
		model.addAttribute("pm", pm);

	
	return "sample/memberList";
    }
	
	
	@GetMapping("/member/edit/{memberUuid}")
	public String editMember(@PathVariable("memberUuid") String memberUuid, Model model, Member member) {
		
		Member mem = memberService.selectByUuid(memberUuid);
		
		model.addAttribute("member", mem);
	
	return "sample/memberEdit";
    }

	

}

MemberRestController (생성자 주입방식으로 변경)

package egovframework.sample.web;

import java.io.IOException;
import java.util.regex.Pattern;

import javax.servlet.http.HttpSession;

import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import egovframework.sample.service.MailService;
import egovframework.sample.service.MemberService;
import egovframework.sample.service.ResponseService;
import egovframework.sample.service.Sha256;
import egovframework.sample.vo.ErrorCode;
import egovframework.sample.vo.Member;
import egovframework.sample.vo.SingleResult;
import lombok.AllArgsConstructor;


@RestController
@AllArgsConstructor
public class MemberRestController {
		
	private final MemberService memberService;
	private final ResponseService responseService;
	private final MailService mailService;
	

	@PostMapping("/signin") //회원가입실행 +이메일 존재여부 추가할것 
    public SingleResult<?> signin(@RequestBody Member member) throws IOException { 
		
		 String regex = "^[a-zA-Z]{1}[a-zA-Z0-9_]{4,11}$"; //아이디 정규식
		 String pw_regex = "^.*(?=^.{8,16}$)(?=.*\\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$"; //패스워드 정규식 8~16자 이내
		 String email_regex = "^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$"; //이메일 형식
		 
		try {			
			 if(member.getMemberId()==null || member.getMemberId().equals("") || member.getMemberPw()==null|| member.getMemberPw().equals("") || 
					 member.getMemberEmail()==null || member.getMemberEmail().equals("")) { // 받아온값이 null - 아이디, 패스워드 따로하면 유추가능하니까 안됨.
				 
					return responseService.getFailResult(ErrorCode.NULL_EXCEPTION);
					
			}else if(member.getMemberGrant()!=0 && member.getMemberGrant()!=1) { //&& 주의할것, 0도 아니고 1도 아닐때
				
					return responseService.getFailResult(ErrorCode.TYPE_NOT_SELECTED);
			
			}else if(!Pattern.matches(pw_regex, member.getMemberPw())) {//비밀번호가 정규식에 부합하는지
				 
					return responseService.getFailResult(ErrorCode.PW_NOT_FOLLOW_REGEX);
		 
			}else if(!Pattern.matches(email_regex, member.getMemberEmail())) { //이메일이 정규식에 부합하는지
			 
			 		return responseService.getFailResult(ErrorCode.EMAIL_NOT_FOLLOW_REGEX);		
		
			}else if(!Pattern.matches(regex, member.getMemberId())) {//아이디가 정규식에 부합하는지
				
					return responseService.getFailResult(ErrorCode.ID_NOT_FOLLOW_REGEX);
			
			}else {
				
				Member mem = memberService.selectById(member.getMemberId()); //멤버 존재여부 Member mem = null;
				//Member memByEmail = memberService.selectByEmail(member.getMemberEmail()); 

				
				if(mem==null) {//새로 회원가입

					memberService.memberSave(member); //회원가입진행
					mailService.sendNotiMail("[안내] 회원가입을 축하합니다!", member.getMemberEmail(), "오늘부터 당신은 OOO의 회원입니다. 많은 이용 바랍니다.");
			
					return responseService.getSingleResult(member);	
					
				}else if(mem.getMemberId().equals(member.getMemberId()) && mem.getMemberInuse()==1) { //아이디 이미 존재 & 사용하는중이면
					
					return responseService.getFailResult(ErrorCode.ID_DUPLICATION);
				
				}else if(mem.getMemberEmail().equals(member.getMemberEmail()) && mem.getMemberInuse()==1) { //이메일 이미 존재 & 사용하는중이면
					
					return responseService.getFailResult(ErrorCode.EMAIL_DUPLICATION);
				}
				
			}
			 
		}catch (Exception e) {
			e.printStackTrace();
		}
		
		return responseService.getSingleResult(member);	
	}
	
	@PostMapping("/login") //로그인 실행
    public SingleResult<?> login(@RequestBody Member member, HttpSession session) throws IOException { 
		
		try {		
			
			String memberId = member.getMemberId();
			String memberPw = member.getMemberPw();//폼에서 가져온 아이디
			String encodingPw = Sha256.encrypt(memberPw); //폼에서 가져온 아이디 encoding
			int memberType=0; //0:로그인안됨 1:일반회원 2:관리자
			
			if(memberId ==null || memberId.equals("")) { // 받아온값이 null - 아이디, 패스워드 따로하면 유추가능하니까 안됨.
					
					return responseService.getFailResult(ErrorCode.NULL_EXCEPTION);
			 	
			}else if(memberPw ==null|| memberPw.equals("")) { // 받아온값이 null - 아이디, 패스워드 따로하면 유추가능하니까 안됨.
				
					return responseService.getFailResult(ErrorCode.NULL_EXCEPTION);
			}
			
			
			Member check = memberService.selectById(member.getMemberId()); //아이디로 db에서 찾은정보
	
			if(check!=null) { //아이디는 있을때
		
					 if(memberId.equals(check.getMemberId()) && encodingPw.equals(check.getMemberPw()) ){ //사용자가 입력한 pw 가db와 일치하는지 
			                System.out.print("로그인 정보가 일치합니다");
			                memberType=1;
			                
			                
			                if(memberId.equals("admin")) {
			                	
			                	memberType=2;
			                	System.out.print("#############관리자 로그인");
			                	
			                	//로그인 성공시 마지막 로그인 날짜 수정
				                memberService.lastLoginUpdate(check.getMemberUuid());
			                }
			                
			                
			                //로그인 성공시 마지막 로그인 날짜 수정
			                memberService.lastLoginUpdate(check.getMemberUuid());
			                
			                //세션에 저장
			                session.setAttribute("memberInfo", member); 
		
			            } else if(!memberId.equals(check.getMemberId()) || !encodingPw.equals(check.getMemberPw()) ) {
			                System.out.print("아이디와 패스워드가 일치하지 않습니다.");   
			                memberType=3;
			            }
	
			}else if(check==null){
				  System.out.print("회원정보 존재하지않음");
		            memberType=0;
			}   
				  
			return responseService.getSingleResult(memberType);
			
		} catch (NullPointerException e){
			e.printStackTrace();
			
		} catch (Exception e) {
			e.printStackTrace();	
		}
		return null;////////////////////여기 이렇게 써도되는지?
		
		}
	
	
	@PostMapping("/member/del") 
    public SingleResult<?> deleteMember(Member member, @RequestBody String uuid) throws IOException { 


		Member mem = memberService.selectByUuid(uuid);
				
		memberService.delMember(mem); //inuse 번호만 바꿈.
				
		return responseService.getSingleResult(mem);
	}
		
	
	@PostMapping("/idCheck") // 중복 아이디 체크
    public SingleResult<?> idCheck(@RequestBody String memberId) throws IOException { 
		
		int check= memberService.idCheck(memberId);		
      
		return responseService.getSingleResult(check);
	}
	
	@PostMapping("/emailDupl") // 중복 이메일 체크
    public SingleResult<?> emailDupl(@RequestBody String memberEmail) throws IOException { 
		
		int check= memberService.emailDupl(memberEmail);
      
		return responseService.getSingleResult(check);
	}
	
	@PostMapping("/emailCheck") // 아이디, 이메일 일치 체크
    public SingleResult<?> emailCheck(@RequestBody Member member) throws IOException { 
				
		int check= memberService.emailCheck(member);
		
		return responseService.getSingleResult(check);
	}
	
	@PostMapping("/member/editMember") // 수정된 정보 받아오기
	public SingleResult<?> editMemberPost(Model model, @RequestBody Member member) throws IOException {
		
		 String pw_regex = "^.*(?=^.{8,16}$)(?=.*\\d)(?=.*[a-zA-Z])(?=.*[!@#$%^&+=]).*$"; //패스워드 정규식 8~16자 이내
		 String email_regex = "^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$"; //이메일 형식
		 
		try {			
			
			Member mem = memberService.selectById(member.getMemberId()); //수정하는 아이디로 정보 가져오기
			
			
			 if(member.getMemberId()==null || member.getMemberId().equals("") || member.getMemberPw()==null|| member.getMemberPw().equals("") || 
					 member.getMemberEmail()==null || member.getMemberEmail().equals("")) { // 받아온값이 null - 아이디, 패스워드 따로하면 유추가능하니까 안됨.
				 
					return responseService.getFailResult(ErrorCode.NULL_EXCEPTION);
			
			}else if(!Pattern.matches(pw_regex, member.getMemberPw())) {//비밀번호가 정규식에 부합하는지
				 
					return responseService.getFailResult(ErrorCode.PW_NOT_FOLLOW_REGEX);
		 
			}else if(!Pattern.matches(email_regex, member.getMemberEmail())) { //이메일이 정규식에 부합하는지
			 
			 		return responseService.getFailResult(ErrorCode.EMAIL_NOT_FOLLOW_REGEX);		
			
			}else {
				
				//중복테스트 : inuse가 1인것만 가져옴
				int checkDupl = memberService.emailDupl(member.getMemberEmail()); //0: 새로운이메일 , 1:존재이메일, 2:다중
				int checkId = memberService.emailCheck(member); // 0:아이디 이메일 불일치, 1:일치
				
				if(checkId==1) {
					System.out.println("사용가능한 이메일(기존메일)");
					memberService.updateMember(member);
					return responseService.getSingleResult(member);
					
				}else if(checkId==0) {
					
					if(checkDupl>1) {
						System.out.println("이미 db에 두개 있는경우");
						return responseService.getFailResult(ErrorCode.EMAIL_DUPLICATION);
						
					}else if(checkDupl==1) {
						System.out.println("다른 아이디 + 중복이메일 db에 1개 있는 경우");
						return responseService.getFailResult(ErrorCode.EMAIL_DUPLICATION);
						
					}else if(checkDupl==0) {
						System.out.println("사용가능한 이메일");
						memberService.updateMember(member);
						return responseService.getSingleResult(member);
					
					}

				}
			}
			

		} catch (NullPointerException e){
			e.printStackTrace();
			
		} catch (Exception e) {
			e.printStackTrace();	
		}
		
		return responseService.getSingleResult(member);
	    }

	
}

Mapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mapper namespace="Member">
	
	<insert id="saveMember" parameterType="egovframework.sample.vo.Member">
	<selectKey resultType="String" keyProperty="memberUuid" order="BEFORE">
	select FN_GET_UUID('M') as memberUuid
	</selectKey>
	
	INSERT INTO member
	VALUES(#{memberUuid},#{memberId},#{memberPw},#{memberEmail},#{memberGrant},NOW(),#{memberInuse},NOW(),NOW())
	</insert>

	
	 <select id="idCheck" resultType="int"><!-- 아이디 중복 체크 -->
	SELECT  count(member_id)
	FROM 	member
	WHERE	member_id=#{member_id} and member_inuse=1
	</select>
	
	<select id="emailCheck" resultType="int"><!-- 아이디 이메일 일치 체크 -->
	SELECT  count(member_id)
	FROM 	member
	WHERE	member_id=#{memberId} and member_email=#{memberEmail} 
	</select>
	
	<select id="emailDupl" resultType="int"><!-- 이메일 중복 체크 -->
	SELECT  count(member_email)
	FROM 	member
	WHERE	member_email=#{memberEmail} and member_inuse=1
	</select>
	
	 <select id="selectById" resultType="egovframework.sample.vo.Member">
	SELECT
			member_uuid, member_id, member_pw, member_grant, member_last_login, member_inuse, member_regi_date, member_edit_date, member_email
	FROM 	member
	WHERE	member_id=#{member_id} and member_inuse=1
	</select>
	
	 <select id="selectByEmail" resultType="egovframework.sample.vo.Member">
	SELECT
			member_uuid, member_id, member_pw, member_grant, member_last_login, member_inuse, member_regi_date, member_edit_date, member_email
	FROM 	member
	WHERE	member_email=#{memberEmail} and member_inuse=1
	</select>
	
	 <select id="selectByUuid" resultType="egovframework.sample.vo.Member">
	SELECT
			member_uuid, member_id, member_pw, member_grant, member_last_login, member_inuse, member_regi_date, member_edit_date, member_email
	FROM 	member
	WHERE	member_uuid=#{memberUuid}
	</select>
	
	
	<select id="selectMember" resultType="egovframework.sample.vo.Member">
	SELECT *
	FROM 	member
	WHERE	member_inuse=1
	ORDER BY member_regi_date desc
	limit #{pageStart},#{pageSize}
	</select>
	
	<update id="lastLogin" parameterType="egovframework.sample.vo.Member">
	UPDATE member 
	SET member_last_login=NOW(), member_edit_date=NOW()
	WHERE member_uuid=#{memberUuid}
	</update>
	
	<update id="updateMember" parameterType="egovframework.sample.vo.Member">
	UPDATE member 
	SET member_id=#{memberId}, member_email=#{memberEmail}, member_pw=#{memberPw}, member_edit_date=NOW()
	WHERE member_uuid=#{memberUuid}
	</update>
	
	<update id="deleteMember" parameterType="egovframework.sample.vo.Member">
	UPDATE member 
	SET member_edit_date=NOW(),  member_inuse=#{memberInuse}
	WHERE member_uuid=#{memberUuid}
	</update>
	
	<select id="selectCount" resultType="int">
	SELECT count(*) FROM member
	WHERE member_inuse=1
	</select> 
	
	<update id="findPw" parameterType="egovframework.sample.vo.Member"><!-- 아이디로 임시비밀번호 변경 -->
	UPDATE member 
	SET member_pw=#{memberPw}, member_edit_date=NOW()
	WHERE member_id=#{memberId}
	</update>


	


</mapper>

Signin.jsp (이메일 추가)

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c"      uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form"   uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="ui"     uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
   <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
   <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

	<link rel="preconnect" href="https://fonts.googleapis.com">
	<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
	<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR&display=swap" rel="stylesheet">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">

<title>회원가입</title>

<style>
	body{font-family: 'Noto Sans KR', sans-serif;}
	h2{text-align: left;}

	a:link {color: black;}
    a:visited {color: black;}
    a:hover {color: black; text-decoration: none;}
    a:active {color: black;}
    
</style>
</head>

<body>
<br><br>
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-4">
        
        	<div class="justify-content-center" style="text-align: center">
           		<h2>회원가입</h2><br>
            	<div class="container-sm" id="tb">  
	
					<form:form name="memberForm" id="memberForm">
						<table class="table table-bordered">
						
							<tr><td>아이디</td><td><input type="text" style="width:200px;" id="memberId"  name="memberId" oninput="idcheck()"/>
							<div id="idcheck"></div>
							</td></tr>
							<tr><td>이메일</td><td><input type="text" style="width:200px;" id="memberEmail"  name="memberEmail" oninput="emailCheck()"/>
							<div id="msg"></div></td></tr>
							<tr><td>비밀번호</td><td><input type="password"  style="width:200px;" id="memberPw"  name="memberPw" onkeyup="enterkey()"/></td></tr>
							<tr><td>회원타입</td><td><input type="radio" name="memberGrant" value="0"/>관리자
							<input type="radio" name="memberGrant" value="1"/>일반회원</td></tr>
							<tr><td colspan="2">
							<input type="button" value="회원가입"  onclick="validation()"></td></tr>
						
						</table>			
								
					
						
					</form:form>
				</div>
					<div id="msg"></div>
			</div>
		</div>
					
	</div>

</div>



<script>

	function validation() { //이메일 정규식 추가
	
	    var idcheck = document.forms["memberForm"]["memberId"].value;
	    var pwcheck = document.forms["memberForm"]["memberPw"].value;
	    var emailcheck = document.forms["memberForm"]["memberEmail"].value;
	    var memberGrant = document.forms["memberForm"]["memberGrant"].value;
	    
	    
	    var regExp = /^[A-Za-z]{1}[A-Za-z0-9_-]{3,11}$/; //아이디 정규식
	    var pwExp = /^(?=.*[a-zA-Z])((?=.*\d)(?=.*\W)).{8,16}$/; //비밀번호 정규식
	    var emailregExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i; //이메일 정규식
	    
	    
	    var tb = document.getElementById('tb');
	    var msg = document.getElementById('msg');
		
	
	    if (idcheck == null || idcheck == "") {
	       
	       msg.innerHTML = "아이디가 입력되지 않았습니다.";
	       tb.append(msg);

	        return false;
	
	    } else if (pwcheck == null || pwcheck == "") {
	    	
	       msg.innerHTML = "비밀번호가 입력되지 않았습니다";
	       tb.append(msg);

	        return false;
	        
	    } else if (memberGrant == null || memberGrant == "") {
	    	
	    	msg.innerHTML = "회원타입을 선택해 주세요";
	        tb.append(msg);

	        return false;
	
	    } else if(!regExp.test(idcheck)) {
	    	
            alert('아이디 첫글자는 영문이어야하며 4~12자의 영문 대소문자와 숫자,하이픈,언더바 사용가능')
            return false;
            
	    } else if(!pwExp.test(pwcheck)) {
	    	
            alert('비밀번호는 영문/숫자/특수문자(!@#$%^&*)를 포함하여 8~16자로 입력해야합니다.')
            return false;
            
		} else if(!emailregExp.test(emailcheck)) {
	    	
            alert('이메일 형식이 맞지 않습니다.')
            return false;
		
	    } else{
	    	
			$.ajax({
		        url: "/emailDupl",
		        type: "POST",
		        data: JSON.stringify(emailcheck),
		        dataType: "JSON",
		        contentType: "application/json",
		        accept: "application/json",
		        success: function(result) {          
		              	 
			     if(result.data ==1){
			    	 alert("이메일 중복입니다. 다른 이메일을 입력해주세요.");
		       		 
		       	 }else if(result.data ==0){ //이메일 통과
		       		 
		       		$.ajax({
		    	        url: "/idCheck",
		    	        type: "POST",
		    	        data: JSON.stringify(idcheck),
		    	        dataType: "JSON",
		    	        contentType: "application/json",
		    	        accept: "application/json",
		    	        success: function(result) {          
		    	       	 
		     	       	 if(result.data ==1){// 아이디 중복
		     	       	 	alert("아이디 중복입니다. 다른 아이디를 입력해주세요.");
		    	       		
		    	       	 }else if(result.data ==0){
		    	       		signin();//******모두 통과하면 실행
		    	       	 } 

		    	       	 
		    	        },
		    	        error: function(result) {

		    	            console.log(result.responseText); //responseText의 에러메세지 확인
		    	        }
		    	    });
		       		 
     	 
		        }
			     
		        },
		        error: function(result) {

		            console.log(result.responseText); //responseText의 에러메세지 확인
		        }
		    });
	    	
	    		    
	
	    }
	}

	function enterkey() {
		if (window.event.keyCode == 13) {
			
			validation();
			
		}
	}

	function idcheck(){ //아이디 입력시
		
		var memberId = document.forms["memberForm"]["memberId"].value;
					   
	
		$.ajax({
	        url: "/idCheck",
	        type: "POST",
	        data: JSON.stringify(memberId),
	        dataType: "JSON",
	        contentType: "application/json",
	        accept: "application/json",
	        success: function(result) {          
	       	 console.log(result.data);
	       	 console.log(result);
	       	 
 	       	 if(result.data ==1){// 아이디 중복
	       		document.getElementById("idcheck").innerHTML = "<span style='color: red;'>아이디 중복</span>";
	       	 
	       		 
	       	 }else if(result.data ==0){
	       		document.getElementById("idcheck").innerHTML = "<span style='color: green;'>사용가능한 아이디</span>";
	       	 } 

	       	 
	        },
	        error: function(result) {

	            console.log(result.responseText); //responseText의 에러메세지 확인
	        }
	    });
}
	
	function emailCheck(){
		
		var memberEmail = document.forms["memberForm"]["memberEmail"].value;
					   

		$.ajax({
	        url: "/emailDupl",
	        type: "POST",
	        data: JSON.stringify(memberEmail),
	        dataType: "JSON",
	        contentType: "application/json",
	        accept: "application/json",
	        success: function(result) {          
	              	 
		     if(result.data ==1){
		    	 document.getElementById("msg").innerHTML = "<span style='color: red;'>이메일 중복</span>";
	       		 
	       	 }else if(result.data ==0){
	       		document.getElementById("msg").innerHTML = "<span style='color: green;'>사용가능한 이메일</span>";
	       		
	       	 }else if(memberId==null|| memberId==''){
	       		document.getElementById("msg").innerHTML = "<span style='color: green;'>이메일을 입력해주세요</span>";
	       	 }
	       	 
	        },
	        error: function(result) {

	            console.log(result.responseText); //responseText의 에러메세지 확인
	        }
	    });
	}


	
	function signin(){
		
		let memberId = document.forms["memberForm"]["memberId"].value;
		let memberPw = document.forms["memberForm"]["memberPw"].value;
		let memberEmail = document.forms["memberForm"]["memberEmail"].value;
		
		//라디오 버튼 값 가져오기
		let checked = document.getElementsByName('memberGrant');
		let radiocheck = Array.from(checked).find(radio => radio.checked);
		let memberGrant = radiocheck.value;
		 
		
		var data = {
			'memberId' : memberId,
			'memberPw' : memberPw,
			'memberEmail' : memberEmail,
			'memberGrant' : memberGrant
		};
		   
		$.ajax({
	             url: "/signin",  //회원가입완료
	             type: "POST",
	             data: JSON.stringify(data),
	             dataType: "JSON",
	             contentType: "application/json",
	             accept: "application/json",
	             success: function(result) {   
	            	 console.log(result.data);
	            	 console.log("전송/저장 성공");
	            	 
	            	 alert('회원가입이 완료되었습니다. 다시 로그인해 주세요');
	            	 
	            	 location.href="../login";
	            	 	            	 
	             },
	             error: function(result) {
	            	 console.log(result.data);
	            	 alert('회원가입 실패. 다시 시도해 주세요');
	                 console.log(result.responseText); //responseText의 에러메세지 확인
	             }
	         });
	
	}

</script>

</body>
</html>

findPw.jsp

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c"      uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form"   uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="ui"     uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@page isELIgnored="false" %>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
   <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
   <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

	<link rel="preconnect" href="https://fonts.googleapis.com">
	<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
	<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR&display=swap" rel="stylesheet">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">

<title>비밀번호 찾기</title>

<style>
	body{font-family: 'Noto Sans KR', sans-serif;}
	h2{text-align: left;}

	a:link {color: black;}
    a:visited {color: black;}
    a:hover {color: black; text-decoration: none;}
    a:active {color: black;}
    
</style>
</head>

<body>
<br><br>
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-4">
        <h2>비밀번호 찾기</h2>
	        <div class="justify-content-center" style="text-align: center">
	        	<form:form action="/findPw" name="memberEditForm" id="memberEditForm" method="POST">
				<table class="table table-bordered">
					<tr>
						<td style="text-align:center;">아이디</td>
						<td><input type="text" name="memberId" id="memberId"></td>
					</tr>
					<tr>
						<td style="text-align:center;">이메일</td>
						<td><input type="text" name="memberEmail" id="memberEmail" oninput="emailCheck()" onkeyup="enterkey()"><div id="emailCheck"></div></td>
					</tr>

					<tr>
					<td colspan="2"><input type="submit" value="비밀번호 찾기"></td>
					</tr>
							
				</table>
				</form:form>
				
			</div>
		</div>
	</div>
</div>

<script>
function enterkey() {
	if (window.event.keyCode == 13) {
		
		memberEditForm.submit();
		
	}
}

function emailCheck(){ //아이디 입력시
	
	var memberId = document.forms["memberEditForm"]["memberId"].value;
	var memberEmail = document.forms["memberEditForm"]["memberEmail"].value;
	var data = {
			'memberId': memberId,
			'memberEmail' : memberEmail
	};

	$.ajax({
        url: "/emailCheck",
        type: "POST",
        data: JSON.stringify(data),
        dataType: "JSON",
        contentType: "application/json",
        accept: "application/json",
        success: function(result) {          
              	 
	     if(result.data ==0){
       		document.getElementById("emailCheck").innerHTML = "<span style='color: red;'>아이디와 이메일이 일치하지 않습니다.</span>";
       	  
       	 }else if(result.data ==1){
       		document.getElementById("emailCheck").innerHTML = "<span style='color: green;'>아이디와 이메일이 일치 합니다.</span>";
       		
       	 }else if(memberId==null|| memberId==''){
       		document.getElementById("emailCheck").innerHTML = "<span style='color: green;'>아이디를 입력해주세요</span>";
       	 }

       	 
        },
        error: function(result) {

            console.log(result.responseText); //responseText의 에러메세지 확인
        }
    });
}

</script>
</body>
</html>

MemberEdit.jsp

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib prefix="c"      uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="form"   uri="http://www.springframework.org/tags/form" %>
<%@ taglib prefix="ui"     uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@page isELIgnored="false" %>


<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
   <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
   <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

	<link rel="preconnect" href="https://fonts.googleapis.com">
	<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
	<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR&display=swap" rel="stylesheet">
	<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">

<title>회원정보 수정</title>

<style>
	body{font-family: 'Noto Sans KR', sans-serif;}
	h2{text-align: left;}

	a:link {color: black;}
    a:visited {color: black;}
    a:hover {color: black; text-decoration: none;}
    a:active {color: black;}
    
</style>
</head>

<body>
<br><br>
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-4">
        <h2>회원정보 수정</h2>
	        <div class="justify-content-center" style="text-align: center">
	        	<form:form action="/member/editMember" name="memberEditForm" id="memberEditForm" method="POST">
				<table class="table table-bordered">
					<tr>
						<td style="text-align:center;">아이디</td>
						<td><input type="text" name="memberId" id="memberId" value="${member.memberId}" readonly></td>
					</tr>
					
					<tr>
						<td style="text-align:center;">비밀번호</td>
						<td><input type="password" name="memberPw" id="memberPw"><input type="hidden" name="memberUuid" id="memberUuid" value="${member.memberUuid}"></td>
					</tr>
					
					<tr><td>이메일</td><td><input type="text" id="memberEmail" name="memberEmail" value="${member.memberEmail}" oninput="emailCheck()" onkeyup="enterkey()"><div id="msg"></div></td>
					</tr>
					
					<tr>
					<td colspan="2"><input type="button" value="회원정보 수정" onclick="validation()"></td>
					</tr>
							
				</table>
				</form:form>
				
				<div id="msg"></div>
				
			</div>
		</div>
	</div>
</div>

<script>
function validation() {
	
    var pwcheck = document.forms["memberEditForm"]["memberPw"].value;
    var emailcheck = document.forms["memberEditForm"]["memberEmail"].value;
    var memberId = document.forms["memberEditForm"]["memberId"].value;
    var memberUuid = document.forms["memberEditForm"]["memberUuid"].value;

    var pwExp = /^(?=.*[a-zA-Z])((?=.*\d)(?=.*\W)).{8,16}$/; //비밀번호 정규식
    var emailregExp = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*.[a-zA-Z]{2,3}$/i; //이메일 정규식
    
    var tb = document.getElementById('tb');
    var msg = document.getElementById('msg');
	

    if (pwcheck == null || pwcheck == "") {
    	
       msg.innerHTML = "비밀번호가 입력되지 않았습니다";
       tb.append(msg);

        return false;     

    } else if(!pwExp.test(pwcheck)) {
    	
        alert('비밀번호는 영문/숫자/특수문자(!@#$%^&*)를 포함하여 8~16자로 입력해야합니다.')
        return false;
        
    } else if(!emailregExp.test(emailcheck)) {
    	
        alert('이메일 형식이 맞지 않습니다.')
        return false;
	
    } else{ 
    	
    	   	
    	var memberId = document.forms["memberEditForm"]["memberId"].value;
    	var memberEmail = document.forms["memberEditForm"]["memberEmail"].value;
    	var data = {
    			'memberId': memberId,
    			'memberEmail' : memberEmail
    	};
    	
    	$.ajax({
            url: "/emailCheck", //아이디 이메일 일치여부. 0:불일치 1:일치
            type: "POST",
            data: JSON.stringify(data),
            dataType: "JSON",
            contentType: "application/json",
            accept: "application/json",
            success: function(result) {         
                  	 
    	     if(result.data ==1){ //원래 이메일 주소 사용할수 있게 하기 위함.
    	    		send();
           		 
           	 }else if(result.data ==0 ){ //새로운 이메일 주소

           		$.ajax({
           	        url: "/emailDupl", //갯수만
           	        type: "POST",
           	        data: JSON.stringify(memberEmail),
           	        dataType: "JSON",
           	        contentType: "application/json",
           	        accept: "application/json",
           	        success: function(result) {          
           	              	 
            		 if(result.data >1){ //이미 db에 두개 있는경우
           		    	alert("이메일 다중 중복");
           		    	
           	       	 }else if(result.data ==1){ //db에 있는경우
           	       		alert("이메일 주소가 사용중입니다. 이메일을 다시 확인해주세요.");

           	       	 }else if(result.data ==0){ //db에 없는 아예 새로운 이메일
           	       		send();
           	       	 } 
           		     
           		  	/* if(result.code=="400"){ //이미 db에 두개 있는경우
         		    	alert("이메일 다중 중복");
         		     	console.log(result.code +" :" +result.message);
         		    	
         	       	 }else if(result.status=="407"){ //db에 있는경우
         	       		alert("이메일 주소가 사용중입니다. 이메일을 다시 확인해주세요.");
         	       		console.log(result.code +" :" +result.message);

         	       	 }else if(result.code=="200"){ //db에 없는 아예 새로운 이메일
         	       		send();
         	       	 
         	       	 } */
           	       	 
           	        },
           	        error: function(result) {

           	            console.log(result.responseText); //responseText의 에러메세지 확인
           	        }
           	    });
           	 
           	}else if(memberId==null|| memberId==''){
           		document.getElementById("msg").innerHTML = "<span style='color: green;'>이메일을 입력해주세요</span>";
           		
           	 }	     
           	 
            },
            error: function(result) {

                console.log(result.responseText); //responseText의 에러메세지 확인
            }
        });
    	

    }


}

function send(){ //보내는 기능만 함
	 	var pwcheck = document.forms["memberEditForm"]["memberPw"].value;
	    var emailcheck = document.forms["memberEditForm"]["memberEmail"].value;
	    var memberId = document.forms["memberEditForm"]["memberId"].value;
	    var memberUuid = document.forms["memberEditForm"]["memberUuid"].value;
	
	var data = {
			'memberId': memberId,
			'memberPw' : pwcheck,
			'memberEmail' : emailcheck,
			'memberUuid' : memberUuid
	};
	
	$.ajax({ 
        url: "/member/editMember",
        type: "POST",
        data: JSON.stringify(data),
        dataType: "JSON",
        contentType: "application/json",
        accept: "application/json",
        success: function(result) {          

       	 	 alert("수정이 완료되었습니다.");
       	 	location.href='/memberList';

        },
        error: function(result) {

            console.log(result.responseText); //responseText의 에러메세지 확인
        }
    });
	
}


function enterkey() {
	if (window.event.keyCode == 13) {
		
		validation();
	}
}

function emailCheck(){
	
	var memberId = document.forms["memberEditForm"]["memberId"].value;
	var memberEmail = document.forms["memberEditForm"]["memberEmail"].value;
	var data = {
			'memberId': memberId,
			'memberEmail' : memberEmail
	};
	
	$.ajax({
        url: "/emailCheck",
        type: "POST",
        data: JSON.stringify(data),
        dataType: "JSON",
        contentType: "application/json",
        accept: "application/json",
        success: function(result) {         
              	 
	     if(result.data ==1){
	    	 document.getElementById("msg").innerHTML = "<span style='color: green;'>사용가능한 이메일 (변경없음)</span>"; //본인 이메일주소
       		 
       	 }else if(result.data ==0 ){ //새로운 이메일 주소

       		$.ajax({
       	        url: "/emailDupl", //이메일 중복 갯수만
       	        type: "POST",
       	        data: JSON.stringify(memberEmail),
       	        dataType: "JSON",
       	        contentType: "application/json",
       	        accept: "application/json",
       	        success: function(result) {          
       	              	 
       		     if(result.data >1){ //이미 db에 두개 있는경우
       		    	 document.getElementById("msg").innerHTML = "<span style='color: red;'>이메일 다중 중복</span>";
       	       		 
       	       	 }else if(result.data ==1){ //db에 있는경우
       	       		document.getElementById("msg").innerHTML = "<span style='color: red;'>사용중인 이메일</span>";
       	       	 
       	       	 }else if(result.data ==0){ //db에 없는 아예 새로운 이메일
       	        		document.getElementById("msg").innerHTML = "<span style='color: green;'>사용가능한 이메일</span>";
       	       	 
       	       	 }
       	       	 
       	        },
       	        error: function(result) {

       	            console.log(result.responseText); //responseText의 에러메세지 확인
       	        }
       	    });
       	 
       	}else if(memberId==null|| memberId==''){
       		document.getElementById("msg").innerHTML = "<span style='color: green;'>이메일을 입력해주세요</span>";
       		
       	 }	     
       	 
        },
        error: function(result) {

            console.log(result.responseText); //responseText의 에러메세지 확인
        }
    });
}


</script>
</body>
</html>
728x90