기능구현

  • 회원가입(주소API연동, 이메일 인증, ajax를 사용하여 아이디 중복검사)
  • 관리자 페이지(인터셉터 적용, 상품관리, 회원관리)
  • 업로드(이미지 등록, 수정, 삭제)
  • 검색
  • 페이징
  • 구매(장바구니, 포인트사용)
  • 댓글(등록,수정,삭제)
  • 중간에 막혔거나 에러 해결 못하겠으면 yoonbitnara@gmail.com 으로 문의


목차

  • 난수생성
  • 인증번호 이메일 전송
  • 인증번호 회원가입페이지로 전송


난수생성

  • 인증번호는 6자리를 사용한다.
  • JAVA에서 제공하는 Random객체를 사용한다.(꼭 이렇게 안해도 됨)
  • 111111 ~ 999999 범위의 숫자를 얻기 위해 아래와 같이 작성하였다.


	// 이메일 인증
	@RequestMapping(value = "mailCheck", method = RequestMethod.GET)
	@ResponseBody
	public void mailCheckGET(String email) throws Exception {
		
		// 뷰에서 넘어온 데이터 확인
		logger.info("========================== 이메일 데이터 전송 확인 ============================");
		logger.info("인증번호 : [ " + email + " ]");
		
		Random random = new Random();
		int checkNum = random.nextInt(888888) + 111111;
	}


  • 인증번호가 제대로 생성되었는지 확인하기 위해 log코드를 추가한다.


logger.info("인증번호(checkNum) [ " + checkNum + " ]");


변수를 선언하여 이메일 전송에 필요로 한 데이터를 할당한다.


	// 이메일 인증
	@RequestMapping(value = "mailCheck", method = RequestMethod.GET)
	@ResponseBody
	public void mailCheckGET(String email) throws Exception {
		
		// 뷰에서 넘어온 데이터 확인
		logger.info("========================== 이메일 데이터 전송 확인 ============================");
		logger.info("인증번호 : [ " + email + " ]");
		
		Random random = new Random();
		int checkNum = random.nextInt(888888) + 111111;
		logger.info("인증번호(checkNum) [ " + checkNum + " ]");
		
		
		// 이메일 보내기
		String setFrom = "yoonbit92@naver.com";
		String toMail = email;
		String title = "회원가입 인증 이메일 입니다.";
		String content = "방문해주셔서 감사합니다." +
						 "<br><br>" +
						 "인증번호는 " + checkNum + "입니다." +
						 "<br>" +
						 "해당 인증번호를 확인하여 정확히 입력해주세요.";
		
	}


  • setFrom
    • root-context.xml에 입력한 자신의 이메일 계정의 이메일 주소
  • toMail
    • 수신받을 이메일. 회원가입 페이지에서 매개변수로 전달받은 email 변수 사용
  • title
    • 제목
  • content
    • 이메일 내용
  • <br>
    • 줄바꿈을 위한 태그


  • MemberController.java 상단에 javaMailSender 객체 mailSender 변수를 선언한다. 의존성 주입을 위해 @Autowired어노테이션을 사용한다.


package com.store.controller;

import java.util.Random;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.store.model.MemberVO;
import com.store.service.MemberService;

@Controller
@RequestMapping(value = "/member")
public class MemberController {
	
	private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
	
	@Autowired
	private MemberService memberService; // 코드 추가
	
	@Autowired
	private JavaMailSender mailSender;
	
	//회원가입 페이지 이동
	@RequestMapping(value = "join", method = RequestMethod.GET)
	public void joinGET() {
		logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 회원가입 페이지 진입");
	}
	
	// 회원가입
	@RequestMapping(value = "/join", method = RequestMethod.POST)
	public String joinPost(MemberVO member) throws Exception {
		
		logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> join 진입");
		
		//회원가입 서비스 실행
		memberService.memberJoin(member);
		
		logger.info("join Service 성공");
		
		return "redirect:/main";
	}
	
	// 로그인 페이지 이동
	@RequestMapping(value = "login", method = RequestMethod.GET)
	public void loginGET() {
		
		logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 로그인 페이지 진입");
	}
	
