옵션 |
|
기본적으로 controller는 요청이 들어오면 해당 요청에 해당하는 비즈니스 로직(service)을 호출,
호출된 비즈니스 로직에서 해당 프로세스을 실행하게 되며, 그 중간중간 DB 접근을 dao를통해 하게 된다.
라고 이해하고 있습니다만,
무슨 말인지는 이해 하나, 직접 코딩을 했을 때 이 경계가 모호해져버립니다.
예를 들어 컨트롤러에서 로그인 후 로그인을 체크하는 메서드를 호출했을 때,
현재 프로세스는 아래와 같습니다.
AuthController입니다.
@RequestMapping(value="/login/check", method=RequestMethod.POST) public String loginCheck(MemberVo memberVo, String token, Model model) throws Exception { securityService.checkToken(token); HashMap<String, Object> hashMap = authService.login(memberVo); MemberVo resultVo = (MemberVo) hashMap.get("memberVo"); Integer loginState = (Integer) hashMap.get("state"); if(loginState != null) { if(loginState == IAuthService.NO_EMAIL_CERTIFY) { // 이메일이 인증되지 않았다면 이메일 인증 메일 변경 및 재전송 model.addAttribute("msg", resultVo.getEmail() + "메일로 메일인증을 받으셔야 로그인 가능합니다.\\n다른 메일주소로 변경하여 인증하시려면 확인을 클릭하시기 바랍니다."); model.addAttribute("redirect", "member/change/email?id=" + resultVo.getId() + "&token=" + securityService.getToken()); model.addAttribute("redirectCancle", ""); return "message/confirmReplace"; } } return "redirect:/"; }
AuthService입니다.
public HashMap<String, Object> login(MemberVo memberVo) throws Exception { MemberVo resultVo = memberDao.selectOne(memberVo); HashMap<String, Object> hashMap = new HashMap<String, Object>(); hashMap.put("memberVo", resultVo); if(resultVo == null) { throw new Exception("아이디 혹은 비밀번호가 맞지 않습니다."); } if(!memberService.checkHashedPassword(resultVo.getPassword(), memberVo.getPassword())) { //아이디 혹은 비밀번호가 맞지 않다는 메시지를 나타내는 이유는 사용자에게 아이디가 존재하는지 알리지 않기 위함. throw new Exception("아이디 혹은 비밀번호가 맞지 않습니다."); } TimestampUtil timestampUtil = new TimestampUtil(); timestampUtil.setFormat("yyyy년 MM월 dd일 HH시 mm분 ss초"); if(resultVo.getBlockDate() != null) { timestampUtil.setTimestamp(resultVo.getBlockDate()); String blockDate = timestampUtil.getFormatDate(); throw new Exception(resultVo.getId() + " 회원님은 " + blockDate + "에 차단되셨습니다."); } if(resultVo.getLeaveDate() != null) { timestampUtil.setTimestamp(resultVo.getLeaveDate()); String leaveDate = timestampUtil.getFormatDate(); throw new Exception(resultVo.getId() + " 회원님은 " + leaveDate + "에 회원탈퇴를 하셨습니다."); } if(resultVo.getEmailCertifyDate() == null) { System.err.println("warning: 회원 로그인 시 이메일 인증이 없으면 출력, 회원 이메일을 다시 적을 수 있는 페이지 제작해야 함."); hashMap.put("state", IAuthService.NO_EMAIL_CERTIFY); return hashMap; } System.err.println("warning: 비밀번호 5회 이상 틀릴 경우 비밀번호 찾기 필요"); timestampUtil = new TimestampUtil(); Timestamp today = timestampUtil.getTimestamp(); memberVo.setLoginDate(today); memberDao.update(memberVo); setAuthMember(memberVo); //세션에 memberVo 추가.(로그인 return hashMap;}
현재 경계를 나눌 수가 없어서 제 마음대로 작성해놨습니다만,
어떤 부분이 어디로 가야할지를 알려주시면 정말 많은 도움이 될 것 같습니다.
선배님들의 많은 도움 부탁드립니다!