이호영 이호영 2025-10-22
시큐리티.xml 머지 완료
@aee4527d18031e73a1ad73030c38e1acae73e820
.gitignore
--- .gitignore
+++ .gitignore
@@ -204,3 +204,10 @@
 /.gemini
 /.gemini.zip
 /CLAUDE.md
+
+<<<<<<< HEAD
+# Mac OS
+=======
+### Mac OS ###
+>>>>>>> refs/heads/5419_전화번호거짓표시50건이상
+.DS_Store
(No newline at end of file)
pom.xml
--- pom.xml
+++ pom.xml
@@ -477,12 +477,19 @@
 		</dependency>
 		
 		<!-- kmc 본인인증  -->
-		<dependency>
+		<!-- <dependency>
 			<groupId>kmc</groupId>
 		    <artifactId>ICERTSecu_JDK18</artifactId>
 		    <version>1</version>
 			<scope>system</scope>
 			<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/ICERTSecu_JDK18.jar</systemPath>
+		</dependency> -->
+		
+		<!-- kmc 본인인증 ver 2 암호화 모듈 추가 버전 -->
+		<dependency>
+		  <groupId>kmc</groupId>
+		  <artifactId>ICERTSecu</artifactId>
+		  <version>JDK18_v2</version>
 		</dependency>
 		
 		
src/main/java/itn/let/cert/phone/web/CertPhoneWebController.java
--- src/main/java/itn/let/cert/phone/web/CertPhoneWebController.java
+++ src/main/java/itn/let/cert/phone/web/CertPhoneWebController.java
@@ -34,12 +34,11 @@
 	
 	@RequestMapping(value = {"/web/cert/log/insertCertLog.do"})
 	public ResponseEntity<StatusResponse> insertCertLog(HttpServletRequest request) throws Exception {
-		
-		
-		
-		
-		
-		
 		return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, certPhoneService.insertCertLog(request), LocalDateTime.now()));
-	}	
+	}
+	
+	@RequestMapping(value = {"/web/cert/log/kmcErrorPage.do"})
+	public String kmcErrorPage() throws Exception {
+		return "web/cop/kmc/certResultError";
+	}
 }
(No newline at end of file)
src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiProfile.java
--- src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiProfile.java
+++ src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiProfile.java
@@ -148,24 +148,8 @@
 				kakaoReturnVO.setBizReturnMsg(msg);
 				
 				if(code.equals("200")) {
-					JSONObject tempCate = (JSONObject) object.get("data");
-					String senderKey = tempCate.get("senderKey").toString();
-					kakaoVO.setSenderKey(senderKey);
-					int profileCnt = kakaoApiService.selectKakaoProfileCnt(kakaoVO);
-
-					//중복된 발신프로필이 없으면 추가 입력
-					if(profileCnt == 0) {
-						kakaoApiService.insertKakaoProfileInfo(kakaoVO);
-					}else {//중복이 있는 경우 처리
-						
-						kakaoReturnVO.setBizReturnCode("310");
-						kakaoReturnVO.setBizReturnMsg("이미 등록되어 있는 발신프로필 입니다");
-						
-						return kakaoReturnVO;
-						
-					}
+					kakaoReturnVO.setSenderKey((String) ((JSONObject) object.get("data")).get("senderKey"));
 				}
-				
 			}else {
 				
 				kakaoReturnVO.setBizReturnCode(statusCode);
src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
--- src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/KakaoAlimTalkService.java
@@ -4,7 +4,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 
-import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
+import itn.let.kakao.kakaoComm.KakaoReturnVO;
 import itn.let.kakao.kakaoComm.KakaoVO;
 import itn.let.mail.service.StatusResponse;
 import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
@@ -29,4 +29,7 @@
 	public List<KakaoVO> selectKakaoSentRefundListForSingle() throws Exception;
 	
 	public void kakaoSingleRefund(KakaoVO kakaoVO) throws Exception;
+	
+	//발신 프로필 등록 처리
+	public KakaoReturnVO createKaKaoProfile(KakaoVO kakaoVO) throws Exception;
 }
src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkServiceImpl.java
@@ -20,8 +20,6 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
 
 import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
 import egovframework.rte.fdl.idgnr.EgovIdGnrService;
@@ -29,9 +27,11 @@
 import itn.com.cmm.LoginVO;
 import itn.com.utl.fcc.service.EgovStringUtil;
 import itn.let.kakao.kakaoComm.BizKakaoPriceVO;
+import itn.let.kakao.kakaoComm.KakaoReturnVO;
 import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
 import itn.let.kakao.kakaoComm.KakaoSendUtil;
 import itn.let.kakao.kakaoComm.KakaoVO;
+import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
 import itn.let.kakao.user.kakaoAt.service.KakaoAlimTalkService;
 import itn.let.mail.service.StatusResponse;
 import itn.let.mjo.mjocommon.MjonCommon;
@@ -86,6 +86,9 @@
 	/** userManageService */
 	@Resource(name = "userManageService")
 	private EgovUserManageService userManageService;
+	
+	@Resource(name = "kakaoApiService")
+	private KakaoApiService kakaoApiService;
 
 	@Autowired
 	private MjonPayDAO mjonPayDAO;
@@ -1253,5 +1256,31 @@
 	
 	
 	
+	@Override
+	public KakaoReturnVO createKaKaoProfile(KakaoVO kakaoVO) throws Exception {
+		KakaoReturnVO returnVO = new KakaoReturnVO();
+		
+		/* senderKey 사용 우무 */
+		int profileCnt = kakaoApiService.selectKakaoProfileCnt(kakaoVO);
+		if(profileCnt > 0) {
+			returnVO.setBizReturnMsg("이미 등록된 발신프로필입니다. 동일 채널ID는 중복 등록이 불가합니다.");
+		}else {
+			List<KakaoVO> delProfileList = new ArrayList<KakaoVO>();
+			delProfileList = selectDeleteProfileInfo(kakaoVO);
+			
+			if(delProfileList.size() != 0) {
+				kakaoVO.setProfileId(delProfileList.get(0).getProfileId());
+				kakaoVO.setDeleteYn("N");
+				updateKakaoProfileStatus(kakaoVO);
+				returnVO.setBizReturnMsg("삭제 발신프로필의 복구가 완료 되었습니다.");
+			}else {
+				kakaoApiService.insertKakaoProfileInfo(kakaoVO);
+				returnVO.setBizReturnMsg("발신프로필의 등록이 완료 되었습니다.");
+			}
+			
+		}
+		return returnVO;
+	}
+		
 	
 }
src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkController.java
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkController.java
@@ -96,7 +96,10 @@
 			
 			KakaoReturnVO tmpProfileVO = kakaoApiProfile.kakaoApiProfileList(kakaoProfileVO);
 			
-			resultApiProfileList.add(tmpProfileVO);
+			/* API를 통하여 정상적으로 조회된 프로필만 add 처리 */
+			if("200".equals(tmpProfileVO.getBizReturnCode())) {
+				resultApiProfileList.add(tmpProfileVO);
+			}
 			
 		}
 		
@@ -137,21 +140,8 @@
 			
 			KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileToken(kakaoVO); //발신프로필 인증 토큰 요청하기
 			
-			String bizReturnCd = kakaoInfo.getBizReturnCode();
-			String bizReturnMsg = kakaoInfo.getBizReturnMsg();
-			
-			List<KakaoVO> delProfileList = new ArrayList<KakaoVO>();
-			if(bizReturnCd.equals("310") && bizReturnMsg.equals("이미 등록되어 있는 발신프로필 입니다")) {
-				
-				kakaoVO.setUserId(userId);
-				delProfileList = kakaoAlimTalkService.selectDeleteProfileInfo(kakaoVO);
-				
-			}
-			
-			int listSize = delProfileList.size();
 			modelAndView.addObject("kakaoInfo", kakaoInfo);
 			modelAndView.addObject("result", "success");