	// 아이디 중복 검사
	@RequestMapping(value = "/memberIdChk", method = RequestMethod.POST)
	@ResponseBody
	public String memberIdChkPOST(String memberId) throws Exception {
		
		//logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> memberIdChk 진입");
		
		int result = memberService.idCheck(memberId);
		
		logger.info("결과값 : " + result);
		
		if (result != 0) {
			
			return "fail"; // 중복아이디가 존재하면 fail
			
		} else {
			
			return "success"; // 중복아이디가 존재하지 않는다면 success
		}
	}
	
	// 이메일 인증
	@RequestMapping(value = "mailCheck", method = RequestMethod.GET)
	@ResponseBody
	public void mailCheckGET(String email) throws Exception {
		
		// 뷰에서 넘어온 데이터 확인
		logger.info("========================== 이메일 데이터 전송 확인 ============================");
		logger.info("인증번호 : [ " + email + " ]");
		
		Random random = new Random();
		int checkNum = random.nextInt(888888) + 111111;
		logger.info("인증번호(checkNum) [ " + checkNum + " ]");
		
		
		// 이메일 보내기
		String setFrom = "yoonbit92@naver.com";
		String toMail = email;
		String title = "회원가입 인증 이메일 입니다.";
		String content = "방문해주셔서 감사합니다." +
						 "<br><br>" +
						 "인증번호는 " + checkNum + "입니다." +
						 "<br>" +
						 "해당 인증번호를 확인하여 정확히 입력해주세요.";
		
	}
	

}


이메일 전송을 위한 코드를 삽입한다.


		try {
			
			MimeMessage message = mailSender.createMimeMessage();
			MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");
			helper.setFrom(setFrom);
			helper.setTo(toMail);
			helper.setSubject(title);
			helper.setText(content, true);
			mailSender.send(message);
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}


package com.store.controller;

import java.util.Random;

import javax.mail.internet.MimeMessage;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.store.model.MemberVO;
import com.store.service.MemberService;

@Controller
@RequestMapping(value = "/member")
public class MemberController {
	
	private static final Logger logger = LoggerFactory.getLogger(MemberController.class);
	
	@Autowired
	private MemberService memberService; // 코드 추가
	
	@Autowired
	private JavaMailSender mailSender;
	
	//회원가입 페이지 이동
	@RequestMapping(value = "join", method = RequestMethod.GET)
	public void joinGET() {
		logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 회원가입 페이지 진입");
	}
	
	// 회원가입
	@RequestMapping(value = "/join", method = RequestMethod.POST)
	public String joinPost(MemberVO member) throws Exception {
		
		logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> join 진입");
		
		//회원가입 서비스 실행
		memberService.memberJoin(member);
		
		logger.info("join Service 성공");
		
		return "redirect:/main";
	}
	
	// 로그인 페이지 이동
	@RequestMapping(value = "login", method = RequestMethod.GET)
	public void loginGET() {
		
		logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 로그인 페이지 진입");
	}
	
	// 아이디 중복 검사
	@RequestMapping(value = "/memberIdChk", method = RequestMethod.POST)
	@ResponseBody
	public String memberIdChkPOST(String memberId) throws Exception {
		
		//logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> memberIdChk 진입");
		
		int result = memberService.idCheck(memberId);
		
		logger.info("결과값 : " + result);
		
		if (result != 0) {
			
			return "fail"; // 중복아이디가 존재하면 fail
			
		} else {
			
			return "success"; // 중복아이디가 존재하지 않는다면 success
		}
	}
	
	// 이메일 인증
	@RequestMapping(value = "mailCheck", method = RequestMethod.GET)
	@ResponseBody
	public void mailCheckGET(String email) throws Exception {
		
		// 뷰에서 넘어온 데이터 확인
		logger.info("========================== 이메일 데이터 전송 확인 ============================");
		logger.info("인증번호 : [ " + email + " ]");
		
		Random random = new Random();
		int checkNum = random.nextInt(888888) + 111111;
		logger.info("인증번호(checkNum) [ " + checkNum + " ]");
		
		
		// 이메일 보내기
		String setFrom = "yoonbit92@naver.com";
		String toMail = email;
		String title = "회원가입 인증 이메일 입니다.";
		String content = "방문해주셔서 감사합니다." +
						 "<br><br>" +
						 "인증번호는 " + checkNum + "입니다." +
						 "<br>" +
						 "해당 인증번호를 확인하여 정확히 입력해주세요.";
		
		try {
			
			MimeMessage message = mailSender.createMimeMessage();
			MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");
			helper.setFrom(setFrom);
			helper.setTo(toMail);
			helper.setSubject(title);
			helper.setText(content, true);
			mailSender.send(message);
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
	}
	

}


  • 전송을 해본다.




회원가입 페이지 전송

  • ajax를 통한 요청으로 다시 반환할 경우 데이터 타입은 String타입만 가능하다. 그래서 String 타입으로 변환 후 반환해준다.


 String num = Integer.toString(checkNum);


// 이메일 인증
	@RequestMapping(value = "mailCheck", method = RequestMethod.GET)
	@ResponseBody
	public void mailCheckGET(String email) throws Exception {
		
		// 뷰에서 넘어온 데이터 확인
		logger.info("========================== 이메일 데이터 전송 확인 ============================");
		logger.info("인증번호 : [ " + email + " ]");
		
		Random random = new Random();
		int checkNum = random.nextInt(888888) + 111111;
		logger.info("인증번호(checkNum) [ " + checkNum + " ]");
		
		
		// 이메일 보내기
		String setFrom = "yoonbit92@naver.com";
		String toMail = email;
		String title = "회원가입 인증 이메일 입니다.";
		String content = "방문해주셔서 감사합니다." +
						 "<br><br>" +
						 "인증번호는 " + checkNum + "입니다." +
						 "<br>" +
						 "해당 인증번호를 확인하여 정확히 입력해주세요.";
		
		try {
			
			MimeMessage message = mailSender.createMimeMessage();
			MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");
			helper.setFrom(setFrom);
			helper.setTo(toMail);
			helper.setSubject(title);
			helper.setText(content, true);
			mailSender.send(message);
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
		String num = Integer.toString(checkNum);
		
	}


  • mailCheckGET메서드의 변환 타입을 String으로 변경한다.


 /* 변경전 */
    public void mailCheckGET(String email) throws Exception{
 
    /* 변경후 */
    public String mailCheckGET(String email) throws Exception{


	// 이메일 인증
	@RequestMapping(value = "mailCheck", method = RequestMethod.GET)
	@ResponseBody
	public String mailCheckGET(String email) throws Exception {
		
		// 뷰에서 넘어온 데이터 확인
		logger.info("========================== 이메일 데이터 전송 확인 ============================");
		logger.info("인증번호 : [ " + email + " ]");
		
		Random random = new Random();
		int checkNum = random.nextInt(888888) + 111111;
		logger.info("인증번호(checkNum) [ " + checkNum + " ]");
		
		
		// 이메일 보내기
		String setFrom = "yoonbit92@naver.com";
		String toMail = email;
		String title = "회원가입 인증 이메일 입니다.";
		String content = "방문해주셔서 감사합니다." +
						 "<br><br>" +
						 "인증번호는 " + checkNum + "입니다." +
						 "<br>" +
						 "해당 인증번호를 확인하여 정확히 입력해주세요.";
		
		try {
			
			MimeMessage message = mailSender.createMimeMessage();
			MimeMessageHelper helper = new MimeMessageHelper(message, true, "utf-8");
			helper.setFrom(setFrom);
			helper.setTo(toMail);
			helper.setSubject(title);
			helper.setText(content, true);
			mailSender.send(message);
			
		} catch (Exception e) {
			
			e.printStackTrace();
		}
		
		String num = Integer.toString(checkNum);
		
		return num;
		
	}


  • join.jsp의 ajax에 success 코드를 추가한다.


    $.ajax({
        
        type:"GET",
        url:"mailCheck?email=" + email,
        success: function (data) {
			
		}
                
    });


  • 제대로 들어왔는지 확인하기 위해 console을 찍어준다.


 $.ajax({
        
        type:"GET",
        url:"mailCheck?email=" + email,
        success: function (data) {
			
        	console.log("data : " + data);
		}
                
    });


  • 테스트를 위해 MemberController.javamailCheckGET메서드의 try구문은 잠시 주석처리를 해준다.



Leave a comment