-			modelAndView.addObject("delInfoCnt", listSize);
 			
 		}catch(Exception ex){
 			ex.printStackTrace();
@@ -269,68 +259,14 @@
 				kakaoVO.setLastUpdusrId(userId);
 				KakaoReturnVO kakaoInfo = kakaoApiProfile.kakaoApiProfileCreate(kakaoVO);
 				
-				String bizReturnCd = kakaoInfo.getBizReturnCode();
-				String bizReturnMsg = kakaoInfo.getBizReturnMsg();
-				
-				System.out.println(bizReturnCd);
-				System.out.println(bizReturnMsg);
-				
-				/*
-				 * 기존에 등록된 발신프로필이라고 결과가 오는 경우 데이터베이스에서 삭제 기록을 조회해 본다.
-				 * 삭제 기록이 있는 경우 복구를 해주고(deleteYn 값을 'N'으로 변경)
-				 * 기록이 없는 경우 타 사이트에 등록되었을 수 있음.
-				 * 
-				 * */
-				
-				List<KakaoVO> delProfileList = new ArrayList<KakaoVO>();
-				if((bizReturnCd.equals("509") && bizReturnMsg.equals("이미 사용중인 카카오톡 채널입니다.")) ||  (bizReturnCd.equals("310") && bizReturnMsg.equals("이미 등록되어 있는 발신프로필 입니다"))) {
-					
-					delProfileList = kakaoAlimTalkService.selectDeleteProfileInfo(kakaoVO);
-					
+				if("200".equals(kakaoInfo.getBizReturnCode())) {
+					kakaoVO.setSenderKey(kakaoInfo.getSenderKey());
+					KakaoReturnVO internalReuslt = kakaoAlimTalkService.createKaKaoProfile(kakaoVO);
+					kakaoInfo.setBizReturnMsg(internalReuslt.getBizReturnMsg());
 				}
 				
-				//삭제처리된 발신프로필이 있는 경우
-				if(delProfileList != null && delProfileList.size() > 0) {
-					
-					int resultCnt = 0;
-					for(int i=0; i< delProfileList.size(); i++) {
-						
-						KakaoVO tmpKakaoVO = new KakaoVO();
-						tmpKakaoVO.setUserId(userId);
-						tmpKakaoVO.setProfileId(delProfileList.get(i).getProfileId());
-						tmpKakaoVO.setDeleteYn("N");
-						
-						int count = kakaoAlimTalkService.updateKakaoProfileStatus(tmpKakaoVO);
-						
-						resultCnt = resultCnt + count;
-						
-					}
-					
-					KakaoReturnVO kakaoReturnVO = new KakaoReturnVO();
-					if(resultCnt > 0) {
-						
-						kakaoReturnVO.setBizReturnCode("200");
-						kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구가 완료 되었습니다.");
-						modelAndView.addObject("kakaoInfo", kakaoReturnVO);
-						modelAndView.addObject("result", "success");
-						
-					}else {
-						
-						kakaoReturnVO.setBizReturnCode("200");
-						kakaoReturnVO.setBizReturnMsg("삭제 발신프로필의 복구에 오류가 발생하였습니다.");
-						modelAndView.addObject("kakaoInfo", kakaoReturnVO);
-						modelAndView.addObject("result", "zeroUpdate");
-						
-					}
-					
-					
-				}else {//삭제된 내역이 없는 경우 타 사이트에 발신프로필이 등록되어 있을 수 있다.
-					
-					modelAndView.addObject("kakaoInfo", kakaoInfo);
-					modelAndView.addObject("result", "success");
-					
-				}
-				
+				modelAndView.addObject("kakaoInfo", kakaoInfo);
+				modelAndView.addObject("result", "success");
 				
 			}
 		}catch(Exception ex){
src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
--- src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
+++ src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
@@ -74,7 +74,7 @@
 	private EgovMberManageService mberManageService;
 	
 	@Resource(name = "KmcCertChecker")
-	private KmcCertChecker kmcCertCheck;
+	private KmcCertChecker kmcCertChecker;
 	
 	/**
 	 * 주소록 그룹 리스트
@@ -954,7 +954,7 @@
 				mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAddrSubmitAjax.do");
 				mberCertPhoneVO.setPlusInfo(mberManageVO.getMberId());
 				
-				AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
+				AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
 
 				modelAndView.addObject("tr_cert", certVO.getTr_cert());
 				modelAndView.addObject("tr_url", certVO.getTr_url());
@@ -979,241 +979,16 @@
 		 */
 
 		@RequestMapping("/web/cop/kmc/authRequestAddrSubmitAjax.do")
-		public String authRequestFindIdPwAjax(HttpServletRequest request, ModelMap model,
-				@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
-				RedirectAttributes redirectAttributes) throws Exception {
+		public String authRequestFindIdPwAjax(
+											HttpServletRequest request
+											, HttpServletResponse response
+											, ModelMap model
+											, @RequestParam Map<String, Object> commandMap
+											, @ModelAttribute("searchVO") KmcVO kmcVO
+											, RedirectAttributes redirectAttributes
+										) throws Exception {
 
-			String errMessage = ""; // 에러메세지
-
-			String rec_cert = ""; // 결과값(암호화)
-			String certNum = ""; // certNum
-
-			rec_cert = request.getParameter("rec_cert").trim();
-			certNum = request.getParameter("certNum").trim();
-
-			kmcVO.setRecCert(rec_cert);
-			kmcVO.setCertNum(certNum);
-			// 파라미터 유효성 검증
-			if (rec_cert.length() == 0 || certNum.length() == 0) {
-				errMessage = "비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			// 변수선언
-			// --------------------------------------------------------------------------------------------------------
-			String k_certNum = ""; // 파라미터로 수신한 요청번호
-			k_certNum = certNum;
-			String date = ""; // 요청일시
-			String CI = ""; // 연계정보(CI)
-			String DI = ""; // 중복가입확인정보(DI)
-			String phoneNo = ""; // 휴대폰번호
-			String phoneCorp = ""; // 이동통신사
-			String birthDay = ""; // 생년월일
-			String gender = ""; // 성별
-			String nation = ""; // 내국인
-			String name = ""; // 성명
-			String M_name = ""; // 미성년자 성명
-			String M_birthDay = ""; // 미성년자 생년월일
-			String M_Gender = ""; // 미성년자 성별
-			String M_nation = ""; // 미성년자 내외국인
-			String result = ""; // 결과값
-
-			String certMet = ""; // 인증방법
-			String ip = ""; // ip주소
-			String plusInfo = "";
-
-			String encPara = "";
-			String encMsg1 = "";
-			String encMsg2 = "";
-			String msgChk = "";
-
-			com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
-
-			// 02. 1차 복호화
-			// 수신된 certNum를 이용하여 복호화
-			rec_cert = seed.getDec(rec_cert, k_certNum);
-
-			// 03. 1차 파싱
-			int inf1 = rec_cert.indexOf("/", 0);
-			int inf2 = rec_cert.indexOf("/", inf1 + 1);
-
-			encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
-			encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
-
-			// 04. 위변조 검증
-			encMsg2 = seed.getMsg(encPara);
-			kmcVO.setEncMsg2(encMsg2);
-			if (encMsg2.equals(encMsg1)) {
-				msgChk = "Y";
-			}
-
-			if (!"Y".equals(msgChk)) {
-				errMessage = "비정상접근입니다.";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			// 05. 2차 복호화
-			rec_cert = seed.getDec(encPara, k_certNum);
-			kmcVO.setRecCert(rec_cert);
-			// 06. 2차 파싱
-			int info1 = rec_cert.indexOf("/", 0);
-			int info2 = rec_cert.indexOf("/", info1 + 1);
-			int info3 = rec_cert.indexOf("/", info2 + 1);
-			int info4 = rec_cert.indexOf("/", info3 + 1);
-			int info5 = rec_cert.indexOf("/", info4 + 1);
-			int info6 = rec_cert.indexOf("/", info5 + 1);
-			int info7 = rec_cert.indexOf("/", info6 + 1);
-			int info8 = rec_cert.indexOf("/", info7 + 1);
-			int info9 = rec_cert.indexOf("/", info8 + 1);
-			int info10 = rec_cert.indexOf("/", info9 + 1);
-			int info11 = rec_cert.indexOf("/", info10 + 1);
-			int info12 = rec_cert.indexOf("/", info11 + 1);
-			int info13 = rec_cert.indexOf("/", info12 + 1);
-			int info14 = rec_cert.indexOf("/", info13 + 1);
-			int info15 = rec_cert.indexOf("/", info14 + 1);
-			int info16 = rec_cert.indexOf("/", info15 + 1);
-			int info17 = rec_cert.indexOf("/", info16 + 1);
-			int info18 = rec_cert.indexOf("/", info17 + 1);
-
-			certNum = rec_cert.substring(0, info1);
-			kmcVO.setCertNum(certNum);
-			date = rec_cert.substring(info1 + 1, info2);
-			kmcVO.setDate(date);
-			CI = rec_cert.substring(info2 + 1, info3);
-			kmcVO.setCI(CI);
-			phoneNo = rec_cert.substring(info3 + 1, info4);
-			kmcVO.setPhoneNo(phoneNo);
-			phoneCorp = rec_cert.substring(info4 + 1, info5);
-			kmcVO.setPhoneCorp(phoneCorp);
-			birthDay = rec_cert.substring(info5 + 1, info6);
-			kmcVO.setBirthDay(birthDay);
-			gender = rec_cert.substring(info6 + 1, info7);
-			kmcVO.setGender(gender);
-			nation = rec_cert.substring(info7 + 1, info8);
-			kmcVO.setNation(nation);
-			name = rec_cert.substring(info8 + 1, info9);
-			kmcVO.setName(name);
-			result = rec_cert.substring(info9 + 1, info10);
-			kmcVO.setResult(result);
-			certMet = rec_cert.substring(info10 + 1, info11);
-			kmcVO.setCertMet(certMet);
-			ip = rec_cert.substring(info11 + 1, info12);
-			kmcVO.setIp(ip);
-			M_name = rec_cert.substring(info12 + 1, info13);
-			kmcVO.setMName(M_name);
-			M_birthDay = rec_cert.substring(info13 + 1, info14);
-			kmcVO.setMBirthDay(M_birthDay);
-			M_Gender = rec_cert.substring(info14 + 1, info15);
-			kmcVO.setMGender(M_Gender);
-			M_nation = rec_cert.substring(info15 + 1, info16);
-			kmcVO.setMNation(M_nation);
-			plusInfo = rec_cert.substring(info16 + 1, info17);
-			kmcVO.setPlusInfo(plusInfo);
-			DI = rec_cert.substring(info17 + 1, info18);
-			kmcVO.setDI(DI);
-
-			// 07. CI, DI 복호화
-			CI = seed.getDec(CI, k_certNum);
-			kmcVO.setCI(CI);
-			DI = seed.getDec(DI, k_certNum);
-			kmcVO.setDI(DI);
-
-			if ("Y".equals(result)) {
-
-			}
-
-			// --------------------------------------------------------------
-			String regex = "";
-			if (certNum.length() == 0 || certNum.length() > 40) {
-				errMessage = "요청번호 비정상.";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[0-9]*";
-			if (date.length() != 14 || !paramChk(regex, date)) {
-				errMessage = "요청일시";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[A-Z]*";
-			if (certMet.length() != 1 || !paramChk(regex, certMet)) {
-				errMessage = "본인인증방법 비정상" + certMet;
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[0-9]*";
-			if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo)) {
-				errMessage = "휴대폰번호 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[A-Z]*";
-			if (phoneCorp.length() != 3 || !paramChk(regex, phoneCorp)) {
-				errMessage = "이동통신사 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[0-9]*";
-			if (birthDay.length() != 8 || !paramChk(regex, birthDay)) {
-				errMessage = "생년월일 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[0-9]*";
-			if (gender.length() != 1 || !paramChk(regex, gender)) {
-				errMessage = "성별 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[0-9]*";
-			if (nation.length() != 1 || !paramChk(regex, nation)) {
-				errMessage = "내/외국인 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[\\sA-Za-z가-�R.,-]*";
-			if (name.length() > 60 || !paramChk(regex, name)) {
-				errMessage = "성명 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[A-Z]*";
-			if (result.length() != 1 || !paramChk(regex, result)) {
-				errMessage = "결과값 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-
-			regex = "[\\sA-Za-z가-?.,-]*";
-			if (M_name.length() != 0) {
-				if (M_name.length() > 60 || !paramChk(regex, M_name)) {
-					errMessage = "미성년자 성명 비정상";
-					return returnPage(model, errMessage, kmcVO);
-				}
-			}
-
-			regex = "[0-9]*";
-			if (M_birthDay.length() != 0) {
-				if (M_birthDay.length() != 8 || !paramChk(regex, M_birthDay)) {
-					errMessage = "미성년자 생년월일  비정상";
-					return returnPage(model, errMessage, kmcVO);
-				}
-			}
-
-			regex = "[0-9]*";
-			if (M_Gender.length() != 0) {
-				if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
-					errMessage = "미성년자 성별 비정상";
-					return returnPage(model, errMessage, kmcVO);
-				}
-			}
-
-			regex = "[0-9]*";
-			if (M_nation.length() != 0) {
-				if (M_nation.length() != 1 || !paramChk(regex, M_nation)) {
-					errMessage = "미성년자 내/외국인 비정상";
-					return returnPage(model, errMessage, kmcVO);
-				}
-			}
+			kmcVO = kmcCertChecker.authCertResult(request, response, model);
 
 			// KMC 본인인증 로그
 			AuthCertVO certVO = new AuthCertVO();
src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
--- src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
+++ src/main/java/itn/let/mjo/mjocommon/MjonCommon.java
@@ -3,6 +3,8 @@
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
@@ -16,10 +18,8 @@
 import org.apache.commons.httpclient.methods.PostMethod;
 import org.json.simple.JSONObject;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Service;
-
-import com.mysql.jdbc.StringUtils;
+import org.springframework.transaction.annotation.Transactional;
 
 import egovframework.com.idgen.CustomIdGnrService;
 import egovframework.rte.fdl.cmmn.exception.FdlException;
@@ -27,17 +27,22 @@
 import itn.com.cmm.OptimalMsgResultDTO;
 import itn.com.cmm.util.MsgSendUtils;
 import itn.com.cmm.util.SlackMessageFormatUtil;
+import itn.com.cmm.util.StringUtil;
 import itn.let.kakao.kakaoComm.KakaoSendAdvcVO;
 import itn.let.kakao.kakaoComm.KakaoVO;
 import itn.let.mail.service.StatusResponse;
 import itn.let.mjo.event.service.MjonEventService;
 import itn.let.mjo.event.service.MjonEventVO;
 import itn.let.mjo.msg.service.MjonMsgVO;
+import itn.let.mjo.msg.service.impl.MjonMsgDAO;
+import itn.let.mjo.msgdata.service.MjonMsgDataService;
+import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
 import itn.let.mjo.msgholiday.service.MsgAlarmSetVO;
 import itn.let.mjo.msgholiday.service.MsgHolidayService;
 import itn.let.mjo.msgholiday.service.MsgHolidayVO;
 import itn.let.sym.site.service.EgovSiteManagerService;
 import itn.let.sym.site.service.JoinSettingVO;
+import itn.let.uat.uia.web.SendLogVO;
 import itn.let.uss.umt.service.EgovUserManageService;
 import itn.let.uss.umt.service.UserManageVO;
 import lombok.extern.slf4j.Slf4j;
@@ -70,6 +75,12 @@
 
 	@Resource(name = "egovMjonMsgIdCGnrService")
 	private CustomIdGnrService idgenMsgCId;
+	
+	@Resource(name = "mjonMsgDAO")
+	private MjonMsgDAO mjonMsgDAO;
+	
+	@Resource(name = "MjonMsgDataService")
+	private MjonMsgDataService mjonMsgDataService;
 
 	
 
@@ -784,8 +795,120 @@
 		return result;
 	}
 	
+	public void sendMessagesIfOverFifty(int cnt, String callTo) throws Exception {
+		if(
+				cnt >= 50 											//50건 이상일 경우만 발송
+				&& StringUtil.isNotEmpty(callTo)					// null, "" 체크
+				&& callTo.startsWith("010")							// 010으로 시작하는 휴대폰번호일 경우
+				&& "Y".equals(selectSmsNotiIfOverFiftySetting())	// 안내문자 발송 on 인경우만
+				&& !sysMsgTodaySendYn(callTo)						// 금일 1회 이상 보낸 이력없을 경우만 발송
+			) {
+			
+			//50건이상 발송 안내문자 구분값 = 01
+			String sendMsgType = "01";
+			String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+			String contents = "[인터넷 대량문자발송안내] 문자온에서 "+ callTo + " 번호로 " + today + "에 인터넷 대량 문자(50통 이상)가 발송되었습니다."
+					+ "\n※ 번호도용이 의심되는 경우, 이용 중인 이동통신사의 휴대전화 번호도용 문자차단 부가서비스(무료)에 가입하여 피해를 예방할 수 있습니다.";
+			this.sendSysMsg(
+					"15518011"
+					, callTo
+					, contents
+					, sendMsgType
+					);
+		}
+	}
 	
+	/**
+	 * Method Name : sendSysMsg
+	 * Description : 관리자 안내 문자 공통
+	 *
+	 * @param callFrom : 발신번호
+	 * @param callTo : 수신번호 
+	 * @param contents : 내용 
+	 * @param sendMsgType : 발신내용 타입 - 01: 대량문자발송안내
+	 * @return
+	 * @throws Exception
+	 * @return MjonMsgReturnVO 설명
+	 */
+	@Transactional(rollbackFor = Exception.class)
+	public MjonMsgReturnVO sendSysMsg(
+										String callFrom
+										, String callTo
+										, String contents
+										, String sendMsgType
+									) throws Exception {
+		
+		//결과 vo
+		MjonMsgReturnVO returnVO = new MjonMsgReturnVO();
+		
+		MjonMsgVO mjonMsgVO = new MjonMsgVO();
+		mjonMsgVO.setSmsTxt(contents);
+		mjonMsgVO.setReserveYn("N");
+		// 시스템 문자발송 번호
+//		mjonMsgVO.setCallFrom("15518011");
+		mjonMsgVO.setCallFrom(callFrom);
+		mjonMsgVO.setCallTo(callTo);
+
+		mjonMsgVO.setUserId("system");
+
+		/*
+		 * 본문길이에 따른 단문/장문 구분
+		 * 단문 4
+		 * 장문 6
+		 * 2000자 이상 invalid
+		 */
+		String msgType = MsgSendUtils.getMsgTypeWithByteValidation(new MjonMsgSendVO(), contents);// 
+		mjonMsgVO.setMsgType(msgType);
+		
+		// MsgDiv - S: 단문, L: 장문, P: 그림
+		if("4".equalsIgnoreCase(msgType)) {
+			mjonMsgVO.setMsgDiv("S");
+		}else if("6".equalsIgnoreCase(msgType)) {
+			mjonMsgVO.setMsgDiv("L");
+		}
+		else { // invalid
+			returnVO.setMsgGroupId("");
+			returnVO.setSendMsgCnt("0"); // 발송 건수 저장
+			returnVO.setSendMsgBlockCnt("0"); // 수신차단 건수 저장
+			return returnVO;
+		}
+			
+		// 문자타입별 대표전송사 정보
+		MjonMsgVO mjonMsgVO2 = new MjonMsgVO();
+		mjonMsgVO2 = mjonMsgDAO.selectRepMsgAgetnInfo(mjonMsgVO);
+		// 전송사 구분 코드 - 01 : 아이하트, 02 : 현대 퓨쳐넷, 03 : 아이엠오, 04 : 다우기술
+    	mjonMsgVO.setAgentCode(mjonMsgVO2.getAgentCode()); //전송사 선택			
+    	// 전송금액
+		mjonMsgVO.setTotPrice(mjonMsgVO2.getAgentPrice().toString());	//총금액
+		mjonMsgVO.setEachPrice(mjonMsgVO2.getAgentPrice().toString());	//한건 금액
+
+		returnVO = mjonMsgDataService.insertSysMsgDataInfo(mjonMsgVO);
+		
+		// 시스템 발송 로그
+		SendLogVO sendLogVO = new SendLogVO();
+		// SendType 1:문자로 발송 2:이메일로 발송
+		sendLogVO.setSendId(returnVO.getMsgGroupId());
+		sendLogVO.setSendType("1");
+		sendLogVO.setFrstSendInfo(mjonMsgVO.getCallFrom());
+		sendLogVO.setReceive(mjonMsgVO.getCallTo());
+		sendLogVO.setContents(contents);
+		sendLogVO.setSendMsgType(sendMsgType);
+
+		mjonMsgDataService.insertSysMsgLog(sendLogVO);
+		
+		return returnVO;
+	}
 	
+	private Boolean sysMsgTodaySendYn(String callTo) throws Exception {
+		SendLogVO sendLogVO = new SendLogVO();
+		sendLogVO.setReceive(callTo);
+		
+		return mjonMsgDataService.selectSysMsgTodaySendYn(sendLogVO);
+	}
 	
+	private String selectSmsNotiIfOverFiftySetting() throws Exception {
+		JoinSettingVO joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
+		return joinSettingVO.getSmsNotiIfOverFifty();
+	}
 	
 }
src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
--- src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
+++ src/main/java/itn/let/mjo/msgdata/service/MjonMsgDataService.java
@@ -190,7 +190,7 @@
 
 	public MjonMsgReturnVO sendSysMsgData(MjonMsgVO mjonMsgVO, HttpServletRequest request) throws Exception;
 
-
+	public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception;
 	
 	
 }
src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataDAO.java
@@ -403,6 +403,10 @@
 		return result;
 	}
 	
+	public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception{
+		return (Boolean) select("mjonMsgDataDAO.selectSysMsgTodaySendYn",sendLogVO);
+	}
+	
 
 	/**
 	 * 다량 데이터를 Batch 처리로 MJ_MSG_DATA 테이블에 INSERT
src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
--- src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
+++ src/main/java/itn/let/mjo/msgdata/service/impl/MjonMsgDataServiceImpl.java
@@ -4224,6 +4224,17 @@
 //		int instCnt = mjonMsgDataDAO.insertMsgDataInfo_jdbc_advc(mjonMsgSendVOList);
 
 		
+		//50건이상 문자발송 시 안내메시지 전송
+		try {
+			if(
+				"p".equals(userInfo.getDept()) // 개인회원일 경우에만 발송
+			) { 
+				mjonCommon.sendMessagesIfOverFifty(instTotalCnt, mjonMsgVO.getCallFrom());
+			}
+		} catch (Exception e) {
+			System.out.println("sendMessagesIfOverFifty method exception.");
+		}
+		
 		// TEST발송 시 발송 후 캐시가 있어야함.
 		returnMap.put("afterCash", priceAndPoint.getBefCash(userId));
 //		
@@ -5191,4 +5202,9 @@
 		return returnVO;
 	}
 
+	@Override
+	public Boolean selectSysMsgTodaySendYn(SendLogVO sendLogVO) throws Exception{
+		return mjonMsgDataDAO.selectSysMsgTodaySendYn(sendLogVO);
+	}
+
 }
src/main/java/itn/let/mjo/pay/service/KmcVO.java
--- src/main/java/itn/let/mjo/pay/service/KmcVO.java
+++ src/main/java/itn/let/mjo/pay/service/KmcVO.java
@@ -18,10 +18,10 @@
 	private String gender		= "";			// 성별
 	private String nation		= "";			// 내국인
 	private String name			= "";			// 성명
-	private String MName		= "";			// 미성년자 성명
-	private String MBirthDay	= "";			// 미성년자 생년월일
-	private String MGender		= "";			// 미성년자 성별
-	private String MNation		= "";			// 미성년자 내외국인
+//	private String MName		= "";			// 미성년자 성명
+//	private String MBirthDay	= "";			// 미성년자 생년월일
+//	private String MGender		= "";			// 미성년자 성별
+//	private String MNation		= "";			// 미성년자 내외국인
 	private String result		= "";			// 결과값
 
 	private String certMet		= "";			// 인증방법
@@ -40,6 +40,11 @@
 	
 	private String idx       = "";				//본인인증 로그 idx
 	private String dnChk       = "";				//본인명의 DN 체크
+	
+	private String reserve1 = "";
+	private String reserve2 = "";
+	private String reserve3 = "";
+	private String reserve4 = "";
 	
 	public String getUserId() {
 		return userId;
@@ -177,30 +182,6 @@
 	public void setCertNum(String certNum) {
 		this.certNum = certNum;
 	}
-	public String getMName() {
-		return MName;
-	}
-	public void setMName(String mName) {
-		MName = mName;
-	}
-	public String getMBirthDay() {
-		return MBirthDay;
-	}
-	public void setMBirthDay(String mBirthDay) {
-		MBirthDay = mBirthDay;
-	}
-	public String getMGender() {
-		return MGender;
-	}
-	public void setMGender(String mGender) {
-		MGender = mGender;
-	}
-	public String getMNation() {
-		return MNation;
-	}
-	public void setMNation(String mNation) {
-		MNation = mNation;
-	}
 	public String getRecCert() {
 		return recCert;
 	}
@@ -225,7 +206,30 @@
 	public void setCertType(String certType) {
 		this.certType = certType;
 	}
-	
+	public String getReserve1() {
+		return reserve1;
+	}
+	public void setReserve1(String reserve1) {
+		this.reserve1 = reserve1;
+	}
+	public String getReserve2() {
+		return reserve2;
+	}
+	public void setReserve2(String reserve2) {
+		this.reserve2 = reserve2;
+	}
+	public String getReserve3() {
+		return reserve3;
+	}
+	public void setReserve3(String reserve3) {
+		this.reserve3 = reserve3;
+	}
+	public String getReserve4() {
+		return reserve4;
+	}
+	public void setReserve4(String reserve4) {
+		this.reserve4 = reserve4;
+	}
 	
 	
 }
src/main/java/itn/let/mjo/pay/web/MjonPayController.java
--- src/main/java/itn/let/mjo/pay/web/MjonPayController.java
+++ src/main/java/itn/let/mjo/pay/web/MjonPayController.java
@@ -91,6 +91,7 @@
 import itn.let.sym.site.service.EgovSiteManagerService;
 import itn.let.sym.site.service.JoinSettingVO;
 import itn.let.uat.uia.service.AuthCertVO;
+import itn.let.uat.uia.web.KmcCertChecker;
 import itn.let.uss.umt.service.EgovMberManageService;
 import itn.let.uss.umt.service.EgovUserManageService;
 import itn.let.uss.umt.service.MberManageVO;
@@ -165,7 +166,10 @@
 	EgovSiteManagerService egovSiteManagerService;	
 	
 	@Resource(name = "mberGrdService")
-	MberGrdService mberGrdService;	
+	MberGrdService mberGrdService;
+	
+	@Resource(name = "KmcCertChecker")
+	KmcCertChecker kmcCertChecker;	
 	
 	//배열 정의{"컬럼순차번호, 컬럼이름, 컬럼내용, 컬럼이름에 붙여야할 내용(엑셀코드양식다운로드시 필요)"}
 	private String[][] sendPayExcelValue ={
@@ -930,7 +934,7 @@
 	}
 	
 	 /**
-		 * 나이스페이(PG사 전송화면)
+		 * 회원가입 본인인증
 		 *
 		 * @param 
 		 * @return
@@ -941,270 +945,10 @@
 				ModelMap model , @RequestParam Map<String, Object> commandMap, 
 				@ModelAttribute("searchVO") KmcVO kmcVO) throws Exception {
 			
-			//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
-			response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
-			
-			System.out.println("++++++++++++ 세션체크 ::: "+ session.getAttribute("mberSession"));
-			
-			String errMessage = ""; //에러메세지
-			
-			String rec_cert      = "";  // 결과값(암호화)
-			String certNum       = "";  // certNum
-			
-		    rec_cert = request.getParameter("rec_cert").trim();
-			certNum  = request.getParameter("certNum").trim(); 
-			
-			kmcVO.setRecCert(rec_cert);
-			kmcVO.setCertNum(certNum);
-			// 파라미터 유효성 검증
-			if( rec_cert.length() == 0 || certNum.length() == 0 ){
-				errMessage = "비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-			
-			
-			// 변수선언 --------------------------------------------------------------------------------------------------------
-			String k_certNum = "";			    // 파라미터로 수신한 요청번호
-			k_certNum = certNum;
-		    String date			= "";			// 요청일시
-			String CI	    	= "";			// 연계정보(CI)
-			String DI	    	= "";			// 중복가입확인정보(DI)
-		    String phoneNo		= "";			// 휴대폰번호
-			String phoneCorp	= "";			// 이동통신사
-			String birthDay		= "";			// 생년월일
-			String gender		= "";			// 성별
-			String nation		= "";			// 내국인
-			String name			= "";			// 성명
-			String M_name		= "";			// 미성년자 성명
-			String M_birthDay	= "";			// 미성년자 생년월일
-			String M_Gender		= "";			// 미성년자 성별
-			String M_nation		= "";			// 미성년자 내외국인
-		    String result		= "";			// 결과값
-
-		    String certMet		= "";			// 인증방법
-		    String ip			= "";			// ip주소
-			String plusInfo		= "";
-
-			String encPara		= "";
-			String encMsg1		= ""; 
-			String encMsg2		= "";
-			String msgChk       = "";
-			
-			com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
-			 
-			//02. 1차 복호화
-	        //수신된 certNum를 이용하여 복호화
-	        rec_cert  = seed.getDec(rec_cert, k_certNum);
-
-	        //03. 1차 파싱
-	        int inf1 = rec_cert.indexOf("/",0);
-	        int inf2 = rec_cert.indexOf("/",inf1+1);
-
-			encPara  = rec_cert.substring(0,inf1);         //암호화된 통합 파라미터
-	        encMsg1  = rec_cert.substring(inf1+1,inf2);    //암호화된 통합 파라미터의 Hash값
-
-			//04. 위변조 검증
-			encMsg2  = seed.getMsg(encPara);
-			kmcVO.setEncMsg2(encMsg2);
-	        if(encMsg2.equals(encMsg1)){
-	            msgChk="Y";
-	        }
-	        
-			if(!"Y".equals(msgChk)) {
-				errMessage = "비정상접근입니다.";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-			
-			 //05. 2차 복호화
-			rec_cert  = seed.getDec(encPara, k_certNum);
-			kmcVO.setRecCert(rec_cert);
-	        //06. 2차 파싱
-	        int info1  = rec_cert.indexOf("/",0);
-	        int info2  = rec_cert.indexOf("/",info1+1);
-	        int info3  = rec_cert.indexOf("/",info2+1);
-	        int info4  = rec_cert.indexOf("/",info3+1);
-	        int info5  = rec_cert.indexOf("/",info4+1);
-	        int info6  = rec_cert.indexOf("/",info5+1);
-	        int info7  = rec_cert.indexOf("/",info6+1);
-	        int info8  = rec_cert.indexOf("/",info7+1);
-			int info9  = rec_cert.indexOf("/",info8+1);
-			int info10 = rec_cert.indexOf("/",info9+1);
-			int info11 = rec_cert.indexOf("/",info10+1);
-			int info12 = rec_cert.indexOf("/",info11+1);
-			int info13 = rec_cert.indexOf("/",info12+1);
-			int info14 = rec_cert.indexOf("/",info13+1);
-			int info15 = rec_cert.indexOf("/",info14+1);
-			int info16 = rec_cert.indexOf("/",info15+1);
-			int info17 = rec_cert.indexOf("/",info16+1);
-			int info18 = rec_cert.indexOf("/",info17+1);
-
-	        certNum		= rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
-	        date		= rec_cert.substring(info1+1,info2); kmcVO.setDate(date); 
-	        CI			= rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
-	        phoneNo		= rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
-	        phoneCorp	= rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
-	        birthDay	= rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
-	        gender		= rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
-	        nation		= rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
-			name		= rec_cert.substring(info8+1,info9); kmcVO.setName(name);
-			result		= rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
-			certMet		= rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
-			ip			= rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
-			M_name		= rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
-			M_birthDay	= rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
-			M_Gender	= rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
-			M_nation	= rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
-			plusInfo	= rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
-			DI      	= rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
-
-	        //07. CI, DI 복호화
-	        CI  = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
-	        DI  = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
-			
-	        if("Y".equals(result)) {
-	        	
-	        }
-	        
-	        //--------------------------------------------------------------
-	        String regex = "";
-	        if( certNum.length() == 0 || certNum.length() > 40){
-				errMessage = "요청번호 비정상.";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-
-			regex = "[0-9]*";
-			if( date.length() != 14 || !paramChk(regex, date) ){
-				errMessage = "요청일시";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-
-			regex = "[A-Z]*";
-			if( certMet.length() != 1 || !paramChk(regex, certMet) ){
-				errMessage = "본인인증방법 비정상" + certMet;
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-
-
-			regex = "[0-9]*";
-			if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
-				errMessage = "휴대폰번호 비정상" ;
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-			
-			regex = "[A-Z]*";
-			if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
-				errMessage = "이동통신사 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-
-			regex = "[0-9]*";
-			if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
-				errMessage = "생년월일 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-
-			regex = "[0-9]*";
-			if( gender.length() != 1 || !paramChk(regex, gender) ){
-				errMessage = "성별 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-
-			regex = "[0-9]*";
-			if( nation.length() != 1 || !paramChk(regex, nation) ){
-				errMessage = "내/외국인 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-			
-			regex = "[\\sA-Za-z가-�R.,-]*";
-			if( name.length() > 60 || !paramChk(regex, name) ){
-				errMessage = "성명 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-			
-			regex = "[A-Z]*";
-			if( result.length() != 1 || !paramChk(regex, result) ){
-				errMessage = "결과값 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-			
-			regex = "[\\sA-Za-z가-?.,-]*";
-			if( M_name.length() != 0 ){
-				if( M_name.length() > 60 || !paramChk(regex, M_name) ){
-					errMessage = "미성년자 성명 비정상";
-					return returnPage(model , errMessage , kmcVO) ;
-				}
-			}
-			
-			regex = "[0-9]*";
-			if( M_birthDay.length() != 0 ){
-				if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
-					errMessage = "미성년자 생년월일  비정상";
-					return returnPage(model , errMessage , kmcVO) ;
-				}
-			}
-
-			regex = "[0-9]*";
-			if( M_Gender.length() != 0 ){
-				if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
-					errMessage = "미성년자 성별 비정상";
-					return returnPage(model , errMessage , kmcVO) ;
-				}
-			}
-
-			regex = "[0-9]*";
-			if( M_nation.length() != 0 ){
-				if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
-					errMessage = "미성년자 내/외국인 비정상";
-					return returnPage(model , errMessage , kmcVO) ;
-				}
-			}
-	        
-			//본인인증 결과 내용 저장하기.
-			/*System.out.println("+++++++++++++ getCertNum ::: "+kmcVO.getCertNum());
-			System.out.println("+++++++++++++ getDate ::: "+kmcVO.getDate());
-			System.out.println("+++++++++++++ getDI ::: "+kmcVO.getDI());
-			System.out.println("+++++++++++++ getPhoneNo ::: "+kmcVO.getPhoneNo());
-			System.out.println("+++++++++++++ getNation ::: "+kmcVO.getNation());
-			System.out.println("+++++++++++++ getName ::: "+kmcVO.getName());
-			System.out.println("+++++++++++++ getResult ::: "+kmcVO.getResult());
-			System.out.println("+++++++++++++ getCertMet ::: "+kmcVO.getCertMet());
-			System.out.println("+++++++++++++ getIp ::: "+kmcVO.getIp());*/
-			
-			//KMC 본인인증 정보를 세션에 담아준다.
-			/*AuthCertVO certVO = new AuthCertVO();
-			certVO.setCertNum(kmcVO.getCertNum());
-			certVO.setCertDate(kmcVO.getDate());
-			certVO.setCertDi(kmcVO.getDI());
-			certVO.setCertPhone(kmcVO.getPhoneNo());
-			certVO.setCertNation(kmcVO.getNation());
-			certVO.setCertName(kmcVO.getName());
-			certVO.setCertResult(kmcVO.getResult());
-			certVO.setCertType("KMC문자인증");
-			certVO.setCertIpaddr(kmcVO.getIp());
-			certVO.setBirthDay(kmcVO.getBirthDay());
-			certVO.setSexdstnCode(kmcVO.getGender());*/
-			
-			/*request.getSession().setAttribute("AuthKmcCertVO", certVO);*/
-			
-			/*System.out.println("++++++++++++ 세션체크22 ::: "+(MberManageVO) session.getAttribute("mberSession"));*/
-			
-			//KMC 본인인증 로그 insert
-			AuthCertVO certVO = new AuthCertVO();
-			certVO.setMberId(kmcVO.getPlusInfo());
-			certVO.setCertNum(kmcVO.getCertNum());
-			certVO.setCertDate(kmcVO.getDate());
-			certVO.setCertDi(kmcVO.getDI());
-			certVO.setCertPhone(kmcVO.getPhoneNo());
-			certVO.setCertNation(kmcVO.getNation());
-			certVO.setCertName(kmcVO.getName());
-			certVO.setCertResult(kmcVO.getResult());
-			certVO.setCertType("KMC_회원가입 인증");
-			certVO.setCertIpaddr(kmcVO.getIp());
-			certVO.setBirthDay(kmcVO.getBirthDay());
-			certVO.setSexdstnCode(kmcVO.getGender());
-
-			//디비 테이블에 저장하기
-			mberManageService.insertCertInfoLog(certVO);
+			//kmc 본인인증 결과처리
+			kmcVO = kmcCertChecker.authCertResult(request, response, model);
+			//kmc 본인인증 로그 처리
+			AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_회원가입 인증");
 			
 			kmcVO.setIdx(certVO.getIdx()); //본인인증 로그 Idx - 로그 insert 후 idx selectKey
 			model.addAttribute("kmcVO", kmcVO);
@@ -6179,5 +5923,6 @@
   		
   		return p_response;
     }
+    
 }
 
src/main/java/itn/let/schdlr/service/SchedulerUtil.java
--- src/main/java/itn/let/schdlr/service/SchedulerUtil.java
+++ src/main/java/itn/let/schdlr/service/SchedulerUtil.java
@@ -480,7 +480,8 @@
 	public LockProvider lockProvider(DataSource dataSource) {
 		return new JdbcTemplateLockProvider(dataSource);
 	}
-	
+
+//	@Scheduled(cron = "0 0 0/2 * * ?") // 매시간 짝수 정각마다 실행
 	@Scheduled(cron = "0 0/3 * * * ?") 	// 3분마다 실행
 	@SchedulerLock(name = "runKakaoOneTime", lockAtMostForString = ONE_MIN, lockAtLeastForString = ONE_MIN)
 	public void runKakaoOneTime() throws Exception {
src/main/java/itn/let/sym/site/service/JoinSettingVO.java
--- src/main/java/itn/let/sym/site/service/JoinSettingVO.java
+++ src/main/java/itn/let/sym/site/service/JoinSettingVO.java
@@ -65,6 +65,7 @@
 	private String slackNoti;  //관리자 SLACK 알림 여부
 	private String smishingNoti;	//첫결제(카드제외) 스미싱의심 알림 여부
 	private String holiSmishingNoti; //야간 스미싱알림 여부
+	private String smsNotiIfOverFifty; //50건이상 문자발송 시 안내문자 발송
 
 	
 }
src/main/java/itn/let/uat/uia/service/EgovLoginService.java
--- src/main/java/itn/let/uat/uia/service/EgovLoginService.java
+++ src/main/java/itn/let/uat/uia/service/EgovLoginService.java
@@ -121,5 +121,4 @@
     //비밀번호 실패 횟수 조회
     public LoginVO selectPassMiss(LoginVO vo) throws Exception;
 
-	public KmcVO kmcDecryption(HttpServletRequest request, KmcVO kmcVO);
 }
src/main/java/itn/let/uat/uia/service/impl/EgovLoginServiceImpl.java
--- src/main/java/itn/let/uat/uia/service/impl/EgovLoginServiceImpl.java
+++ src/main/java/itn/let/uat/uia/service/impl/EgovLoginServiceImpl.java
@@ -17,6 +17,7 @@
 import egovframework.rte.psl.dataaccess.util.EgovMap;
 import itn.com.cmm.LoginVO;
 import itn.let.mjo.pay.service.KmcVO;
+import itn.let.uat.uia.service.AuthCertVO;
 import itn.let.uat.uia.service.EgovLoginService;
 import itn.let.uss.umt.service.UserManageVO;
 import itn.let.utl.fcc.service.EgovNumberUtil;
@@ -318,240 +319,6 @@
     	return loginDAO.selectPassMiss(vo);
     }
 
-
-	@Override
-	public KmcVO kmcDecryption(HttpServletRequest request, KmcVO kmcVO) {
-		
-
-		
-		String rec_cert	= request.getParameter("rec_cert").trim();
-		String certNum	= request.getParameter("certNum").trim();
-		
-		kmcVO.setRecCert(rec_cert);
-		kmcVO.setCertNum(certNum);
-		// 파라미터 유효성 검증
-		if (rec_cert.length() == 0 || certNum.length() == 0) {
-			kmcVO.setErrMessage("비정상");
-			return kmcVO;
-		}
-		// 변수선언
-		// --------------------------------------------------------------------------------------------------------
-		String k_certNum = ""; // 파라미터로 수신한 요청번호
-		k_certNum = certNum;
-		String date = ""; // 요청일시
-		String CI = ""; // 연계정보(CI)
-		String DI = ""; // 중복가입확인정보(DI)
-		String phoneNo = ""; // 휴대폰번호
-		String phoneCorp = ""; // 이동통신사
-		String birthDay = ""; // 생년월일
-		String gender = ""; // 성별
-		String nation = ""; // 내국인
-		String name = ""; // 성명
-		String M_name = ""; // 미성년자 성명
-		String M_birthDay = ""; // 미성년자 생년월일
-		String M_Gender = ""; // 미성년자 성별
-		String M_nation = ""; // 미성년자 내외국인
-		String result = ""; // 결과값
-
-		String certMet = ""; // 인증방법
-		String ip = ""; // ip주소
-		String plusInfo = "";
-
-		String encPara = "";
-		String encMsg1 = "";
-		String encMsg2 = "";
-		String msgChk = "";
-
-		IcertSecuManager seed = new IcertSecuManager();
-
-		// 02. 1차 복호화
-		// 수신된 certNum를 이용하여 복호화
-		rec_cert = seed.getDec(rec_cert, k_certNum);
-
-		// 03. 1차 파싱
-		int inf1 = rec_cert.indexOf("/", 0);
-		int inf2 = rec_cert.indexOf("/", inf1 + 1);
-
-		encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
-		encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
-
-		// 04. 위변조 검증
-		encMsg2 = seed.getMsg(encPara);
-		kmcVO.setEncMsg2(encMsg2);
-		if (encMsg2.equals(encMsg1)) {
-			msgChk = "Y";
-		}
-
-		if (!"Y".equals(msgChk)) {
-			kmcVO.setErrMessage("비정상접근입니다.");
-			return kmcVO;
-		}
-
-		// 05. 2차 복호화
-		rec_cert = seed.getDec(encPara, k_certNum);
-		kmcVO.setRecCert(rec_cert);
-		// 06. 2차 파싱
-		int info1 = rec_cert.indexOf("/", 0);
-		int info2 = rec_cert.indexOf("/", info1 + 1);
-		int info3 = rec_cert.indexOf("/", info2 + 1);
-		int info4 = rec_cert.indexOf("/", info3 + 1);
-		int info5 = rec_cert.indexOf("/", info4 + 1);
-		int info6 = rec_cert.indexOf("/", info5 + 1);
-		int info7 = rec_cert.indexOf("/", info6 + 1);
-		int info8 = rec_cert.indexOf("/", info7 + 1);
-		int info9 = rec_cert.indexOf("/", info8 + 1);
-		int info10 = rec_cert.indexOf("/", info9 + 1);
-		int info11 = rec_cert.indexOf("/", info10 + 1);
-		int info12 = rec_cert.indexOf("/", info11 + 1);
-		int info13 = rec_cert.indexOf("/", info12 + 1);
-		int info14 = rec_cert.indexOf("/", info13 + 1);
-		int info15 = rec_cert.indexOf("/", info14 + 1);
-		int info16 = rec_cert.indexOf("/", info15 + 1);
-		int info17 = rec_cert.indexOf("/", info16 + 1);
-		int info18 = rec_cert.indexOf("/", info17 + 1);
-
-		certNum = rec_cert.substring(0, info1);
-		kmcVO.setCertNum(certNum);
-		date = rec_cert.substring(info1 + 1, info2);
-		kmcVO.setDate(date);
-		CI = rec_cert.substring(info2 + 1, info3);
-		kmcVO.setCI(CI);
-		phoneNo = rec_cert.substring(info3 + 1, info4);
-		kmcVO.setPhoneNo(phoneNo);
-		phoneCorp = rec_cert.substring(info4 + 1, info5);
-		kmcVO.setPhoneCorp(phoneCorp);
-		birthDay = rec_cert.substring(info5 + 1, info6);
-		kmcVO.setBirthDay(birthDay);
-		gender = rec_cert.substring(info6 + 1, info7);
-		kmcVO.setGender(gender);
-		nation = rec_cert.substring(info7 + 1, info8);
-		kmcVO.setNation(nation);
-		name = rec_cert.substring(info8 + 1, info9);
-		kmcVO.setName(name);
-		result = rec_cert.substring(info9 + 1, info10);
-		kmcVO.setResult(result);
-		certMet = rec_cert.substring(info10 + 1, info11);
-		kmcVO.setCertMet(certMet);
-		ip = rec_cert.substring(info11 + 1, info12);
-		kmcVO.setIp(ip);
-		M_name = rec_cert.substring(info12 + 1, info13);
-		kmcVO.setMName(M_name);
-		M_birthDay = rec_cert.substring(info13 + 1, info14);
-		kmcVO.setMBirthDay(M_birthDay);
-		M_Gender = rec_cert.substring(info14 + 1, info15);
-		kmcVO.setMGender(M_Gender);
-		M_nation = rec_cert.substring(info15 + 1, info16);
-		kmcVO.setMNation(M_nation);
-		plusInfo = rec_cert.substring(info16 + 1, info17);
-		kmcVO.setPlusInfo(plusInfo);
-		DI = rec_cert.substring(info17 + 1, info18);
-		kmcVO.setDI(DI);
-
-		// 07. CI, DI 복호화
-		CI = seed.getDec(CI, k_certNum);
-		kmcVO.setCI(CI);
-		DI = seed.getDec(DI, k_certNum);
-		kmcVO.setDI(DI);
-
-		if ("Y".equals(result)) {
-
-		}
-
-		// --------------------------------------------------------------
-		String regex = "";
-		if (certNum.length() == 0 || certNum.length() > 40) {
-			kmcVO.setErrMessage("요청번호 비정상.");
-			return kmcVO;
-		}
-
-		regex = "[0-9]*";
-		if (date.length() != 14 || !this.paramChk(regex, date)) {
-			kmcVO.setErrMessage("요청일시");
-			return kmcVO;
-		}
-
-		regex = "[A-Z]*";
-		if (certMet.length() != 1 || !this.paramChk(regex, certMet)) {
-			kmcVO.setErrMessage("본인인증방법 비정상" + certMet);
-			return kmcVO;
-		}
-
-		regex = "[0-9]*";
-		if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !this.paramChk(regex, phoneNo)) {
-			kmcVO.setErrMessage("휴대폰번호 비정상");
-			return kmcVO;
-		}
-
-		regex = "[A-Z]*";
-		if (phoneCorp.length() != 3 || !this.paramChk(regex, phoneCorp)) {
-			kmcVO.setErrMessage("이동통신사 비정상");
-			return kmcVO;
-		}
-
-		regex = "[0-9]*";
-		if (birthDay.length() != 8 || !this.paramChk(regex, birthDay)) {
-			kmcVO.setErrMessage("생년월일 비정상");
-			return kmcVO;
-		}
-
-		regex = "[0-9]*";
-		if (gender.length() != 1 || !this.paramChk(regex, gender)) {
-			kmcVO.setErrMessage("성별 비정상");
-			return kmcVO;
-		}
-
-		regex = "[0-9]*";
-		if (nation.length() != 1 || !this.paramChk(regex, nation)) {
-			kmcVO.setErrMessage("내/외국인 비정상");
-			return kmcVO;
-		}
-
-		regex = "[\\sA-Za-z가-�R.,-]*";
-		if (name.length() > 60 || !this.paramChk(regex, name)) {
-			kmcVO.setErrMessage("성명 비정상");
-			return kmcVO;
-		}
-
-		regex = "[A-Z]*";
-		if (result.length() != 1 || !this.paramChk(regex, result)) {
-			kmcVO.setErrMessage("결과값 비정상");
-			return kmcVO;
-		}
-
-		regex = "[\\sA-Za-z가-?.,-]*";
-		if (M_name.length() != 0) {
-			if (M_name.length() > 60 || !this.paramChk(regex, M_name)) {
-				kmcVO.setErrMessage("미성년자 성명 비정상");
-				return kmcVO;
-			}
-		}
-
-		regex = "[0-9]*";
-		if (M_birthDay.length() != 0) {
-			if (M_birthDay.length() != 8 || !this.paramChk(regex, M_birthDay)) {
-				kmcVO.setErrMessage("미성년자 생년월일  비정상");
-			}
-		}
-
-		regex = "[0-9]*";
-		if (M_Gender.length() != 0) {
-			if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
-				kmcVO.setErrMessage("미성년자 성별 비정상");
-			}
-		}
-
-		regex = "[0-9]*";
-		if (M_nation.length() != 0) {
-			if (M_nation.length() != 1 || !this.paramChk(regex, M_nation)) {
-				kmcVO.setErrMessage("미성년자 내/외국인 비정상");
-			}
-		}
-
-
-		return kmcVO;
-	}
-	
-	
 	public Boolean paramChk(String patn, String param) {
 		Pattern pattern = Pattern.compile(patn);
 		Matcher matcher = pattern.matcher(param);
src/main/java/itn/let/uat/uia/web/EgovLoginController.java
--- src/main/java/itn/let/uat/uia/web/EgovLoginController.java
+++ src/main/java/itn/let/uat/uia/web/EgovLoginController.java
@@ -253,7 +253,7 @@
 	private CertIpService certIpService;
 	
 	@Resource(name = "KmcCertChecker")
-	private KmcCertChecker kmcCertCheck;
+	private KmcCertChecker kmcCertChecker;
 	
 	
 	private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class);
@@ -336,7 +336,7 @@
 			
 			MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO();
 			mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAjax.do");
-			AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
+			AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
 			
 			model.addAttribute("tr_cert", certVO.getTr_cert());
 			model.addAttribute("tr_url", certVO.getTr_url());
@@ -385,7 +385,7 @@
 		mberCertPhoneVO.setNation(mberManageVO.getNationality());
 		mberCertPhoneVO.setBirthDay(mberManageVO.getBirth());
 		
-		AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
+		AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
 
 //		AuthCertVO certVO = kmcCertCheck.authCertCheckTwo(serverNm + "/web/cop/kmc/authRequestAjax.do",
 //				mberManageVO.getMberNm(), mberManageVO.getMoblphonNo(), mberManageVO.getSexdstnCode(),
@@ -4035,7 +4035,7 @@
 	    	}
 			mberCertPhoneVO.setPlusInfo(plusInfo);
 			
-			AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
+			AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
 			
 			modelAndView.addObject("tr_cert", certVO.getTr_cert());
 			modelAndView.addObject("tr_url", certVO.getTr_url());
@@ -4060,22 +4060,26 @@
 	 */
 
 	@RequestMapping("/web/cop/kmc/authRequestFindIdPwAjax.do")
-	public String authRequestFindIdPwAjax(HttpServletRequest request, ModelMap model,
+	public String authRequestFindIdPwAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model,
 			@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
 			RedirectAttributes redirectAttributes) throws Exception {
 		
-		KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
+//		KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
+		//kmc 본인인증 결과처리
+		kmcVO = kmcCertChecker.authCertResult(request, response, model);
+		//kmc 본인인증 로그 처리
+		AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_아이디패스워드찾기");
 		
 		String msg = "";
-		if (!findIdKmcCheck(kmcRVO.getDI(), kmcRVO.getName(), kmcRVO.getPhoneNo())) {
+		if (!findIdKmcCheck(kmcVO.getDI(), kmcVO.getName(), kmcVO.getPhoneNo())) {
 			msg = "일치하는 정보가 없습니다.";
 			redirectAttributes.addFlashAttribute("message", msg);
 			return "redirect:/web/user/findUserId.do";
 		}
 		
-		kmcRVO.setCertType("KMC_아이디패스워드찾기");
-		// 디비 테이블에 저장하기
-		mberManageService.insertCertInfoLogBn(kmcRVO);
+//		kmcRVO.setCertType("KMC_아이디패스워드찾기");
+//		// 디비 테이블에 저장하기
+//		mberManageService.insertCertInfoLogBn(kmcRVO);
 
 		model.addAttribute("kmcVO", kmcVO);
 		return "web/login/findUserIdKmcReqPage";
@@ -4092,18 +4096,24 @@
 	 * @discription 관리자 로그인 DN 값 최초 등록
 	 */
 	@RequestMapping("/web/cop/kmc/authRequestSelfLoginAjax.do")
-	public String authRequestSelfLoginAjax(HttpServletRequest request, ModelMap model,
+	public String authRequestSelfLoginAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model,
 			@RequestParam Map<String, Object> commandMap, @ModelAttribute("searchVO") KmcVO kmcVO,
 			RedirectAttributes redirectAttributes, HttpSession session) throws Exception {
 
 		UserManageVO userManageVO = new UserManageVO();
 		
-		KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
+//		KmcVO kmcRVO = loginService.kmcDecryption(request, kmcVO);
+		
+		//kmc 본인인증 결과처리
+		kmcVO = kmcCertChecker.authCertResult(request, response, model);
+		//kmc 본인인증 로그 처리
+		AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_아이디패스워드찾기");
+		
 
-		userManageVO.setCrtfcDnValue(kmcRVO.getDI());
-		userManageVO.setEmplyrNm(kmcRVO.getName());
-		userManageVO.setEmplyrId(kmcRVO.getPlusInfo().split(",,,")[0]);
-		userManageVO.setPassword(kmcRVO.getPlusInfo().split(",,,")[1]);
+		userManageVO.setCrtfcDnValue(kmcVO.getDI());
+		userManageVO.setEmplyrNm(kmcVO.getName());
+		userManageVO.setEmplyrId(kmcVO.getPlusInfo().split(",,,")[0]);
+		userManageVO.setPassword(kmcVO.getPlusInfo().split(",,,")[1]);
 		
 		userManageService.updateCrtfcDnValue(userManageVO);
 		
@@ -4121,20 +4131,20 @@
 			e.printStackTrace();
 			// TODO: handle exception
 		}
-		kmcRVO.setCertType("KMC_관리자미인증IP접속인증");
-		// 디비 테이블에 저장하기
-		
-		try {
-			mberManageService.insertCertInfoLogBn(kmcRVO);
-			
-		}  catch (Exception e) {
-			System.out.println("!!!!!!!!!!!!!!!!!");
-			e.printStackTrace();
-			// TODO: handle exception
-		}
+//		kmcRVO.setCertType("KMC_관리자미인증IP접속인증");
+//		// 디비 테이블에 저장하기
+//		
+//		try {
+//			mberManageService.insertCertInfoLogBn(kmcRVO);
+//			
+//		}  catch (Exception e) {
+//			System.out.println("!!!!!!!!!!!!!!!!!");
+//			e.printStackTrace();
+//			// TODO: handle exception
+//		}
 		
 		
-		model.addAttribute("kmcVO", kmcRVO);
+		model.addAttribute("kmcVO", kmcVO);
 		
 		System.out.println("======================================");
 		model.addAttribute("userManageVO", userManageVO);
@@ -5425,7 +5435,7 @@
 			mberCertPhoneVO.setNation(KMCInfoVO.getNationality());
 			mberCertPhoneVO.setPlusInfo(loginVO.getId());
 			
-			AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
+			AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
 
 			modelAndView.addObject("tr_cert", certVO.getTr_cert());
 			modelAndView.addObject("tr_url", certVO.getTr_url());
@@ -5446,245 +5456,19 @@
 	 * 
 	 */
 	@RequestMapping("/web/cop/kmc/insertIPAjax.do")
-	public String insertIPAjax(HttpServletRequest request, ModelMap model, @RequestParam Map<String, Object> commandMap,
+	public String insertIPAjax(HttpServletRequest request, HttpServletResponse response, ModelMap model, @RequestParam Map<String, Object> commandMap,
 			@ModelAttribute("searchVO") KmcVO kmcVO) throws Exception {
 
-		String errMessage = ""; // 에러메세지
-
-		String rec_cert = ""; // 결과값(암호화)
-		String certNum = ""; // certNum
-
-		rec_cert = request.getParameter("rec_cert").trim();
-		certNum = request.getParameter("certNum").trim();
-
-		kmcVO.setRecCert(rec_cert);
-		kmcVO.setCertNum(certNum);
-		// 파라미터 유효성 검증
-		if (rec_cert.length() == 0 || certNum.length() == 0) {
-			errMessage = "비정상";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		// 변수선언
-		// --------------------------------------------------------------------------------------------------------
-		String k_certNum = ""; // 파라미터로 수신한 요청번호
-		k_certNum = certNum;
-		String date = ""; // 요청일시
-		String CI = ""; // 연계정보(CI)
-		String DI = ""; // 중복가입확인정보(DI)
-		String phoneNo = ""; // 휴대폰번호
-		String phoneCorp = ""; // 이동통신사
-		String birthDay = ""; // 생년월일
-		String gender = ""; // 성별
-		String nation = ""; // 내국인
-		String name = ""; // 성명
-		String M_name = ""; // 미성년자 성명
-		String M_birthDay = ""; // 미성년자 생년월일
-		String M_Gender = ""; // 미성년자 성별
-		String M_nation = ""; // 미성년자 내외국인
-		String result = ""; // 결과값
-
-		String certMet = ""; // 인증방법
-		String ip = ""; // ip주소
-		String plusInfo = "";
-
-		String encPara = "";
-		String encMsg1 = "";
-		String encMsg2 = "";
-		String msgChk = "";
-
-		com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
-
-		// 02. 1차 복호화
-		// 수신된 certNum를 이용하여 복호화
-		rec_cert = seed.getDec(rec_cert, k_certNum);
-
-		// 03. 1차 파싱
-		int inf1 = rec_cert.indexOf("/", 0);
-		int inf2 = rec_cert.indexOf("/", inf1 + 1);
-
-		encPara = rec_cert.substring(0, inf1); // 암호화된 통합 파라미터
-		encMsg1 = rec_cert.substring(inf1 + 1, inf2); // 암호화된 통합 파라미터의 Hash값
-
-		// 04. 위변조 검증
-		encMsg2 = seed.getMsg(encPara);
-		kmcVO.setEncMsg2(encMsg2);
-		if (encMsg2.equals(encMsg1)) {
-			msgChk = "Y";
-		}
-
-		if (!"Y".equals(msgChk)) {
-			errMessage = "비정상접근입니다.";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		// 05. 2차 복호화
-		rec_cert = seed.getDec(encPara, k_certNum);
-		kmcVO.setRecCert(rec_cert);
-		// 06. 2차 파싱
-		int info1 = rec_cert.indexOf("/", 0);
-		int info2 = rec_cert.indexOf("/", info1 + 1);
-		int info3 = rec_cert.indexOf("/", info2 + 1);
-		int info4 = rec_cert.indexOf("/", info3 + 1);
-		int info5 = rec_cert.indexOf("/", info4 + 1);
-		int info6 = rec_cert.indexOf("/", info5 + 1);
-		int info7 = rec_cert.indexOf("/", info6 + 1);
-		int info8 = rec_cert.indexOf("/", info7 + 1);
-		int info9 = rec_cert.indexOf("/", info8 + 1);
-		int info10 = rec_cert.indexOf("/", info9 + 1);
-		int info11 = rec_cert.indexOf("/", info10 + 1);
-		int info12 = rec_cert.indexOf("/", info11 + 1);
-		int info13 = rec_cert.indexOf("/", info12 + 1);
-		int info14 = rec_cert.indexOf("/", info13 + 1);
-		int info15 = rec_cert.indexOf("/", info14 + 1);
-		int info16 = rec_cert.indexOf("/", info15 + 1);
-		int info17 = rec_cert.indexOf("/", info16 + 1);
-		int info18 = rec_cert.indexOf("/", info17 + 1);
-
-		certNum = rec_cert.substring(0, info1);
-		kmcVO.setCertNum(certNum);
-		date = rec_cert.substring(info1 + 1, info2);
-		kmcVO.setDate(date);
-		CI = rec_cert.substring(info2 + 1, info3);
-		kmcVO.setCI(CI);
-		phoneNo = rec_cert.substring(info3 + 1, info4);
-		kmcVO.setPhoneNo(phoneNo);
-		phoneCorp = rec_cert.substring(info4 + 1, info5);
-		kmcVO.setPhoneCorp(phoneCorp);
-		birthDay = rec_cert.substring(info5 + 1, info6);
-		kmcVO.setBirthDay(birthDay);
-		gender = rec_cert.substring(info6 + 1, info7);
-		kmcVO.setGender(gender);
-		nation = rec_cert.substring(info7 + 1, info8);
-		kmcVO.setNation(nation);
-		name = rec_cert.substring(info8 + 1, info9);
-		kmcVO.setName(name);
-		result = rec_cert.substring(info9 + 1, info10);
-		kmcVO.setResult(result);
-		certMet = rec_cert.substring(info10 + 1, info11);
-		kmcVO.setCertMet(certMet);
-		ip = rec_cert.substring(info11 + 1, info12);
-		kmcVO.setIp(ip);
-		M_name = rec_cert.substring(info12 + 1, info13);
-		kmcVO.setMName(M_name);
-		M_birthDay = rec_cert.substring(info13 + 1, info14);
-		kmcVO.setMBirthDay(M_birthDay);
-		M_Gender = rec_cert.substring(info14 + 1, info15);
-		kmcVO.setMGender(M_Gender);
-		M_nation = rec_cert.substring(info15 + 1, info16);
-		kmcVO.setMNation(M_nation);
-		plusInfo = rec_cert.substring(info16 + 1, info17);
-		kmcVO.setPlusInfo(plusInfo);
-		DI = rec_cert.substring(info17 + 1, info18);
-		kmcVO.setDI(DI);
-
-		// 07. CI, DI 복호화
-		CI = seed.getDec(CI, k_certNum);
-		kmcVO.setCI(CI);
-		DI = seed.getDec(DI, k_certNum);
-		kmcVO.setDI(DI);
-
-		if ("Y".equals(result)) {
-
-		}
-
-		// --------------------------------------------------------------
-		String regex = "";
-		if (certNum.length() == 0 || certNum.length() > 40) {
-			errMessage = "요청번호 비정상.";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[0-9]*";
-		if (date.length() != 14 || !paramChk(regex, date)) {
-			errMessage = "요청일시";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[A-Z]*";
-		if (certMet.length() != 1 || !paramChk(regex, certMet)) {
-			errMessage = "본인인증방법 비정상" + certMet;
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[0-9]*";
-		if ((phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo)) {
-			errMessage = "휴대폰번호 비정상";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[A-Z]*";
-		if (phoneCorp.length() != 3 || !paramChk(regex, phoneCorp)) {
-			errMessage = "이동통신사 비정상";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[0-9]*";
-		if (birthDay.length() != 8 || !paramChk(regex, birthDay)) {
-			errMessage = "생년월일 비정상";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[0-9]*";
-		if (gender.length() != 1 || !paramChk(regex, gender)) {
-			errMessage = "성별 비정상";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[0-9]*";
-		if (nation.length() != 1 || !paramChk(regex, nation)) {
-			errMessage = "내/외국인 비정상";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[\\sA-Za-z가-�R.,-]*";
-		if (name.length() > 60 || !paramChk(regex, name)) {
-			errMessage = "성명 비정상";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[A-Z]*";
-		if (result.length() != 1 || !paramChk(regex, result)) {
-			errMessage = "결과값 비정상";
-			return returnPage(model, errMessage, kmcVO);
-		}
-
-		regex = "[\\sA-Za-z가-?.,-]*";
-		if (M_name.length() != 0) {
-			if (M_name.length() > 60 || !paramChk(regex, M_name)) {
-				errMessage = "미성년자 성명 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-		}
-
-		regex = "[0-9]*";
-		if (M_birthDay.length() != 0) {
-			if (M_birthDay.length() != 8 || !paramChk(regex, M_birthDay)) {
-				errMessage = "미성년자 생년월일  비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-		}
-
-		regex = "[0-9]*";
-		if (M_Gender.length() != 0) {
-			if (M_Gender.length() != 1 || !paramChk(regex, M_Gender)) {
-				errMessage = "미성년자 성별 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-		}
-
-		regex = "[0-9]*";
-		if (M_nation.length() != 0) {
-			if (M_nation.length() != 1 || !paramChk(regex, M_nation)) {
-				errMessage = "미성년자 내/외국인 비정상";
-				return returnPage(model, errMessage, kmcVO);
-			}
-		}
+		//kmc 본인인증 결과처리
+		kmcVO = kmcCertChecker.authCertResult(request, response, model);
+		//kmc 본인인증 로그 처리
+		AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "IP등록");
+		
 		LoginVO loginVO = new LoginVO();
-		loginVO.setId(plusInfo);
+		loginVO.setId(kmcVO.getPlusInfo());
+		
 		loginVO = loginService.selectKMCInfo(loginVO);
-		String userIp = EgovClntInfo.getClntIP(request);
-		loginVO.setIp(ip);
+		loginVO.setIp(kmcVO.getIp());
 
 		loginService.insertMberIp(loginVO);
 
src/main/java/itn/let/uat/uia/web/EgovMypageController.java
--- src/main/java/itn/let/uat/uia/web/EgovMypageController.java
+++ src/main/java/itn/let/uat/uia/web/EgovMypageController.java
@@ -183,7 +183,7 @@
 	private CertIpService certIpService;
 	
 	@Resource(name = "KmcCertChecker")
-	private KmcCertChecker kmcCertCheck;
+	private KmcCertChecker kmcCertChecker;
 	
 	/**
 	 * 마이페이지 비밀번호 변경 탭
@@ -717,7 +717,7 @@
 	*/
 	@RequestMapping("/web/user/selectKmcMberInfoAjax.do")
 	public String selectKmcMberInfoAjax(
-		HttpServletRequest request, ModelMap model  
+		HttpServletRequest request, HttpServletResponse response, ModelMap model  
 		, @RequestParam Map<String, Object> commandMap
 		, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
 			
@@ -726,241 +726,14 @@
 		String mblDn = userManageService.selectUserMblDnById(loginVO.getId());
 		model.addAttribute("loginVO", loginVO);
 		
-		String errMessage = ""; //에러메세지
-		
-		String rec_cert      = "";  // 결과값(암호화)
-		String certNum       = "";  // certNum
-		
-		rec_cert = request.getParameter("rec_cert").trim();
-		certNum  = request.getParameter("certNum").trim(); 
-		
-		kmcVO.setRecCert(rec_cert);
-		kmcVO.setCertNum(certNum);
-		// 파라미터 유효성 검증
-		if( rec_cert.length() == 0 || certNum.length() == 0 ){
-			errMessage = "비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		
-		// 변수선언 --------------------------------------------------------------------------------------------------------
-		String k_certNum = "";			    // 파라미터로 수신한 요청번호
-		k_certNum = certNum;
-	    String date			= "";			// 요청일시
-		String CI	    	= "";			// 연계정보(CI)
-		String DI	    	= "";			// 중복가입확인정보(DI)
-	    String phoneNo		= "";			// 휴대폰번호
-		String phoneCorp	= "";			// 이동통신사
-		String birthDay		= "";			// 생년월일
-		String gender		= "";			// 성별
-		String nation		= "";			// 내국인
-		String name			= "";			// 성명
-		String M_name		= "";			// 미성년자 성명
-		String M_birthDay	= "";			// 미성년자 생년월일
-		String M_Gender		= "";			// 미성년자 성별
-		String M_nation		= "";			// 미성년자 내외국인
-	    String result		= "";			// 결과값
-
-	    String certMet		= "";			// 인증방법
-	    String ip			= "";			// ip주소
-		String plusInfo		= "";
-
-		String encPara		= "";
-		String encMsg1		= ""; 
-		String encMsg2		= "";
-		String msgChk       = "";
-		
-		com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
-		 
-		//02. 1차 복호화
-        //수신된 certNum를 이용하여 복호화
-        rec_cert  = seed.getDec(rec_cert, k_certNum);
-
-        //03. 1차 파싱
-        int inf1 = rec_cert.indexOf("/",0);
-        int inf2 = rec_cert.indexOf("/",inf1+1);
-
-		encPara  = rec_cert.substring(0,inf1);         //암호화된 통합 파라미터
-        encMsg1  = rec_cert.substring(inf1+1,inf2);    //암호화된 통합 파라미터의 Hash값
-
-		//04. 위변조 검증
-		encMsg2  = seed.getMsg(encPara);
-		kmcVO.setEncMsg2(encMsg2);
-        if(encMsg2.equals(encMsg1)){
-            msgChk="Y";
-        }
-        
-		if(!"Y".equals(msgChk)) {
-			errMessage = "비정상접근입니다.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		 //05. 2차 복호화
-		rec_cert  = seed.getDec(encPara, k_certNum);
-		kmcVO.setRecCert(rec_cert);
-        //06. 2차 파싱
-        int info1  = rec_cert.indexOf("/",0);
-        int info2  = rec_cert.indexOf("/",info1+1);
-        int info3  = rec_cert.indexOf("/",info2+1);
-        int info4  = rec_cert.indexOf("/",info3+1);
-        int info5  = rec_cert.indexOf("/",info4+1);
-        int info6  = rec_cert.indexOf("/",info5+1);
-        int info7  = rec_cert.indexOf("/",info6+1);
-        int info8  = rec_cert.indexOf("/",info7+1);
-		int info9  = rec_cert.indexOf("/",info8+1);
-		int info10 = rec_cert.indexOf("/",info9+1);
-		int info11 = rec_cert.indexOf("/",info10+1);
-		int info12 = rec_cert.indexOf("/",info11+1);
-		int info13 = rec_cert.indexOf("/",info12+1);
-		int info14 = rec_cert.indexOf("/",info13+1);
-		int info15 = rec_cert.indexOf("/",info14+1);
-		int info16 = rec_cert.indexOf("/",info15+1);
-		int info17 = rec_cert.indexOf("/",info16+1);
-		int info18 = rec_cert.indexOf("/",info17+1);
-
-		certNum		= rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
-		date		= rec_cert.substring(info1+1,info2); kmcVO.setDate(date); 
-		CI			= rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
-		phoneNo		= rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
-		phoneCorp	= rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
-		birthDay	= rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
-		gender		= rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
-		nation		= rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
-		name		= rec_cert.substring(info8+1,info9); kmcVO.setName(name);
-		result		= rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
-		certMet		= rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
-		ip			= rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
-		M_name		= rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
-		M_birthDay	= rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
-		M_Gender	= rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
-		M_nation	= rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
-		plusInfo	= rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
-		DI      	= rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
-
-		//07. CI, DI 복호화
-		CI  = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
-		DI  = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
-		
-		if("Y".equals(result)) {
-			
-		}
-		
-		//--------------------------------------------------------------
-		String regex = "";
-		if( certNum.length() == 0 || certNum.length() > 40){
-			errMessage = "요청번호 비정상.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( date.length() != 14 || !paramChk(regex, date) ){
-			errMessage = "요청일시";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[A-Z]*";
-		if( certMet.length() != 1 || !paramChk(regex, certMet) ){
-			errMessage = "본인인증방법 비정상" + certMet;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-
-		regex = "[0-9]*";
-		if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
-			errMessage = "휴대폰번호 비정상" ;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
-			errMessage = "이동통신사 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
-			errMessage = "생년월일 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( gender.length() != 1 || !paramChk(regex, gender) ){
-			errMessage = "성별 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( nation.length() != 1 || !paramChk(regex, nation) ){
-			errMessage = "내/외국인 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-�R.,-]*";
-		if( name.length() > 60 || !paramChk(regex, name) ){
-			errMessage = "성명 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( result.length() != 1 || !paramChk(regex, result) ){
-			errMessage = "결과값 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-?.,-]*";
-		if( M_name.length() != 0 ){
-			if( M_name.length() > 60 || !paramChk(regex, M_name) ){
-				errMessage = "미성년자 성명 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-		
-		regex = "[0-9]*";
-		if( M_birthDay.length() != 0 ){
-			if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
-				errMessage = "미성년자 생년월일  비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_Gender.length() != 0 ){
-			if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
-				errMessage = "미성년자 성별 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_nation.length() != 0 ){
-			if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
-				errMessage = "미성년자 내/외국인 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-		
-		
-		//KMC 본인인증 로그
-		AuthCertVO certVO = new AuthCertVO();
-		certVO.setMberId(kmcVO.getPlusInfo());
-		certVO.setCertNum(kmcVO.getCertNum());
-		certVO.setCertDate(kmcVO.getDate());
-		certVO.setCertDi(kmcVO.getDI());
-		certVO.setCertPhone(kmcVO.getPhoneNo());
-		certVO.setCertNation(kmcVO.getNation());
-		certVO.setCertName(kmcVO.getName());
-		certVO.setCertResult(kmcVO.getResult());
-		certVO.setCertType("KMC_회원정보 변경");
-		certVO.setCertIpaddr(kmcVO.getIp());
-		certVO.setBirthDay(kmcVO.getBirthDay());
-		certVO.setSexdstnCode(kmcVO.getGender());
-
-		//디비 테이블에 저장하기
-		mberManageService.insertCertInfoLog(certVO);
+		//kmc 본인인증 결과처리
+		kmcVO = kmcCertChecker.authCertResult(request, response, model);
+		//kmc 본인인증 로그 처리
+		AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_회원정보 변경");		
 		
 		//개인회원일 시 기존 DN가 본인인증 DN비고하여 본인 명의만 번호 변경 가능하게
 		if("p".equals(loginVO.getDept())) {
-			if(!mblDn.equals(DI)) {
+			if(!mblDn.equals(kmcVO.getDI())) {
 				kmcVO.setDnChk("N");
 			}
 		}
@@ -1465,7 +1238,7 @@
 				mberCertPhoneVO.setTrUrl("/web/user/selectKmcMberInfoAjax.do");
 				mberCertPhoneVO.setPlusInfo(loginVO.getId());
 				
-				AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
+				AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
 				modelAndView.addObject("certVO", certVO);
 			}
 			
@@ -1938,7 +1711,7 @@
 					mberCertPhoneVO.setPhoneNo(mjonMsgVO.getCallFrom());
 					mberCertPhoneVO.setPlusInfo(mjonMsgVO.getUserId()+ "§" + mjonMsgVO.getMyNameFlag());
 					
-					AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
+					AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
 					
 					modelAndView.addObject("certVO", certVO);
 					
@@ -1962,223 +1735,12 @@
 	*/
 	@RequestMapping("/web/user/selectPhoneNumberCertChkAjax.do")
 	public String selectPhoneNumberCertChk(
-		HttpServletRequest request, ModelMap model  
+		HttpServletRequest request, HttpServletResponse response, ModelMap model  
 		, @RequestParam Map<String, Object> commandMap
 		, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
-			
-		String errMessage = ""; //에러메세지
-		
-		String rec_cert      = "";  // 결과값(암호화)
-		String certNum       = "";  // certNum
-		
-		rec_cert = request.getParameter("rec_cert").trim();
-		certNum  = request.getParameter("certNum").trim(); 
-		
-		kmcVO.setRecCert(rec_cert);
-		kmcVO.setCertNum(certNum);
-		// 파라미터 유효성 검증
-		if( rec_cert.length() == 0 || certNum.length() == 0 ){
-			errMessage = "비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		
-		// 변수선언 --------------------------------------------------------------------------------------------------------
-		String k_certNum = "";			    // 파라미터로 수신한 요청번호
-		k_certNum = certNum;
-	    String date			= "";			// 요청일시
-		String CI	    	= "";			// 연계정보(CI)
-		String DI	    	= "";			// 중복가입확인정보(DI)
-	    String phoneNo		= "";			// 휴대폰번호
-		String phoneCorp	= "";			// 이동통신사
-		String birthDay		= "";			// 생년월일
-		String gender		= "";			// 성별
-		String nation		= "";			// 내국인
-		String name			= "";			// 성명
-		String M_name		= "";			// 미성년자 성명
-		String M_birthDay	= "";			// 미성년자 생년월일
-		String M_Gender		= "";			// 미성년자 성별
-		String M_nation		= "";			// 미성년자 내외국인
-	    String result		= "";			// 결과값
 
-	    String certMet		= "";			// 인증방법
-	    String ip			= "";			// ip주소
-		String plusInfo		= "";
-
-		String encPara		= "";
-		String encMsg1		= ""; 
-		String encMsg2		= "";
-		String msgChk       = "";
-		
-		IcertSecuManager seed = new IcertSecuManager();
-		 
-		//02. 1차 복호화
-        //수신된 certNum를 이용하여 복호화
-        rec_cert  = seed.getDec(rec_cert, k_certNum);
-
-        //03. 1차 파싱
-        int inf1 = rec_cert.indexOf("/",0);
-        int inf2 = rec_cert.indexOf("/",inf1+1);
-
-		encPara  = rec_cert.substring(0,inf1);         //암호화된 통합 파라미터
-        encMsg1  = rec_cert.substring(inf1+1,inf2);    //암호화된 통합 파라미터의 Hash값
-
-		//04. 위변조 검증
-		encMsg2  = seed.getMsg(encPara);
-		kmcVO.setEncMsg2(encMsg2);
-        if(encMsg2.equals(encMsg1)){
-            msgChk="Y";
-        }
-        
-		if(!"Y".equals(msgChk)) {
-			errMessage = "비정상접근입니다.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		 //05. 2차 복호화
-		rec_cert  = seed.getDec(encPara, k_certNum);
-		kmcVO.setRecCert(rec_cert);
-        //06. 2차 파싱
-        int info1  = rec_cert.indexOf("/",0);
-        int info2  = rec_cert.indexOf("/",info1+1);
-        int info3  = rec_cert.indexOf("/",info2+1);
-        int info4  = rec_cert.indexOf("/",info3+1);
-        int info5  = rec_cert.indexOf("/",info4+1);
-        int info6  = rec_cert.indexOf("/",info5+1);
-        int info7  = rec_cert.indexOf("/",info6+1);
-        int info8  = rec_cert.indexOf("/",info7+1);
-		int info9  = rec_cert.indexOf("/",info8+1);
-		int info10 = rec_cert.indexOf("/",info9+1);
-		int info11 = rec_cert.indexOf("/",info10+1);
-		int info12 = rec_cert.indexOf("/",info11+1);
-		int info13 = rec_cert.indexOf("/",info12+1);
-		int info14 = rec_cert.indexOf("/",info13+1);
-		int info15 = rec_cert.indexOf("/",info14+1);
-		int info16 = rec_cert.indexOf("/",info15+1);
-		int info17 = rec_cert.indexOf("/",info16+1);
-		int info18 = rec_cert.indexOf("/",info17+1);
-
-		certNum		= rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
-		date		= rec_cert.substring(info1+1,info2); kmcVO.setDate(date); 
-		CI			= rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
-		phoneNo		= rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
-		phoneCorp	= rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
-		birthDay	= rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
-		gender		= rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
-		nation		= rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
-		name		= rec_cert.substring(info8+1,info9); kmcVO.setName(name);
-		result		= rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
-		certMet		= rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
-		ip			= rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
-		M_name		= rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
-		M_birthDay	= rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
-		M_Gender	= rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
-		M_nation	= rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
-		plusInfo	= rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
-		DI      	= rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
-
-		//07. CI, DI 복호화
-		CI  = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
-		DI  = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
-		
-		if("Y".equals(result)) {
-			
-		}
-		
-		//--------------------------------------------------------------
-		String regex = "";
-		if( certNum.length() == 0 || certNum.length() > 40){
-			errMessage = "요청번호 비정상.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( date.length() != 14 || !paramChk(regex, date) ){
-			errMessage = "요청일시";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[A-Z]*";
-		if( certMet.length() != 1 || !paramChk(regex, certMet) ){
-			errMessage = "본인인증방법 비정상" + certMet;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-
-		regex = "[0-9]*";
-		if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
-			errMessage = "휴대폰번호 비정상" ;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
-			errMessage = "이동통신사 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
-			errMessage = "생년월일 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( gender.length() != 1 || !paramChk(regex, gender) ){
-			errMessage = "성별 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( nation.length() != 1 || !paramChk(regex, nation) ){
-			errMessage = "내/외국인 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-�R.,-]*";
-		if( name.length() > 60 || !paramChk(regex, name) ){
-			errMessage = "성명 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( result.length() != 1 || !paramChk(regex, result) ){
-			errMessage = "결과값 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-?.,-]*";
-		if( M_name.length() != 0 ){
-			if( M_name.length() > 60 || !paramChk(regex, M_name) ){
-				errMessage = "미성년자 성명 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-		
-		regex = "[0-9]*";
-		if( M_birthDay.length() != 0 ){
-			if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
-				errMessage = "미성년자 생년월일  비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_Gender.length() != 0 ){
-			if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
-				errMessage = "미성년자 성별 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_nation.length() != 0 ){
-			if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
-				errMessage = "미성년자 내/외국인 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-		
+		//kmc 본인인증 결과처리
+		kmcVO = kmcCertChecker.authCertResult(request, response, model);
 		/*
 		 * plusInfo(본인인증 추가파라미터)
 		 * 구분지 "§"
@@ -2188,32 +1750,17 @@
 		 * */
 		String tmp = kmcVO.getPlusInfo();
 		String[] tmpResult = tmp.split("§");
+		kmcVO.setPlusInfo(tmpResult[0]);
+		//kmc 본인인증 로그 처리
+		AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "KMC_발신번호 등록 인증");	
 		
-		//KMC 본인인증 로그
-		AuthCertVO certVO = new AuthCertVO();
-		
-		certVO.setMberId(tmpResult[0]);
-		certVO.setCertNum(kmcVO.getCertNum());
-		certVO.setCertDate(kmcVO.getDate());
-		certVO.setCertDi(kmcVO.getDI());
-		certVO.setCertPhone(kmcVO.getPhoneNo());
-		certVO.setCertNation(kmcVO.getNation());
-		certVO.setCertName(kmcVO.getName());
-		certVO.setCertResult(kmcVO.getResult());
-		certVO.setCertType("KMC_발신번호 등록 인증");
-		certVO.setCertIpaddr(kmcVO.getIp());
-		certVO.setBirthDay(kmcVO.getBirthDay());
-		certVO.setSexdstnCode(kmcVO.getGender());
-
-		//디비 테이블에 저장하기
-		mberManageService.insertCertInfoLog(certVO);
 		
 		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
 		
 		String mblDn = userManageService.selectUserMblDnById(loginVO.getId());
 		
 		String resultDnFlag = "N";
-		if(DI.equals(mblDn)) {
+		if((kmcVO.getDI()).equals(mblDn)) {
 			resultDnFlag = "Y";
 		}
 		
@@ -2295,14 +1842,9 @@
 		model.addAttribute("resultNameChk", resultNameChk);
 		//=======================끝=========================
 		
-		String birthDay_tmp = "";
-		try {
-			birthDay_tmp = kmcVO.getMBirthDay().length() != 0 ? kmcVO.getMBirthDay() : kmcVO.getBirthDay();
-		} catch (Exception e) {
-			birthDay_tmp = birthDay;
-		}
 		model.addAttribute("CI", kmcVO.getCI());
-		model.addAttribute("birthDay", birthDay_tmp);
+		model.addAttribute("birthDay", kmcVO.getBirthDay());
+		model.addAttribute("name", kmcVO.getName());
 		
 		return "web/user/selectPhoneNumberCertChkReq";
 	}
@@ -2326,232 +1868,25 @@
 	*/
 	@RequestMapping("/web/user/insertPhoneSendNumber.do")
 	public String insertPhoneSendNumber(
-		HttpServletRequest request, ModelMap model  
+		HttpServletRequest request, HttpServletResponse response, ModelMap model  
 		, @RequestParam Map<String, Object> commandMap
 		, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
-			
-		String errMessage = ""; //에러메세지
+
 		
-		String rec_cert      = "";  // 결과값(암호화)
-		String certNum       = "";  // certNum
-		
-		rec_cert = request.getParameter("rec_cert").trim();
-		certNum  = request.getParameter("certNum").trim(); 
-		
-		kmcVO.setRecCert(rec_cert);
-		kmcVO.setCertNum(certNum);
-		// 파라미터 유효성 검증
-		if( rec_cert.length() == 0 || certNum.length() == 0 ){
-			errMessage = "비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		
-		// 변수선언 --------------------------------------------------------------------------------------------------------
-		String k_certNum = "";			    // 파라미터로 수신한 요청번호
-		k_certNum = certNum;
-	    String date			= "";			// 요청일시
-		String CI	    	= "";			// 연계정보(CI)
-		String DI	    	= "";			// 중복가입확인정보(DI)
-	    String phoneNo		= "";			// 휴대폰번호
-		String phoneCorp	= "";			// 이동통신사
-		String birthDay		= "";			// 생년월일
-		String gender		= "";			// 성별
-		String nation		= "";			// 내국인
-		String name			= "";			// 성명
-		String M_name		= "";			// 미성년자 성명
-		String M_birthDay	= "";			// 미성년자 생년월일
-		String M_Gender		= "";			// 미성년자 성별
-		String M_nation		= "";			// 미성년자 내외국인
-	    String result		= "";			// 결과값
-
-	    String certMet		= "";			// 인증방법
-	    String ip			= "";			// ip주소
-		String plusInfo		= "";
-
-		String encPara		= "";
-		String encMsg1		= ""; 
-		String encMsg2		= "";
-		String msgChk       = "";
-		
-		IcertSecuManager seed = new IcertSecuManager();
-		 
-		//02. 1차 복호화
-        //수신된 certNum를 이용하여 복호화
-        rec_cert  = seed.getDec(rec_cert, k_certNum);
-
-        //03. 1차 파싱
-        int inf1 = rec_cert.indexOf("/",0);
-        int inf2 = rec_cert.indexOf("/",inf1+1);
-
-		encPara  = rec_cert.substring(0,inf1);         //암호화된 통합 파라미터
-        encMsg1  = rec_cert.substring(inf1+1,inf2);    //암호화된 통합 파라미터의 Hash값
-
-		//04. 위변조 검증
-		encMsg2  = seed.getMsg(encPara);
-		kmcVO.setEncMsg2(encMsg2);
-        if(encMsg2.equals(encMsg1)){
-            msgChk="Y";
-        }
-        
-		if(!"Y".equals(msgChk)) {
-			errMessage = "비정상접근입니다.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		 //05. 2차 복호화
-		rec_cert  = seed.getDec(encPara, k_certNum);
-		kmcVO.setRecCert(rec_cert);
-        //06. 2차 파싱
-        int info1  = rec_cert.indexOf("/",0);
-        int info2  = rec_cert.indexOf("/",info1+1);
-        int info3  = rec_cert.indexOf("/",info2+1);
-        int info4  = rec_cert.indexOf("/",info3+1);
-        int info5  = rec_cert.indexOf("/",info4+1);
-        int info6  = rec_cert.indexOf("/",info5+1);
-        int info7  = rec_cert.indexOf("/",info6+1);
-        int info8  = rec_cert.indexOf("/",info7+1);
-		int info9  = rec_cert.indexOf("/",info8+1);
-		int info10 = rec_cert.indexOf("/",info9+1);
-		int info11 = rec_cert.indexOf("/",info10+1);
-		int info12 = rec_cert.indexOf("/",info11+1);
-		int info13 = rec_cert.indexOf("/",info12+1);
-		int info14 = rec_cert.indexOf("/",info13+1);
-		int info15 = rec_cert.indexOf("/",info14+1);
-		int info16 = rec_cert.indexOf("/",info15+1);
-		int info17 = rec_cert.indexOf("/",info16+1);
-		int info18 = rec_cert.indexOf("/",info17+1);
-
-		certNum		= rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
-		date		= rec_cert.substring(info1+1,info2); kmcVO.setDate(date); 
-		CI			= rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
-		phoneNo		= rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
-		phoneCorp	= rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
-		birthDay	= rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
-		gender		= rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
-		nation		= rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
-		name		= rec_cert.substring(info8+1,info9); kmcVO.setName(name);
-		result		= rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
-		certMet		= rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
-		ip			= rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
-		M_name		= rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
-		M_birthDay	= rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
-		M_Gender	= rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
-		M_nation	= rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
-		plusInfo	= rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
-		DI      	= rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
-
-		//07. CI, DI 복호화
-		CI  = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
-		DI  = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
-		
-		if("Y".equals(result)) {
-			
-		}
-		
-		//--------------------------------------------------------------
-		String regex = "";
-		if( certNum.length() == 0 || certNum.length() > 40){
-			errMessage = "요청번호 비정상.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( date.length() != 14 || !paramChk(regex, date) ){
-			errMessage = "요청일시";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[A-Z]*";
-		if( certMet.length() != 1 || !paramChk(regex, certMet) ){
-			errMessage = "본인인증방법 비정상" + certMet;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-
-		regex = "[0-9]*";
-		if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
-			errMessage = "휴대폰번호 비정상" ;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
-			errMessage = "이동통신사 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
-			errMessage = "생년월일 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( gender.length() != 1 || !paramChk(regex, gender) ){
-			errMessage = "성별 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( nation.length() != 1 || !paramChk(regex, nation) ){
-			errMessage = "내/외국인 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-�R.,-]*";
-		if( name.length() > 60 || !paramChk(regex, name) ){
-			errMessage = "성명 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( result.length() != 1 || !paramChk(regex, result) ){
-			errMessage = "결과값 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-?.,-]*";
-		if( M_name.length() != 0 ){
-			if( M_name.length() > 60 || !paramChk(regex, M_name) ){
-				errMessage = "미성년자 성명 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-		
-		regex = "[0-9]*";
-		if( M_birthDay.length() != 0 ){
-			if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
-				errMessage = "미성년자 생년월일  비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_Gender.length() != 0 ){
-			if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
-				errMessage = "미성년자 성별 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_nation.length() != 0 ){
-			if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
-				errMessage = "미성년자 내/외국인 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
+		//kmc 본인인증 결과처리
+		kmcVO = kmcCertChecker.authCertResult(request, response, model);
+		//kmc 본인인증 로그 처리
+		AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "휴대폰 인증 발신번호 등록");
 		
 		MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
 		
-		mjPhoneMemberVO.setUserId(plusInfo);
+		mjPhoneMemberVO.setUserId(kmcVO.getPlusInfo());
 		mjPhoneMemberVO.setPhmType("01");
 		mjPhoneMemberVO.setPhmAuthType("01");
-		mjPhoneMemberVO.setFrstRegisterId(plusInfo);
-		mjPhoneMemberVO.setLastUpdusrId(plusInfo);
-		mjPhoneMemberVO.setPhoneNumber(phoneNo);
-		mjPhoneMemberVO.setUserName(name);
+		mjPhoneMemberVO.setFrstRegisterId(kmcVO.getPlusInfo());
+		mjPhoneMemberVO.setLastUpdusrId(kmcVO.getPlusInfo());
+		mjPhoneMemberVO.setPhoneNumber(kmcVO.getPhoneNo());
+		mjPhoneMemberVO.setUserName(kmcVO.getName());
 		mjPhoneMemberVO.setAuthYn("Y");
 		mjonMsgService.insertSendNumber(mjPhoneMemberVO);
 		
@@ -2953,7 +2288,7 @@
 		mberCertPhoneVO.setTrUrl("/web/user/selectMberSecessionAjax.do");
 		mberCertPhoneVO.setName(name);
 		
-		AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
+		AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
 		model.addAttribute("certVO", certVO);
 		
 		return "web/user/mberSecession";
@@ -3054,7 +2389,7 @@
 				mberCertPhoneVO.setTrUrl("/web/user/selectSecurityAuthn.do");
 				mberCertPhoneVO.setPlusInfo(loginVO.getId());
 				
-				AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request);
+				AuthCertVO certVO = kmcCertChecker.authCertCheck(mberCertPhoneVO, request);
 				
 				model.addAttribute("certVO", certVO);
 			}
@@ -3132,232 +2467,24 @@
 	*/
 	@RequestMapping("/web/user/selectMberSecessionAjax.do")
 	public String selectMberSecessionAjax(
-		HttpServletRequest request, ModelMap model  
+		HttpServletRequest request, HttpServletResponse response, ModelMap model  
 		, @RequestParam Map<String, Object> commandMap
 		, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
 			
-		String errMessage = ""; //에러메세지
-		
-		String rec_cert      = "";  // 결과값(암호화)
-		String certNum       = "";  // certNum
-		
-		rec_cert = request.getParameter("rec_cert").trim();
-		certNum  = request.getParameter("certNum").trim(); 
-		
-		kmcVO.setRecCert(rec_cert);
-		kmcVO.setCertNum(certNum);
-		// 파라미터 유효성 검증
-		if( rec_cert.length() == 0 || certNum.length() == 0 ){
-			errMessage = "비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		
-		// 변수선언 --------------------------------------------------------------------------------------------------------
-		String k_certNum = "";			    // 파라미터로 수신한 요청번호
-		k_certNum = certNum;
-	    String date			= "";			// 요청일시
-		String CI	    	= "";			// 연계정보(CI)
-		String DI	    	= "";			// 중복가입확인정보(DI)
-	    String phoneNo		= "";			// 휴대폰번호
-		String phoneCorp	= "";			// 이동통신사
-		String birthDay		= "";			// 생년월일
-		String gender		= "";			// 성별
-		String nation		= "";			// 내국인
-		String name			= "";			// 성명
-		String M_name		= "";			// 미성년자 성명
-		String M_birthDay	= "";			// 미성년자 생년월일
-		String M_Gender		= "";			// 미성년자 성별
-		String M_nation		= "";			// 미성년자 내외국인
-	    String result		= "";			// 결과값
-
-	    String certMet		= "";			// 인증방법
-	    String ip			= "";			// ip주소
-		String plusInfo		= "";
-
-		String encPara		= "";
-		String encMsg1		= ""; 
-		String encMsg2		= "";
-		String msgChk       = "";
-		
-		com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
-		 
-		//02. 1차 복호화
-        //수신된 certNum를 이용하여 복호화
-        rec_cert  = seed.getDec(rec_cert, k_certNum);
-
-        //03. 1차 파싱
-        int inf1 = rec_cert.indexOf("/",0);
-        int inf2 = rec_cert.indexOf("/",inf1+1);
-
-		encPara  = rec_cert.substring(0,inf1);         //암호화된 통합 파라미터
-        encMsg1  = rec_cert.substring(inf1+1,inf2);    //암호화된 통합 파라미터의 Hash값
-
-		//04. 위변조 검증
-		encMsg2  = seed.getMsg(encPara);
-		kmcVO.setEncMsg2(encMsg2);
-        if(encMsg2.equals(encMsg1)){
-            msgChk="Y";
-        }
-        
-		if(!"Y".equals(msgChk)) {
-			errMessage = "비정상접근입니다.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		 //05. 2차 복호화
-		rec_cert  = seed.getDec(encPara, k_certNum);
-		kmcVO.setRecCert(rec_cert);
-        //06. 2차 파싱
-        int info1  = rec_cert.indexOf("/",0);
-        int info2  = rec_cert.indexOf("/",info1+1);
-        int info3  = rec_cert.indexOf("/",info2+1);
-        int info4  = rec_cert.indexOf("/",info3+1);
-        int info5  = rec_cert.indexOf("/",info4+1);
-        int info6  = rec_cert.indexOf("/",info5+1);
-        int info7  = rec_cert.indexOf("/",info6+1);
-        int info8  = rec_cert.indexOf("/",info7+1);
-		int info9  = rec_cert.indexOf("/",info8+1);
-		int info10 = rec_cert.indexOf("/",info9+1);
-		int info11 = rec_cert.indexOf("/",info10+1);
-		int info12 = rec_cert.indexOf("/",info11+1);
-		int info13 = rec_cert.indexOf("/",info12+1);
-		int info14 = rec_cert.indexOf("/",info13+1);
-		int info15 = rec_cert.indexOf("/",info14+1);
-		int info16 = rec_cert.indexOf("/",info15+1);
-		int info17 = rec_cert.indexOf("/",info16+1);
-		int info18 = rec_cert.indexOf("/",info17+1);
-
-		certNum		= rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
-		date		= rec_cert.substring(info1+1,info2); kmcVO.setDate(date); 
-		CI			= rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
-		phoneNo		= rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
-		phoneCorp	= rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
-		birthDay	= rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
-		gender		= rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
-		nation		= rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
-		name		= rec_cert.substring(info8+1,info9); kmcVO.setName(name);
-		result		= rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
-		certMet		= rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
-		ip			= rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
-		M_name		= rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
-		M_birthDay	= rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
-		M_Gender	= rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
-		M_nation	= rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
-		plusInfo	= rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
-		DI      	= rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
-
-		//07. CI, DI 복호화
-		CI  = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
-		DI  = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
-		
-		if("Y".equals(result)) {
-			
-		}
-		
-		//--------------------------------------------------------------
-		String regex = "";
-		if( certNum.length() == 0 || certNum.length() > 40){
-			errMessage = "요청번호 비정상.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( date.length() != 14 || !paramChk(regex, date) ){
-			errMessage = "요청일시";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[A-Z]*";
-		if( certMet.length() != 1 || !paramChk(regex, certMet) ){
-			errMessage = "본인인증방법 비정상" + certMet;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-
-		regex = "[0-9]*";
-		if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
-			errMessage = "휴대폰번호 비정상" ;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
-			errMessage = "이동통신사 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
-			errMessage = "생년월일 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( gender.length() != 1 || !paramChk(regex, gender) ){
-			errMessage = "성별 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( nation.length() != 1 || !paramChk(regex, nation) ){
-			errMessage = "내/외국인 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-�R.,-]*";
-		if( name.length() > 60 || !paramChk(regex, name) ){
-			errMessage = "성명 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( result.length() != 1 || !paramChk(regex, result) ){
-			errMessage = "결과값 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-?.,-]*";
-		if( M_name.length() != 0 ){
-			if( M_name.length() > 60 || !paramChk(regex, M_name) ){
-				errMessage = "미성년자 성명 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-		
-		regex = "[0-9]*";
-		if( M_birthDay.length() != 0 ){
-			if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
-				errMessage = "미성년자 생년월일  비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_Gender.length() != 0 ){
-			if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
-				errMessage = "미성년자 성별 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_nation.length() != 0 ){
-			if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
-				errMessage = "미성년자 내/외국인 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
+		//kmc 본인인증 결과처리
+		kmcVO = kmcCertChecker.authCertResult(request, response, model);
+		//kmc 본인인증 로그 처리
+		AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "회원탈퇴 본인인증");
 		
 		MjPhoneMemberVO mjPhoneMemberVO = new MjPhoneMemberVO();
 		
-		mjPhoneMemberVO.setUserId(plusInfo);
+		mjPhoneMemberVO.setUserId(kmcVO.getPlusInfo());
 		mjPhoneMemberVO.setPhmType("01");
 		mjPhoneMemberVO.setPhmAuthType("01");
-		mjPhoneMemberVO.setFrstRegisterId(plusInfo);
-		mjPhoneMemberVO.setLastUpdusrId(plusInfo);
-		mjPhoneMemberVO.setPhoneNumber(phoneNo);
-		mjPhoneMemberVO.setUserName(name);
+		mjPhoneMemberVO.setFrstRegisterId(kmcVO.getPlusInfo());
+		mjPhoneMemberVO.setLastUpdusrId(kmcVO.getPlusInfo());
+		mjPhoneMemberVO.setPhoneNumber(kmcVO.getPhoneNo());
+		mjPhoneMemberVO.setUserName(kmcVO.getName());
 		mjPhoneMemberVO.setAuthYn("Y");
 		mjonMsgService.insertSendNumber(mjPhoneMemberVO);
 		
@@ -3662,7 +2789,7 @@
 	*/
 	@RequestMapping("/web/user/selectSecurityAuthn.do")
 	public String selectSecurityAuthn(
-		HttpServletRequest request, ModelMap model  
+		HttpServletRequest request, HttpServletResponse response, ModelMap model  
 		, @RequestParam Map<String, Object> commandMap
 		, @ModelAttribute("searchVO") KmcVO kmcVO ) throws Exception {
 			
@@ -3671,243 +2798,13 @@
 		String mblDn = userManageService.selectUserMblDnById(loginVO.getId());
 		model.addAttribute("loginVO", loginVO);
 		
-		String errMessage = ""; //에러메세지
-		
-		String rec_cert      = "";  // 결과값(암호화)
-		String certNum       = "";  // certNum
-		
-		rec_cert = request.getParameter("rec_cert").trim();
-		certNum  = request.getParameter("certNum").trim(); 
-		
-		kmcVO.setRecCert(rec_cert);
-		kmcVO.setCertNum(certNum);
-		// 파라미터 유효성 검증
-		if( rec_cert.length() == 0 || certNum.length() == 0 ){
-			errMessage = "비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		
-		// 변수선언 --------------------------------------------------------------------------------------------------------
-		String k_certNum = "";			    // 파라미터로 수신한 요청번호
-		k_certNum = certNum;
-	    String date			= "";			// 요청일시
-		String CI	    	= "";			// 연계정보(CI)
-		String DI	    	= "";			// 중복가입확인정보(DI)
-	    String phoneNo		= "";			// 휴대폰번호
-		String phoneCorp	= "";			// 이동통신사
-		String birthDay		= "";			// 생년월일
-		String gender		= "";			// 성별
-		String nation		= "";			// 내국인
-		String name			= "";			// 성명
-		String M_name		= "";			// 미성년자 성명
-		String M_birthDay	= "";			// 미성년자 생년월일
-		String M_Gender		= "";			// 미성년자 성별
-		String M_nation		= "";			// 미성년자 내외국인
-	    String result		= "";			// 결과값
-
-	    String certMet		= "";			// 인증방법
-	    String ip			= "";			// ip주소
-		String plusInfo		= "";
-
-		String encPara		= "";
-		String encMsg1		= ""; 
-		String encMsg2		= "";
-		String msgChk       = "";
-		
-		com.icert.comm.secu.IcertSecuManager seed = new com.icert.comm.secu.IcertSecuManager();
-		 
-		//02. 1차 복호화
-        //수신된 certNum를 이용하여 복호화
-        rec_cert  = seed.getDec(rec_cert, k_certNum);
-
-        //03. 1차 파싱
-        int inf1 = rec_cert.indexOf("/",0);
-        int inf2 = rec_cert.indexOf("/",inf1+1);
-
-		encPara  = rec_cert.substring(0,inf1);         //암호화된 통합 파라미터
-        encMsg1  = rec_cert.substring(inf1+1,inf2);    //암호화된 통합 파라미터의 Hash값
-
-		//04. 위변조 검증
-		encMsg2  = seed.getMsg(encPara);
-		kmcVO.setEncMsg2(encMsg2);
-        if(encMsg2.equals(encMsg1)){
-            msgChk="Y";
-        }
-        
-		if(!"Y".equals(msgChk)) {
-			errMessage = "비정상접근입니다.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		 //05. 2차 복호화
-		rec_cert  = seed.getDec(encPara, k_certNum);
-		kmcVO.setRecCert(rec_cert);
-        //06. 2차 파싱
-        int info1  = rec_cert.indexOf("/",0);
-        int info2  = rec_cert.indexOf("/",info1+1);
-        int info3  = rec_cert.indexOf("/",info2+1);
-        int info4  = rec_cert.indexOf("/",info3+1);
-        int info5  = rec_cert.indexOf("/",info4+1);
-        int info6  = rec_cert.indexOf("/",info5+1);
-        int info7  = rec_cert.indexOf("/",info6+1);
-        int info8  = rec_cert.indexOf("/",info7+1);
-		int info9  = rec_cert.indexOf("/",info8+1);
-		int info10 = rec_cert.indexOf("/",info9+1);
-		int info11 = rec_cert.indexOf("/",info10+1);
-		int info12 = rec_cert.indexOf("/",info11+1);
-		int info13 = rec_cert.indexOf("/",info12+1);
-		int info14 = rec_cert.indexOf("/",info13+1);
-		int info15 = rec_cert.indexOf("/",info14+1);
-		int info16 = rec_cert.indexOf("/",info15+1);
-		int info17 = rec_cert.indexOf("/",info16+1);
-		int info18 = rec_cert.indexOf("/",info17+1);
-
-		certNum		= rec_cert.substring(0,info1); kmcVO.setCertNum(certNum);
-		date		= rec_cert.substring(info1+1,info2); kmcVO.setDate(date); 
-		CI			= rec_cert.substring(info2+1,info3); kmcVO.setCI(CI);
-		phoneNo		= rec_cert.substring(info3+1,info4); kmcVO.setPhoneNo(phoneNo);
-		phoneCorp	= rec_cert.substring(info4+1,info5); kmcVO.setPhoneCorp(phoneCorp);
-		birthDay	= rec_cert.substring(info5+1,info6); kmcVO.setBirthDay(birthDay);
-		gender		= rec_cert.substring(info6+1,info7); kmcVO.setGender(gender);
-		nation		= rec_cert.substring(info7+1,info8); kmcVO.setNation(nation);
-		name		= rec_cert.substring(info8+1,info9); kmcVO.setName(name);
-		result		= rec_cert.substring(info9+1,info10); kmcVO.setResult(result);
-		certMet		= rec_cert.substring(info10+1,info11); kmcVO.setCertMet(certMet);
-		ip			= rec_cert.substring(info11+1,info12); kmcVO.setIp(ip);
-		M_name		= rec_cert.substring(info12+1,info13); kmcVO.setMName(M_name);
-		M_birthDay	= rec_cert.substring(info13+1,info14); kmcVO.setMBirthDay(M_birthDay);
-		M_Gender	= rec_cert.substring(info14+1,info15); kmcVO.setMGender(M_Gender);
-		M_nation	= rec_cert.substring(info15+1,info16); kmcVO.setMNation(M_nation);
-		plusInfo	= rec_cert.substring(info16+1,info17); kmcVO.setPlusInfo(plusInfo);
-		DI      	= rec_cert.substring(info17+1,info18); kmcVO.setDI(DI);
-
-		//07. CI, DI 복호화
-		CI  = seed.getDec(CI, k_certNum); kmcVO.setCI(CI);
-		DI  = seed.getDec(DI, k_certNum); kmcVO.setDI(DI);
-		
-		if("Y".equals(result)) {
-			
-		}
-		
-		//--------------------------------------------------------------
-		String regex = "";
-		if( certNum.length() == 0 || certNum.length() > 40){
-			errMessage = "요청번호 비정상.";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( date.length() != 14 || !paramChk(regex, date) ){
-			errMessage = "요청일시";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[A-Z]*";
-		if( certMet.length() != 1 || !paramChk(regex, certMet) ){
-			errMessage = "본인인증방법 비정상" + certMet;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-
-		regex = "[0-9]*";
-		if( (phoneNo.length() != 10 && phoneNo.length() != 11) || !paramChk(regex, phoneNo) ){
-			errMessage = "휴대폰번호 비정상" ;
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( phoneCorp.length() != 3 || !paramChk(regex, phoneCorp) ){
-			errMessage = "이동통신사 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( birthDay.length() != 8 || !paramChk(regex, birthDay) ){
-			errMessage = "생년월일 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( gender.length() != 1 || !paramChk(regex, gender) ){
-			errMessage = "성별 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-
-		regex = "[0-9]*";
-		if( nation.length() != 1 || !paramChk(regex, nation) ){
-			errMessage = "내/외국인 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-�R.,-]*";
-		if( name.length() > 60 || !paramChk(regex, name) ){
-			errMessage = "성명 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[A-Z]*";
-		if( result.length() != 1 || !paramChk(regex, result) ){
-			errMessage = "결과값 비정상";
-			return returnPage(model , errMessage , kmcVO) ;
-		}
-		
-		regex = "[\\sA-Za-z가-?.,-]*";
-		if( M_name.length() != 0 ){
-			if( M_name.length() > 60 || !paramChk(regex, M_name) ){
-				errMessage = "미성년자 성명 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-		
-		regex = "[0-9]*";
-		if( M_birthDay.length() != 0 ){
-			if( M_birthDay.length() != 8 || !paramChk(regex, M_birthDay) ){
-				errMessage = "미성년자 생년월일  비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_Gender.length() != 0 ){
-			if( M_Gender.length() != 1 || !paramChk(regex, M_Gender) ){
-				errMessage = "미성년자 성별 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-
-		regex = "[0-9]*";
-		if( M_nation.length() != 0 ){
-			if( M_nation.length() != 1 || !paramChk(regex, M_nation) ){
-				errMessage = "미성년자 내/외국인 비정상";
-				return returnPage(model , errMessage , kmcVO) ;
-			}
-		}
-		
-		
-		//KMC 본인인증 로그
-		AuthCertVO certVO = new AuthCertVO();
-		certVO.setMberId(kmcVO.getPlusInfo());
-		certVO.setCertNum(kmcVO.getCertNum());
-		certVO.setCertDate(kmcVO.getDate());
-		certVO.setCertDi(kmcVO.getDI());
-		certVO.setCertPhone(kmcVO.getPhoneNo());
-		certVO.setCertNation(kmcVO.getNation());
-		certVO.setCertName(kmcVO.getName());
-		certVO.setCertResult(kmcVO.getResult());
-		certVO.setCertType("secureLoginOFF");
-		certVO.setCertIpaddr(kmcVO.getIp());
-		certVO.setBirthDay(kmcVO.getBirthDay());
-		certVO.setSexdstnCode(kmcVO.getGender());
-
-
-		//디비 테이블에 저장하기
-		mberManageService.insertCertInfoLog(certVO);
-		
-		
+		//kmc 본인인증 결과처리
+		kmcVO = kmcCertChecker.authCertResult(request, response, model);
+		//kmc 본인인증 로그 처리
+		AuthCertVO certVO = kmcCertChecker.insertCertLog(kmcVO, "secureLoginOFF");
 		
 		//본인 명의만 번호 변경 가능하게
-		if(mblDn.equals(DI)) {
+		if(mblDn.equals(kmcVO.getDI())) {
 			String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
 			MberManageVO mberManageVO = new MberManageVO();
 			mberManageVO.setSecuLoginFlag("N");
src/main/java/itn/let/uat/uia/web/KmcCertChecker.java
--- src/main/java/itn/let/uat/uia/web/KmcCertChecker.java
+++ src/main/java/itn/let/uat/uia/web/KmcCertChecker.java
@@ -1,29 +1,44 @@
 package itn.let.uat.uia.web;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
-import java.util.Map;
 import java.util.Random;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
-import org.apache.commons.lang3.StringUtils;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
+import org.json.simple.parser.ParseException;
 import org.springframework.stereotype.Component;
 import org.springframework.ui.ModelMap;
+import org.springframework.web.servlet.FlashMap;
+import org.springframework.web.servlet.FlashMapManager;
+import org.springframework.web.servlet.support.RequestContextUtils;
 
 import com.icert.comm.secu.IcertSecuManager;
 
 import itn.let.cert.phone.service.CertPhoneService;
 import itn.let.cert.phone.service.MberCertPhoneVO;
+import itn.let.mjo.pay.service.KmcVO;
 import itn.let.uat.uia.service.AuthCertVO;
-import itn.let.uss.umt.service.MberManageVO;
+import itn.let.uss.umt.service.EgovMberManageService;
 
 @Component("KmcCertChecker")
 public class KmcCertChecker {
 	
 	@Resource(name = "CertPhoneService")
 	private CertPhoneService certPhoneService;
+	
+	@Resource(name = "mberManageService")
+	private EgovMberManageService mberManageService;
 
 	//회원가입 시 인증수단을 휴대폰 본인인증만 했을 경우 사용
 	public AuthCertVO authCertCheck(
@@ -64,11 +79,13 @@
     	String tr_add     = "N";         // IFrame사용여부
         
     	//01. 한국모바일인증(주) 암호화 모듈 선언
-    	IcertSecuManager seed  = new IcertSecuManager();
+//    	IcertSecuManager seed  = new IcertSecuManager();
+    	com.icert.comm.secu.IcertSecuManager seed  = new com.icert.comm.secu.IcertSecuManager();
 
 		//02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화)
 		String enc_tr_cert = "";
 		tr_cert            = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar;
+//		tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"///////"+ plusInfo +"/"+ extendVar;
 		enc_tr_cert        = seed.getEnc(tr_cert, "");
 
 		//03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC)
@@ -87,7 +104,315 @@
 		return authCertVO;
 	}
 	
+	public KmcVO authCertResult(
+								HttpServletRequest request
+								, HttpServletResponse response
+								, ModelMap model
+							) throws IOException {
+		
+		//크롬 SameSite정책 방지 - 도메인이 다른 타사로 이동 시 크롬 정책에 의해 세션 유실이 일어나는 경우가 있는데, 이를 방지하기 위해 samesite 보안을 none처리
+		response.setHeader("Set-Cookie", "mberSession=mberSession; Secure; SameSite=None");
+		
+		KmcVO kmcVO = new KmcVO(); //return VO
+		
+		// 변수 -------------------------------------------------------------------------------------------------------------
+	    String api_token    = "";		    // 토큰값(암호화)
+	    String api_certNum    = "";		    // 요청번호(암호화)
+
+		String message      = "";		    // JSON 전문
+		String result_cd    = "";		    // JSON 결과코드
+		String result_msg   = "";		    // JSON 결과-상세
+		String strResult    = "";		    // JSON 결과
+		String apiRecCert   = "";		    // JSON 전송 데이터
+		String apiCertNum   = "";		    // JSON 전송 데이터
+
+	    String rec_cert		= "";           // 결과수신DATA
+		String k_certNum 	= "";			// 파라미터로 수신한 요청번호
+		String certNum		= "";			// 요청번호
+	    String date			= "";			// 요청일시
+		String CI	    	= "";			// 연계정보(CI)
+		String DI	    	= "";			// 중복가입확인정보(DI)
+	    String phoneNo		= "";			// 휴대폰번호
+		String phoneCorp	= "";			// 이동통신사
+		String birth		= "";			// 생년월일
+		String gender		= "";			// 성별
+		String nation		= "";			// 내국인
+		String name			= "";			// 성명
+		String reserve1		= "";			// 예비필드
+		String reserve2		= "";			// 예비필드
+		String reserve3		= "";			// 예비필드
+		String reserve4		= "";			// 예비필드
+	    String result		= "";			// 결과값
+
+	    String certMet		= "";			// 인증방법
+	    String ip			= "";			// ip주소
+		String plusInfo		= "";
+
+		String encPara		= "";
+		String encMsg1		= "";
+		String encMsg2		= "";
+		String msgChk       = "";
+	    //-----------------------------------------------------------------------------------------------------------------
+		try{
+			// Parameter 수신 --------------------------------------------------------------------
+			api_token	   = request.getParameter("apiToken").trim();
+			api_certNum = request.getParameter("certNum");
+
+			// 파라미터 유효성 검증
+			if( api_token.length() == 0 ){
+				goErrorPage("토큰값 비정상", request, response);
+				return kmcVO;
+			}
+			if( api_certNum.length() == 0 ){
+				goErrorPage("요청번호 비정상", request, response);
+				return kmcVO;
+			}
+
+			//현재시각 세팅(YYYYMMDDHI24MISS)
+			Calendar today = Calendar.getInstance();
+			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+			String api_date = sdf.format(today.getTime());
+
+			//01. 암호화 모듈 (jar) Loading
+			com.icert.comm.secu.IcertSecuManager seed    = new com.icert.comm.secu.IcertSecuManager();
+
+			//api_token, api_certNum 복호화
+			api_token  = seed.getDec(api_token, "");
+			api_certNum  = seed.getDec(api_certNum, "");
+
+			// 파라미터 유효성 검증
+			if( api_token.length() == 0 ){
+				goErrorPage("토큰값 비정상(복호화 후)", request, response);
+				return kmcVO;
+			}
+			if( api_certNum.length() == 0 ){
+				goErrorPage("요청번호 비정상(복호화 후)", request, response);
+				return kmcVO;
+			}
+
+			// 1. URL 설정
+			String serverURL = "https://www.kmcert.com/kmcis/api/kmcisToken_api.jsp";
+
+			// 2. 연결 생성
+			URL url = new URL(serverURL);
+			
+			// 3. HttpURLConnection 객체 생성.
+			HttpURLConnection con = null;
+			OutputStream wr = null;
+			BufferedReader bufferedReader = null;
+
+			// 4. URL 연결 (웹페이지 URL 연결.)
+			con = (HttpURLConnection)url.openConnection();
+
+			con.setConnectTimeout(20000);					// TimeOut 시간 (서버 접속시 연결 시간 - 20초)
+			con.setReadTimeout(20000);						// TimeOut 시간 (Read시 연결 시간 - 20초)
+			con.setDoOutput(true);							// OutputStream으로 POST 데이터를 넘겨주겠다는 옵션.
+			
+			con.setRequestProperty("Content-Type", "application/json;charset=utf-8");	// 타입설정(application/json) 형식으로 전송 (Request Body 전달시 application/json로 서버에 전달.)
+			con.setRequestProperty("Accept", "application/json");						// 서버 Response Data를 JSON 형식의 타입으로 요청.
+			con.setRequestMethod("POST");												// 요청 방식 선택 (POST)
+
+			// 5. JSON 전문 구성
+			
+			JSONObject jsonData = new JSONObject();
+
+			jsonData.put("apiToken",	api_token);
+			jsonData.put("apiDate",		api_date);
+
+			message = jsonData.toString();
+			
+			// 6. 전송
+			// Request Body에 Data를 담기위해 OutputStream 객체를 생성.
+			wr = con.getOutputStream();
+
+			// Request Body에 Data 셋팅.(한글깨짐 방지를 위해 utf-8인코딩 처리
+			wr.write(message.getBytes("utf-8"));
+			wr.flush();
+			wr.close();
+
+			// 실제 서버로 Request 요청 하는 부분. (응답 코드를 받는다. 200 성공, 나머지 에러)
+			int responseCode = con.getResponseCode();
+
+			// 4. 결과 수신
+			if(responseCode == 200){
+				bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
+			}else{
+				bufferedReader = new BufferedReader(new InputStreamReader(con.getErrorStream(), "UTF-8"));				
+			}
+			
+			if(bufferedReader != null){
+			
+				StringBuilder stringBuilder = new StringBuilder();
+				String line = "";
+			
+				while((line = bufferedReader.readLine()) != null){
+					stringBuilder.append(line);
+				}
+				bufferedReader.close();
+			
+				String stringRet = stringBuilder.toString();
+			
+				// 5. 넘어온 문자열을 JSON 객체로 변환
+				JSONParser jsonParser = new JSONParser();
+			
+				//JSON데이터를 넣어 JSON Object 로 만들어 준다.
+				JSONObject jsonObj = (JSONObject)jsonParser.parse(stringRet);
+			
+				// 6. JSON 객체에서 데이터 가져오기
+					
+				if(jsonObj.get("result_cd") != null){
+					result_cd = jsonObj.get("result_cd").toString();
+					if("APR01".equals(result_cd)){
+						//통신성공
+						strResult = "Y";
+						rec_cert  = jsonObj.get("apiRecCert").toString();
+						k_certNum = jsonObj.get("apiCertNum").toString();
+					}else if("APR02".equals(result_cd)){
+						//실패 - Token Expire
+						strResult = "N";
+						result_msg = "실패 - Token Expire";
+					}else if("APR03".equals(result_cd)){
+						//실패 - Token Not Found
+						strResult = "N";
+						result_msg = "실패 - Token Not Found";
+					}else if("APR04".equals(result_cd)){
+						//실패 - API 요청일시 길이 오류
+						strResult = "N";
+						result_msg = "실패 - API 요청일시 길이 오류";
+					}else if("APR05".equals(result_cd)){
+						//실패 - API 토큰 길이 오류
+						strResult = "N";
+						result_msg = "실패 - API 토큰 길이 오류";
+					}else if("APR06".equals(result_cd)){
+						//실패 - 결과전송 재요청(3회 제한)
+						strResult = "N";
+						result_msg = "실패 - 결과전송 재요청(3회 제한)";
+					}
+				}else{
+					//JSON 결과코드 에러
+					strResult = "F";
+				}
+			}else{  //timeout except 처리
+				strResult = "F";
+			}
+
+			// 파라미터 유효성 검증
+			if(!strResult.equals("Y")){
+				goErrorPage("결과값 비정상, 결과코드["+result_cd+"], "+"상세내용["+result_msg+"]", request, response);
+				return kmcVO;
+			}
+			
+			//02. 1차 복호화
+	        rec_cert  = seed.getDec(rec_cert, "");
+
+	        //03. 1차 파싱
+	        int inf1 = rec_cert.indexOf("/",0);
+	        int inf2 = rec_cert.indexOf("/",inf1+1);
+
+			encPara  = rec_cert.substring(0,inf1);         //암호화된 통합 파라미터
+	        encMsg1  = rec_cert.substring(inf1+1,inf2);    //암호화된 통합 파라미터의 Hash값
+
+			//04. 위변조 검증
+			encMsg2  = seed.getMsg(encPara);
+
+	        if(encMsg2.equals(encMsg1)){
+	            msgChk="Y";
+	        }
+
+			if(msgChk.equals("N")){
+				goErrorPage("비정상적인 접근입니다.!!", request, response);
+				return kmcVO;
+			}
+			
+			//05. 2차 복호화
+			rec_cert  = seed.getDec(encPara, "");
+
+	        //06. 2차 파싱
+	        int info1  = rec_cert.indexOf("/",0);
+	        int info2  = rec_cert.indexOf("/",info1+1);
+	        int info3  = rec_cert.indexOf("/",info2+1);
+	        int info4  = rec_cert.indexOf("/",info3+1);
+	        int info5  = rec_cert.indexOf("/",info4+1);
+	        int info6  = rec_cert.indexOf("/",info5+1);
+	        int info7  = rec_cert.indexOf("/",info6+1);
+	        int info8  = rec_cert.indexOf("/",info7+1);
+			int info9  = rec_cert.indexOf("/",info8+1);
+			int info10 = rec_cert.indexOf("/",info9+1);
+			int info11 = rec_cert.indexOf("/",info10+1);
+			int info12 = rec_cert.indexOf("/",info11+1);
+			int info13 = rec_cert.indexOf("/",info12+1);
+			int info14 = rec_cert.indexOf("/",info13+1);
+			int info15 = rec_cert.indexOf("/",info14+1);
+			int info16 = rec_cert.indexOf("/",info15+1);
+			int info17 = rec_cert.indexOf("/",info16+1);
+			int info18 = rec_cert.indexOf("/",info17+1);
+
+	        kmcVO.setCertNum	(rec_cert.substring(0,info1));
+	        kmcVO.setDate		(rec_cert.substring(info1+1,info2));
+	        //CI 복호화
+	        kmcVO.setCI			(seed.getDec(rec_cert.substring(info2+1,info3), ""));
+	        kmcVO.setPhoneNo	(rec_cert.substring(info3+1,info4));
+	        kmcVO.setPhoneCorp	(rec_cert.substring(info4+1,info5));
+	        kmcVO.setBirthDay	(rec_cert.substring(info5+1,info6));
+	        kmcVO.setGender		(rec_cert.substring(info6+1,info7));
+	        kmcVO.setNation		(rec_cert.substring(info7+1,info8));
+			kmcVO.setName		(rec_cert.substring(info8+1,info9));
+			kmcVO.setResult		(rec_cert.substring(info9+1,info10));
+			kmcVO.setCertMet	(rec_cert.substring(info10+1,info11));
+			kmcVO.setIp			(rec_cert.substring(info11+1,info12));
+			kmcVO.setReserve1	(rec_cert.substring(info12+1,info13));
+			kmcVO.setReserve2	(rec_cert.substring(info13+1,info14));
+			kmcVO.setReserve3	(rec_cert.substring(info14+1,info15));
+			kmcVO.setReserve4	(rec_cert.substring(info15+1,info16));
+			kmcVO.setPlusInfo	(rec_cert.substring(info16+1,info17));
+			//DI 복호화
+			kmcVO.setDI      	(seed.getDec(rec_cert.substring(info17+1,info18), ""));
+
+	        //07. CI, DI 복호화
+//	        CI  = seed.getDec(CI, "");
+//	        DI  = seed.getDec(DI, "");
+	        
+	     // ----------------------------------------------------------------------------------
+
+	    }catch(StringIndexOutOfBoundsException ex){
+	    	goErrorPage("StringIndexOutOfBoundsException", request, response);
+	    }catch(NullPointerException ex){
+	    	goErrorPage("NullPointerException", request, response);
+	    }catch(NumberFormatException ex){
+	    	goErrorPage("NumberFormatException", request, response);
+	    }catch(IllegalStateException ex){
+	    	goErrorPage("IllegalStateException", request, response);
+	    }catch(IndexOutOfBoundsException ex){
+	    	goErrorPage("IndexOutOfBoundsException", request, response);
+	    } catch (IOException e) {
+	    	goErrorPage("IOException", request, response);
+		} catch (ParseException e) {
+			goErrorPage("ParseException", request, response);
+		}
+		return kmcVO;
+	}
 	
+	public AuthCertVO insertCertLog(KmcVO kmcVO, String msg) throws Exception {
+		//KMC 본인인증 로그 insert
+		AuthCertVO certVO = new AuthCertVO();
+		certVO.setMberId(kmcVO.getPlusInfo());
+		certVO.setCertNum(kmcVO.getCertNum());
+		certVO.setCertDate(kmcVO.getDate());
+		certVO.setCertDi(kmcVO.getDI());
+		certVO.setCertPhone(kmcVO.getPhoneNo());
+		certVO.setCertNation(kmcVO.getNation());
+		certVO.setCertName(kmcVO.getName());
+		certVO.setCertResult(kmcVO.getResult());
+		certVO.setCertType(msg);
+		certVO.setCertIpaddr(kmcVO.getIp());
+		certVO.setBirthDay(kmcVO.getBirthDay());
+		certVO.setSexdstnCode(kmcVO.getGender());
+
+		//디비 테이블에 저장하기
+		mberManageService.insertCertInfoLog(certVO);
+		
+		return certVO;
+	}
 	
 	private String getDomain(HttpServletRequest request) {
 		String serverNm = request.getScheme() + "://" + request.getServerName();
@@ -144,5 +469,12 @@
 		return mberCertPhoneVO;
 	}
 	
+	private void goErrorPage(String msg, HttpServletRequest request, HttpServletResponse response) throws IOException {
+		FlashMap flashMap = RequestContextUtils.getOutputFlashMap(request);
+		flashMap.put("msg", msg);
+		FlashMapManager flashMapManager = RequestContextUtils.getFlashMapManager(request);
+		flashMapManager.saveOutputFlashMap(flashMap, request, response);
+		response.sendRedirect("/web/cert/log/kmcErrorPage.do");
+	}
 	
 }
src/main/java/itn/let/uat/uia/web/SendLogVO.java
--- src/main/java/itn/let/uat/uia/web/SendLogVO.java
+++ src/main/java/itn/let/uat/uia/web/SendLogVO.java
@@ -19,6 +19,8 @@
 	/*내용*/
 	private String contents;
 	
+	private String sendMsgType;
+	
 	
 	public String getSendId() {
 		return sendId;
@@ -62,5 +64,13 @@
 	public void setContents(String contents) {
 		this.contents = contents;
 	}
+	public String getSendMsgType() {
+		return sendMsgType;
+	}
+	public void setSendMsgType(String sendMsgType) {
+		this.sendMsgType = sendMsgType;
+	}
+	
+	
     
 }
src/main/resources/egovframework/spring/com/context-security.xml
--- src/main/resources/egovframework/spring/com/context-security.xml
+++ src/main/resources/egovframework/spring/com/context-security.xml
@@ -4,7 +4,7 @@
 	xmlns:security="http://www.springframework.org/schema/security"
 	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
         http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.2.xsd
-		http://www.egovframe.go.kr/schema/egov-security http://www.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
+		http://www.egovframe.go.kr/schema/egov-security http://maven.egovframe.go.kr/schema/egov-security/egov-security-3.7.xsd">
 
     <security:http pattern="/css/**" security="none"/>
 	<security:http pattern="/html/**" security="none"/>
src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_AT_SQL_Mysql.xml
@@ -230,7 +230,7 @@
 			, MMD.BIZ_UMID								AS bizUmid
 			, MMD.MSG_TYPE								AS msgType
 		FROM
-			MJ_MSG_DATA MMD
+			MJ_MSG_DATA MMD FORCE index (IDX_MJ_MSG_DATA_13)
 			INNER JOIN LETTNGNRLMBER MB
 			ON MMD.USER_ID = MB.MBER_ID
 			INNER JOIN mj_msg_group_data MMGD
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgData_SQL_mysql.xml
@@ -3737,7 +3737,8 @@
 		              RECEIVE,
 		              FRST_SEND_PNTTM,
 		              CHECK_NO,
-		              CONTENTS
+		              CONTENTS,
+		              SEND_MSG_TYPE
 		       )
 		
 		
@@ -3750,7 +3751,8 @@
 		              #receive#,
 		              now(),
 		              #checkNo#,
-		              #contents#
+		              #contents#,
+		              #sendMsgType#
 		       )
 	</insert>
 	
@@ -8298,5 +8300,21 @@
 			
 	</delete>
 	
+	<select id="mjonMsgDataDAO.selectSysMsgTodaySendYn" parameterClass="SendLogVO" resultClass="boolean">
+		SELECT
+		<![CDATA[
+		    COUNT(1) >= 1 AS todaySendYn
+	    ]]>
+		FROM
+		    mj_system_send a
+		WHERE
+		      RECEIVE = #receive#
+	      <![CDATA[
+		  AND FRST_SEND_PNTTM >= CURDATE()
+		  AND FRST_SEND_PNTTM < CURDATE() + INTERVAL 1 DAY
+		  ]]>
+		  AND SEND_MSG_TYPE = '01'
+	</select>
+	
 </sqlMap>
 
src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/sym/site/EgovSiteManage_SQL_Mysql.xml
@@ -980,6 +980,7 @@
 			IFNULL(SLACK_NOTI, 'N') AS slackNoti,
 			IFNULL(SMISHING_NOTI, 'N') AS smishingNoti,
 			IFNULL(HOLI_SMISHING_NOTI, 'N') AS holiSmishingNoti,
+			IFNULL(SMS_NOTI_IF_OVER_FIFTY, 'N') AS smsNotiIfOverFifty,
 			LAST_UPDUSR_ID AS lasUpdusrId,
 			LAST_UPDT_PNTTM AS lastUpdtPnttm
 		FROM MJ_MBER_SETTING
src/main/webapp/WEB-INF/jsp/sample/kmc/kmcis_web_sample_step02.jsp
--- src/main/webapp/WEB-INF/jsp/sample/kmc/kmcis_web_sample_step02.jsp
+++ src/main/webapp/WEB-INF/jsp/sample/kmc/kmcis_web_sample_step02.jsp
@@ -344,6 +344,7 @@
     <input type="hidden" name="tr_cert"     value = "<%=tr_cert%>">
     <input type="hidden" name="tr_url"      value = "<%=tr_url%>">
     <input type="hidden" name="tr_add"      value = "<%=tr_add%>">	
+    <input type="hidden" name="tr_ver"      value = "V2">
     <input type="submit" value="본인인증서비스 요청"  onclick= "javascript:openKMCISWindow();">
 </form>
 <BR>
src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp
@@ -904,5 +904,6 @@
     <input type="hidden" name="tr_url"  id="tr_url" value = "${tr_url}">
     <input type="hidden" name="tr_add"  id="tr_add" value = "${tr_add}">
 	<input type="hidden" name="mberId"  id="mberId" value= "${userId}">
+	<input type="hidden" name="tr_ver"      value = "V2">
 </form>
 
src/main/webapp/WEB-INF/jsp/web/api/examDown.jsp
--- src/main/webapp/WEB-INF/jsp/web/api/examDown.jsp
+++ src/main/webapp/WEB-INF/jsp/web/api/examDown.jsp
@@ -9,7 +9,8 @@
 	$('.download_btn').click(function(){
 		// click tag에 data-info="" 값 가져옴
 		var type = $(this).data('info');
-		var downUrl = "<c:out value='/sample_mjon/type_샘플_예제.zip' />";
+// 		var downUrl = "<c:out value='/sample_mjon/type_샘플_예제.zip' />";
+		var downUrl = "<c:out value='/sample_mjon/type_샘플_예제_r2.zip' />";
 		downUrl = downUrl.replace('type', type);
 		location.href = downUrl;
 	});
@@ -34,8 +35,8 @@
                                        
                     <div class="pay_tab_wrap">
                         <ul class="tabType1">
-                            <li class="tab active"><button type="button" onclick="TabType5(this,'1');TabType3(this,'1');">문자</button></li>
-                            <li class="tab"><button type="button" onclick="TabType5(this,'2');TabType3(this,'7');">카카오톡</button></li>
+                            <li class="tab active"><button type="button" onclick="TabType5(this,'1');listTab3(this,'1');$('.list_tab .tab:first-child').addClass('active').siblings().removeClass('active');">문자</button></li>
+                            <li class="tab"><button type="button" onclick="TabType5(this,'2');listTab3(this,'7');$('.list_tab .tab:first-child').addClass('active').siblings().removeClass('active');">카카오톡</button></li>
                         </ul>
                     </div>
                                        
@@ -97,6 +98,23 @@
 	                                            <th>jsp_example_select_price_r1.jsp</th>
 	                                            <td>발송가능건수</td>
 	                                        </tr>
+	                                        
+	                                        <tr>
+	                                            <th>jsp_example_inqry_chnlid_r1.jsp</th>
+	                                            <td>카카오채널조회</td>
+	                                        </tr>
+	                                        <tr>
+	                                            <th>jsp_example_inqry_templates_list_r1.jsp</th>
+	                                            <td>카카오템플릿조회</td>
+	                                        </tr>
+	                                        <tr>
+	                                            <th>jsp_example_send_at_r1.jsp</th>
+	                                            <td>카카오알림톡발송</td>
+	                                        </tr>
+	                                        <tr>
+	                                            <th>jsp_example_send_ft_r1.jsp</th>
+	                                            <td>카카오친구톡발송</td>
+	                                        </tr>
 	                                    </table>
 	                                </div>                                
 	                            </div>
@@ -135,6 +153,23 @@
 	                                        <tr>
 	                                            <th>php_example_select_price_r1.php</th>
 	                                            <td>발송가능건수</td>
+	                                        </tr>
+	                                        
+	                                        <tr>
+	                                            <th>php_example_inqry_chnlid_r1.php</th>
+	                                            <td>카카오채널조회</td>
+	                                        </tr>
+	                                        <tr>
+	                                            <th>php_example_inqry_templates_list_r1.php</th>
+	                                            <td>카카오템플릿조회</td>
+	                                        </tr>
+	                                        <tr>
+	                                            <th>php_example_send_at_r1.php</th>
+	                                            <td>카카오알림톡발송</td>
+	                                        </tr>
+	                                        <tr>
+	                                            <th>php_example_send_ft_r1.php</th>
+	                                            <td>카카오친구톡발송</td>
 	                                        </tr>
 	                                    </table>
 	                                </div>                                
@@ -306,7 +341,7 @@
                     <div class="api_guide current"  id="tab5_2">
                         <div class="api_download">
                             <ul class="info">
-                                <li>- 카카오톡아래 예제(JSP, PHP)를 참고하시어 쉽고 편리하게 API를 연동할 수 있습니다.</li>
+                                <li>- 아래 예제(JSP, PHP)를 참고하시어 쉽고 편리하게 API를 연동할 수 있습니다.</li>
                                 <li>- JSP, PHP 외 타 예제는 계속해서 업데이트 될 예정입니다.</li>
                             </ul>
     
@@ -341,14 +376,22 @@
                                                 <col style="width:35%;">
                                                 <col style="width:65%;">
                                             </colgroup>
-                                            <tr>
-                                                <th>kakao jsp_example_send_msg_r1.jsp</th>
-                                                <td>문자보내기(여러명에게 동일한문자)</td>
-                                            </tr>
-                                            <tr>
-                                                <th>sp_example_send_msgs_r1.jsp</th>
-                                                <td>문자보내기(여러명에게 다른문자)</td>
-                                            </tr>
+	                                        <tr>
+	                                            <th>jsp_example_inqry_chnlid_r1.jsp</th>
+	                                            <td>카카오채널조회</td>
+	                                        </tr>
+	                                        <tr>
+	                                            <th>jsp_example_inqry_templates_list_r1.jsp</th>
+	                                            <td>카카오템플릿조회</td>
+	                                        </tr>
+	                                        <tr>
+	                                            <th>jsp_example_send_at_r1.jsp</th>
+	                                            <td>카카오알림톡발송</td>
+	                                        </tr>
+	                                        <tr>
+	                                            <th>jsp_example_send_ft_r1.jsp</th>
+	                                            <td>카카오친구톡발송</td>
+	                                        </tr>
                                             <tr>
                                                 <th>jsp_example_hstry_r1.jsp</th>
                                                 <td>전송내역조회</td>
@@ -420,26 +463,34 @@
                                                 <col style="width:65%;">
                                             </colgroup>
                                             <tbody>
-                                                <tr>
-                                                    <th>php_example_send_msg_r1.php</th>
-                                                    <td>문자보내기(여러명에게 동일한문자)</td>
-                                                </tr>
-                                                <tr>
-                                                    <th>php_example_send_msgs_r1.php</th>
-                                                    <td>문자보내기(여러명에게 다른문자)</td>
-                                                </tr>
-                                                <tr>
-                                                    <th>php_example_hstry_r1.php</th>
-                                                    <td>전송내역조회</td>
-                                                </tr>
-                                                <tr>
-                                                    <th>php_example_hstry_detail_r1.php</th>
-                                                    <td>상세전송내역조회</td>
-                                                </tr>
-                                                <tr>
-                                                    <th>php_example_select_price_r1.php</th>
-                                                    <td>발송가능건수</td>
-                                                </tr>
+		                                        <tr>
+		                                            <th>php_example_inqry_chnlid_r1.php</th>
+		                                            <td>카카오채널조회</td>
+		                                        </tr>
+		                                        <tr>
+		                                            <th>php_example_inqry_templates_list_r1.php</th>
+		                                            <td>카카오템플릿조회</td>
+		                                        </tr>
+		                                        <tr>
+		                                            <th>php_example_send_at_r1.php</th>
+		                                            <td>카카오알림톡발송</td>
+		                                        </tr>
+		                                        <tr>
+		                                            <th>php_example_send_ft_r1.php</th>
+		                                            <td>카카오친구톡발송</td>
+		                                        </tr>
+	                                            <tr>
+	                                                <th>php_example_hstry_r1.php</th>
+	                                                <td>전송내역조회</td>
+	                                            </tr>
+	                                            <tr>
+	                                                <th>php_example_hstry_detail_r1.php</th>
+	                                                <td>상세전송내역조회</td>
+	                                            </tr>
+	                                            <tr>
+	                                                <th>php_example_select_price_r1.php</th>
+	                                                <td>발송가능건수</td>
+	                                            </tr>
                                             </tbody>
                                         </table>
                                     </div>
src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
--- src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
+++ src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp
@@ -1896,6 +1896,7 @@
 			<input type="hidden" name="tr_cert" id="tr_certHeader"    value = "">
 			<input type="hidden" name="tr_url"   id="tr_urlHeader"   value = "">
 			<input type="hidden" name="tr_add"  id="tr_addHeader"     value = "">	
+			<input type="hidden" name="tr_ver"      value = "V2">
 		</form>
 		
 		<form name="cmpChangeForm" id="cmpChangeForm" method="post" action="#">
src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/mberSecession.jsp
--- src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/mberSecession.jsp
+++ src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/mberSecession.jsp
@@ -90,6 +90,7 @@
 				<input type="hidden" id="tr_url" name="tr_url" value = "${certVO.tr_url}">
 				<input type="hidden" id="tr_add" name="tr_add" value = "${certVO.tr_add}">
 				<input type="hidden" id="tr_cert" name="tr_cert" value = "${certVO.tr_cert}">
+				<input type="hidden" name="tr_ver"      value = "V2">
 			</form>
 			
 			<!-- ars 본인인증 Form -->
 
src/main/webapp/WEB-INF/jsp/web/cop/kmc/certResultError.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/cop/kmc/certResultError.jsp
@@ -0,0 +1,22 @@
+<%@ page contentType="text/html; charset=utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
+<script src="<c:url value='/js/jquery.js' />"></script>
+<html>
+	<head>
+		<meta name="robots" content="noindex">
+		
+		<script language=javascript>  
+			$( document ).ready(function() {
+				alert("${msg}")
+				self.close();
+			});
+		</script>
+
+	</head>
+	<body>
+	</body>
+</html>     (No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp
@@ -821,5 +821,6 @@
     <input type="hidden" name="tr_url"  id="tr_url" value = "${tr_url}">
     <input type="hidden" name="tr_add"  id="tr_add" value = "${tr_add}">
 	<input type="hidden" name="mberId"  id="mberId" value= "${userId}">
+	<input type="hidden" name="tr_ver"      value = "V2">
 </form>
 
src/main/webapp/WEB-INF/jsp/web/kakao/profile/KakaoProfileList.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/profile/KakaoProfileList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/profile/KakaoProfileList.jsp
@@ -135,30 +135,8 @@
 					
 				}else{
 					
-					if(code == '310'){
-						
-						var infoSize = returnData.delInfoCnt;
-						
-						if(infoSize > 0){
-							
-							if(confirm("기존에 삭제된 채널ID가 있습니다. 복구 하시겠습니까?")){
-								
-								fnUpdateProfileStatus();
-								
-							}
-							
-						}else{
-							
-							alert("이미 등록된 채널ID 입니다. 타 사이트에 등록된 채널ID를 확인해 주세요.");
-							return false;
-						}
-						
-					}else{//인증 토큰 발송에 오류가 있는 경우 카카오의 오류 메세지를 표시
-						
-						alert("인증번호 받기 처리 중 오류가 발생하였습니다. 오류 코드 : " + msg);
-						return false;
-						
-					}
+					alert(msg);
+					return false;
 					
 				}
 			}else{
@@ -170,37 +148,6 @@
 			alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
 		}
 	});
-}
-
-function fnUpdateProfileStatus(){
-	
-	var data = new FormData(bizForm);
-	$.ajax({
-		url : "<c:url value='/web/mjon/kakao/profile/updateKaKaoProfileStatusAjax.do'/>"
-		, type : 'POST'
-		, data : data
-		, dataType:'json'
-		, async: false
-		, processData: false
-		, contentType: false
-		, cache: false
-		, success: function (returnData, status) {
-			
-			if(returnData.result == "success") {//인증번호 발송 완료
-				
-				alert(returnData.kakaoInfo.bizReturnMsg);
-				location.reload();
-				
-			}else{
-				alert(returnData.kakaoInfo.bizReturnMsg);
-				return false;
-			}
-		}
-		,error : function(request , status, error){
-			alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
-		}
-	});
-	
 }
 
 function sendProfile(){
@@ -259,23 +206,9 @@
 			
 			if(returnData.result == "loginFail") {//차단 발신번호인 경우 등록 불가
 				alert("로그인후 진행");
-			}else if(returnData.result == "success") {
-				var code = returnData.kakaoInfo.bizReturnCode
-				if(code == "200"){
-					alert(returnData.kakaoInfo.bizReturnMsg);
-					location.reload();
-				}else if(code == "310"){//타사이트에 등록되어 있는 경우 알림메세지 표시
-					
-					alert("이미 등록된 채널ID 입니다. 타 사이트에 등록된 채널ID를 확인해 주세요.");
-					return false;
-					
-				}else{
-					alert(returnData.kakaoInfo.bizReturnMsg);
-					return false;
-				}
-			}else if(returnData.result == "zeroUpdate"){
+			}else{
 				alert(returnData.kakaoInfo.bizReturnMsg);
-				return false;
+				location.reload();
 			}
 		},
 		beforeSend : function(xmlHttpRequest) {
src/main/webapp/WEB-INF/jsp/web/login/findUserId.jsp
--- src/main/webapp/WEB-INF/jsp/web/login/findUserId.jsp
+++ src/main/webapp/WEB-INF/jsp/web/login/findUserId.jsp
@@ -860,6 +860,7 @@
     <input type="hidden" name="tr_cert" id="tr_cert" value = "${tr_cert}">
     <input type="hidden" name="tr_url"  id="tr_url" value = "${tr_url}">
     <input type="hidden" name="tr_add"  id="tr_add" value = "${tr_add}">
+    <input type="hidden" name="tr_ver"      value = "V2">
     <input type="hidden" name="mberNm" id="mberNm" value="">
     <input type="hidden" name="moblphonNo" id="moblphonNo" value="">
     <input type="hidden" name="mberId" id="mberId" value="">
src/main/webapp/WEB-INF/jsp/web/login/humanPageAuthenticatedPage.jsp
--- src/main/webapp/WEB-INF/jsp/web/login/humanPageAuthenticatedPage.jsp
+++ src/main/webapp/WEB-INF/jsp/web/login/humanPageAuthenticatedPage.jsp
@@ -129,6 +129,7 @@
 	<input type="hidden" name="tr_cert" id="tr_cert" value = "${tr_cert}">
 	<input type="hidden" name="tr_url"  id="tr_url" value = "${tr_url}">
 	<input type="hidden" name="tr_add"  id="tr_add" value = "${tr_add}">
+	<input type="hidden" name="tr_ver"      value = "V2">
 	<input type="hidden" name="mberNm" id="mberNm" value="">
 	<input type="hidden" name="moblphonNo" id="moblphonNo" value="">
 	<input type="hidden" name="mberId" id="mberId" value="">
src/main/webapp/WEB-INF/jsp/web/login/test_usrCheckTerms.jsp
--- src/main/webapp/WEB-INF/jsp/web/login/test_usrCheckTerms.jsp
+++ src/main/webapp/WEB-INF/jsp/web/login/test_usrCheckTerms.jsp
@@ -644,6 +644,7 @@
     <input type="hidden" name="tr_cert" id="tr_cert"    value = "${tr_cert}">
     <input type="hidden" name="tr_url"   id="tr_url"   value = "${tr_url}">
     <input type="hidden" name="tr_add"  id="tr_add"     value = "${tr_add}">	
+    <input type="hidden" name="tr_ver"      value = "V2">
 </form>
 <form name="arsForm" method="post" action="#">
     <input type="hidden" id="phoneNumber" name="phoneNumber" value = "">
src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp
--- src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp
+++ src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp
@@ -634,6 +634,7 @@
     <input type="hidden" name="tr_cert" id="tr_cert"    value = "${tr_cert}">
     <input type="hidden" name="tr_url"   id="tr_url"   value = "${tr_url}">
     <input type="hidden" name="tr_add"  id="tr_add"     value = "${tr_add}">	
+    <input type="hidden" name="tr_ver"      value = "V2">
 </form>
 <form name="arsForm" method="post" action="#">
     <input type="hidden" id="phoneNumber" name="phoneNumber" value = "">
src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms_back2.jsp
--- src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms_back2.jsp
+++ src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms_back2.jsp
@@ -707,6 +707,7 @@
     <input type="hidden" name="tr_cert" id="tr_cert"    value = "${tr_cert}">
     <input type="hidden" name="tr_url"   id="tr_url"   value = "${tr_url}">
     <input type="hidden" name="tr_add"  id="tr_add"     value = "${tr_add}">	
+    <input type="hidden" name="tr_ver"      value = "V2">
 </form>
 <form name="arsForm" method="post" action="#">
     <input type="hidden" id="phoneNumber" name="phoneNumber" value = "">
src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp
@@ -505,6 +505,7 @@
 			<input type="hidden" name="tr_cert" id="tr_cert" value="">
 			<input type="hidden" name="tr_url"   id="tr_url" value="">
 			<input type="hidden" name="tr_add"  id="tr_add" value="">
+			<input type="hidden" name="tr_ver"      value = "V2">
 		</form>
 
     <!-- 마이페이지 - 회원정보 변경 -->
src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp
@@ -218,6 +218,7 @@
 			<input type="hidden" name="tr_cert" id="tr_cert" value="">
 			<input type="hidden" name="tr_url"   id="tr_url" value="">
 			<input type="hidden" name="tr_add"  id="tr_add" value="">
+			<input type="hidden" name="tr_ver"      value = "V2">
 		</form>
 		
 		<!-- 마이페이지 - 회원정보 변경 -->
src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp
@@ -304,6 +304,7 @@
 	<input type="hidden" id="tr_url" name="tr_url" value = "${certVO.tr_url}">
 	<input type="hidden" id="tr_add" name="tr_add" value = "${certVO.tr_add}">
 	<input type="hidden" id="tr_cert" name="tr_cert" value = "${certVO.tr_cert}">
+	<input type="hidden" name="tr_ver"      value = "V2">
 </form>
 
 <form id="levelForm" name="levelForm" method="post">
src/main/webapp/WEB-INF/jsp/web/user/mberSecession.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/mberSecession.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberSecession.jsp
@@ -97,6 +97,7 @@
 				<input type="hidden" id="tr_url" name="tr_url" value = "${certVO.tr_url}">
 				<input type="hidden" id="tr_add" name="tr_add" value = "${certVO.tr_add}">
 				<input type="hidden" id="tr_cert" name="tr_cert" value = "${certVO.tr_cert}">
+				<input type="hidden" name="tr_ver"      value = "V2">
 			</form>
 			
 			<!-- ars 본인인증 Form -->
src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp
@@ -704,6 +704,7 @@
 	<input type="hidden" id="tr_url" name="tr_url" value = "${certVO.tr_url}">
 	<input type="hidden" id="tr_add" name="tr_add" value = "${certVO.tr_add}">
 	<input type="hidden" id="tr_cert" name="tr_cert" value = "${certVO.tr_cert}">
+	<input type="hidden" name="tr_ver"      value = "V2">
 </form>
 <form name="listForm" action="<c:url value='/web/user/mberSecureLogin.do'/>" method="post">
 	<input name="pageIndex" type="hidden" value="<c:out value='${mberCertLoginLogVO.pageIndex}'/>"/>
src/main/webapp/WEB-INF/jsp/web/user/selectPhoneNumberCertChkReq.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/selectPhoneNumberCertChkReq.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/selectPhoneNumberCertChkReq.jsp
@@ -26,7 +26,8 @@
  				opener.parentVal = resultFlag;
  				var resultNameChk = '${resultNameChk}';
  				opener.nameChkVal = resultNameChk;
- 				opener.insertDocumentForm.ownerName.value = "${searchVO.name}";
+//  				opener.insertDocumentForm.ownerName.value = "${searchVO.name}";
+ 				opener.insertDocumentForm.ownerName.value = "${name}";
  				opener.insertDocumentForm.CI.value = "${CI}";
  				opener.insertDocumentForm.birthDay.value = "${birthDay}";
  				opener.hpCertChkResult();
src/main/webapp/WEB-INF/jsp/web/user/sendNumberKmcReqPage.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/sendNumberKmcReqPage.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/sendNumberKmcReqPage.jsp
@@ -27,7 +27,7 @@
 		</script>
 	</head>
 	<body>
-		<br><br>
+		<%-- <br><br>
             [복호화 후 수신값] <br>
             <br>
             <table cellpadding=1 cellspacing=1>
@@ -120,6 +120,6 @@
             rec_cert : ${kmcVO.recCert}<br>
             <br>
             <br>
-            <a href="http://www.munjaon.co.kr/publish/kmc/kmcis_web_sample_step01.jsp">[다시 테스트]</a>
+            <a href="http://www.munjaon.co.kr/publish/kmc/kmcis_web_sample_step01.jsp">[다시 테스트]</a> --%>
 	</body>
 </html>     
(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/user/sendNumberManageRegister.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/sendNumberManageRegister.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/sendNumberManageRegister.jsp
@@ -863,6 +863,7 @@
 			<input type="hidden" id="tr_url" name="tr_url" value = "${tr_url}">
 			<input type="hidden" id="tr_add" name="tr_add" value = "${tr_add}">
 			<input type="hidden" id="tr_cert" name="tr_cert" value = "${tr_cert}">
+			<input type="hidden" name="tr_ver"      value = "V2">
 		</form>
 		
 		<!-- ars 본인인증 Form -->
src/main/webapp/WEB-INF/jsp/web/user/sendNumberManage_bak220502.jsp
--- src/main/webapp/WEB-INF/jsp/web/user/sendNumberManage_bak220502.jsp
+++ src/main/webapp/WEB-INF/jsp/web/user/sendNumberManage_bak220502.jsp
@@ -408,6 +408,7 @@
 			<input type="hidden" id="tr_url" name="tr_url" value = "${tr_url}">
 			<input type="hidden" id="tr_add" name="tr_add" value = "${tr_add}">
 			<input type="hidden" id="tr_cert" name="tr_cert" value = "${tr_cert}">
+			<input type="hidden" name="tr_ver"      value = "V2">
 		</form>
 		
 		<!-- ars 본인인증 Form -->
 
src/main/webapp/WEB-INF/lib/ICERTSecu_JDK18.jar (Binary) (deleted)
--- src/main/webapp/WEB-INF/lib/ICERTSecu_JDK18.jar
Binary file is not shown
 
src/main/webapp/sample_mjon/jsp_샘플_예제_r2.zip (Binary) (added)
+++ src/main/webapp/sample_mjon/jsp_샘플_예제_r2.zip
Binary file is not shown
 
src/main/webapp/sample_mjon/php_샘플_예제_r2.zip (Binary) (added)
+++ src/main/webapp/sample_mjon/php_샘플_예제_r2.zip
Binary file is not shown
Add a comment
List