이호영 이호영 2024-11-14
Merge branch 'master' of http://hylee@vcs.iten.co.kr:9999/hylee/mjon_git into advc
into advc
@b44427affa302495ab96f675c9246b57a7f273ea
 
src/main/java/itn/com/cmm/MjonMsgSendVO.java (added)
+++ src/main/java/itn/com/cmm/MjonMsgSendVO.java
@@ -0,0 +1,116 @@
+package itn.com.cmm;
+
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+@Getter
+@Setter
+@ToString
+public class MjonMsgSendVO{
+
+	
+	/**
+	 * @description : 수신자번호
+	 */
+	private String  phone;
+
+	/**
+	 * @description : [*이름*] - 치환문자
+	 */
+	private String 	name;
+	
+	/**
+	 * @description : [*1*] - 치환문자
+	 */
+	private String  rep1;
+	
+	/**
+	 * @description : [*2*] - 치환문자
+	 */
+	private String  rep2;
+	
+	/**
+	 * @description : [*3*] - 치환문자
+	 */
+	private String  rep3;
+	
+	/**
+	 * @description : [*4*] - 치환문자
+	 */
+	private String  rep4;
+	
+	/**
+	 * @description : 문자ID
+	 */
+	private String 	msgId;
+
+	/**
+	 * @description : 전송그룹ID (대량문자의 경우 하나의 그룹으로 세팅)
+	 */
+	private String msgGroupId; 
+	
+	/**
+	 * @description : 문자온 일반회원ID
+	 */
+	private String  userId;
+
+	/**
+	 * @description : 발신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)
+	 */
+	private String  callFrom;
+	/**
+	 * @description : 수신번호 (하이픈 등의 문자를 제외한 12byte이하의 숫자로 입력한다.)
+	 */
+	private String  callTo; 
+	/**
+	 * @description : 예약 발송일시
+	 */
+	private String  reqDate;
+	/**
+	 * @description :전송사(04:다우, 05:JJ, 07:IVT, 01:아이하트 , 02:현대퓨처넷, 03:아이엠오) 
+	 */
+	private String  agentCode;
+
+	/**
+	 * @description : MMS용 메시지제목
+	 */
+	private String  subject;
+	
+	/**
+	 * @description : SMS용 메시지본문
+	 */
+	private String  smsTxt;
+
+	/**
+	 * @description : 메세지타입(4: SMS 전송, 5: URL 전송, 6: MMS전송, 7: BARCODE전송, 8: 카카오 알림톡 전송)
+	 */
+	private String  msgType;
+
+	/**
+	 * @description : 첨부파일 갯수
+	 */
+	private String 	fileCnt;
+	
+	/**
+	 * @description : 파일이름1
+	 */
+	private String 	filePath1;
+	
+	/**
+	 * @description : 파일이름2
+	 */
+	private String 	filePath2;
+	
+	/**
+	 * @description : 파일이름3
+	 */
+	private String 	filePath3;
+	
+
+	
+	
+	
+	
+	
+}
 
src/main/java/itn/com/cmm/MjonMsgTabulVO.java (deleted)
--- src/main/java/itn/com/cmm/MjonMsgTabulVO.java
@@ -1,20 +0,0 @@
-package itn.com.cmm;
-
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-
-@Getter
-@Setter
-@ToString
-public class MjonMsgTabulVO{
-	
-	private static final long serialVersionUID = 1L;
-	
-	private String 	name;
-	private String  phone;
-	private String  rep1;
-	private String  rep2;
-	private String  rep3;
-	private String  rep4;
-}
src/main/java/itn/com/cmm/util/MsgSendUtils.java
--- src/main/java/itn/com/cmm/util/MsgSendUtils.java
+++ src/main/java/itn/com/cmm/util/MsgSendUtils.java
@@ -3,16 +3,23 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Objects;
+import java.util.function.Function;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.stream.Stream;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 
+import itn.com.cmm.MjonMsgSendVO;
 import itn.let.mail.service.StatusResponse;
 import itn.let.mjo.msg.service.MjonMsgVO;
-import itn.let.mjo.msgdata.service.ReplacementListsVO;
+import itn.let.mjo.spammsg.web.ComGetSpamStringParser;
 import itn.let.module.base.PriceAndPoint;
 import lombok.extern.slf4j.Slf4j;
 
@@ -30,6 +37,7 @@
  * 
  * 
  */
+@Slf4j
 public final class MsgSendUtils {
 
 	
@@ -50,6 +58,7 @@
 			String smsCont = smsTxt.replace("\r\n", "\n");
 			smsBytes = smsCont.getBytes(charset).length;
 		}
+		log.info(" + smsBytes :: [{}]", smsBytes);
 		return smsBytes;
 	}
 
@@ -61,32 +70,33 @@
 	 * @param mjonMsgVO
 	 * @param smsTxtByte
 	 * @return 
+	 * @throws UnsupportedEncodingException 
 	 */
-	public static String getMsgType(MjonMsgVO mjonMsgVO, int smsTxtByte) {
-	    String msgType = mjonMsgVO.getMsgType();
+	public static String getMsgTypeWithByteValidation(MjonMsgSendVO sendVO, String p_smsTxt) throws UnsupportedEncodingException {
+		
+		
+		int smsTxtByte = getSmsTxtBytes(p_smsTxt);
+		String msgType = "4";
+	
+	//	// 내문자저장함에 저장 후 문자를 발송하는 경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함
+	//	if ("P".equals(msgType) || "L".equals(msgType)) {
+	//	    msgType = "6";
+	//	} else if ("S".equals(msgType)) {
+	//	    msgType = "4";
+	//	}
+	
+		// 그림 이미지가 첨부된 경우 장문으로 설정
+		if (StringUtils.isNotEmpty(sendVO.getFilePath1())) {
+			msgType = "6";
+		} else if (smsTxtByte > 2000) {
+			// 2000 Byte를 초과할 경우 에러 처리 (이 부분은 호출부에서 검사하도록 유지할 수도 있음)
+			return "INVALID";  // 이 값은 호출부에서 에러 처리를 하도록 활용할 수 있습니다.
+		} else if (smsTxtByte > 90) {
+			// 90Byte 초과 시 장문으로 설정
+			msgType = "6";
+		}
 
-	    // 내문자저장함에 저장 후 문자를 발송하는 경우 문자 타입이 숫자가 아닌 문자로 넘어와서 변경 처리함
-	    if ("P".equals(msgType) || "L".equals(msgType)) {
-	        msgType = "6";
-	    } else if ("S".equals(msgType)) {
-	        msgType = "4";
-	    }
-
-	    // 그림 이미지가 첨부된 경우 장문으로 설정
-	    if (mjonMsgVO.getFileName1() != null || (mjonMsgVO.getImgFilePath() != null && mjonMsgVO.getImgFilePath().length > 0)) {
-	        msgType = "6";
-	    } else if (smsTxtByte > 2000) {
-	        // 2000 Byte를 초과할 경우 에러 처리 (이 부분은 호출부에서 검사하도록 유지할 수도 있음)
-	        return "INVALID";  // 이 값은 호출부에서 에러 처리를 하도록 활용할 수 있습니다.
-	    } else if (smsTxtByte > 90) {
-	        // 90Byte 초과 시 장문으로 설정
-	        msgType = "6";
-	    } else {
-	        // 그 외 단문으로 설정
-	        msgType = "4";
-	    }
-
-	    return msgType;
+		return msgType;
 	}
 
 	public static float getValidPrice(Float personalPrice, Float defaultPrice) {
@@ -129,16 +139,32 @@
 		return price;
 	}
 
-	public static boolean isReplacementRequired(MjonMsgVO mjonMsgVO) {
-		return "Y".equals(mjonMsgVO.getTxtReplYn());
+	
+	/** 
+	 * @methodName	: isReplacementRequired 
+	 * @author		: 이호영
+	 * @date		: 2024.11.12 
+	 * @description	: 치환데이터가 있는지 확인
+	 * @param mjonMsgVO
+	 * @return 
+	 */
+	public static boolean isRepleasYN(MjonMsgVO mjonMsgVO) {
+		
+		// 치환 구문 패턴 리스트
+		String[] placeholders = {"\\[\\*이름\\*\\]", "\\[\\*1\\*\\]", "\\[\\*2\\*\\]", "\\[\\*4\\*\\]", "\\[\\*3\\*\\]"};
+		
+		for (String placeholder : placeholders) {
+			Pattern pattern = Pattern.compile(placeholder);
+			Matcher matcher = pattern.matcher(mjonMsgVO.getSmsTxt());
+			// 해당 패턴이 존재하면 true 반환
+			if (matcher.find()) {
+				return true;
+			}
+		}
+		return false;
+	
 	}
 
-	public static ReplacementListsVO createReplacementLists(MjonMsgVO mjonMsgVO) throws UnsupportedEncodingException {
-		ReplacementListsVO lists = new ReplacementListsVO();
-		lists.initializeLists(mjonMsgVO); // 배열을 초기화합니다.
-		return lists;
-//		return populateReplacementLists(mjonMsgVO, lists); // 데이터를 배열에 채웁니다.
-	}
 
 	/** 
 	 * @methodName	: populateReplacementLists 
@@ -149,73 +175,168 @@
 	 * @param lists
 	 * @param statusResponse
 	 * @return
-	 * @throws UnsupportedEncodingException 
+	 * @throws Exception 
 	 */
-	public static Boolean populateReplacementLists(MjonMsgVO mjonMsgVO, ReplacementListsVO lists, StatusResponse statusResponse){
+	public static Boolean populateSendLists(MjonMsgVO mjonMsgVO, List<MjonMsgSendVO> mjonMsgSendListVO, StatusResponse statusResponse, List<String> resultSpamTxt) throws Exception{
 		
-		
-		String[] nameList = mjonMsgVO.getNameList();
-		String[] phone = mjonMsgVO.getCallToList();
-		String[] rep1 = mjonMsgVO.getRep1List();
-		String[] rep2 = mjonMsgVO.getRep2List();
-		String[] rep3 = mjonMsgVO.getRep3List();
-		String[] rep4 = mjonMsgVO.getRep4List();
-		String smsTxt = mjonMsgVO.getSmsTxt();
-		int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt());
-		
-		// 이름 치환
-		int shortCnt = 0;
-		int longCnt = 0;
-		int imgCnt = 0;
-		
-		
-		for (int i = 0; i < phone.length; i++) {
-			
-			smsTxt = smsTxt.replaceAll(String.valueOf((char) 13), "");
-			
+		log.info(" :: populateSendLists :: ");
 
-			// 이름 및 치환 문자 처리
-			smsTxt = replacePlaceholder(smsTxt, "[*이름*]", nameList, i);
-			smsTxt = replacePlaceholder(smsTxt, "[*1*]", rep1, i);
-			smsTxt = replacePlaceholder(smsTxt, "[*2*]", rep2, i);
-			smsTxt = replacePlaceholder(smsTxt, "[*3*]", rep3, i);
-			smsTxt = replacePlaceholder(smsTxt, "[*4*]", rep4, i);
-			
+		int spamChkSize = getSpamChkSize(mjonMsgSendListVO.size());
+		int sampleCounter = 0;
 
-			try {
-				int bytes = getSmsTxtBytes(smsTxt);
-				if(bytes < 2000) {
-					if(fileCount > 0) {
-						populateImgLists(lists, nameList, phone, rep1, rep2, rep3, rep4, smsTxt, i);
-						imgCnt++;
-						
-					}else if(bytes > 90) {//장문문자 리스트 만들기
-						populateLongLists(lists, nameList, phone, rep1, rep2, rep3, rep4, smsTxt, i);
-						longCnt++;
-					} else {//단문문자 리스트 만들기
-						populateShortLists(lists, nameList, phone, rep1, rep2, rep3, rep4, smsTxt, i);
-						shortCnt++;
+		String smsTxtTemp = mjonMsgVO.getSmsTxt();
+
+		// 치환 구문과 필드 getter 매핑
+		Map<String, Function<MjonMsgSendVO, String>> placeholders = new HashMap<>();
+		placeholders.put("[*이름*]", MjonMsgSendVO::getName);
+		placeholders.put("[*1*]", MjonMsgSendVO::getRep1);
+		placeholders.put("[*2*]", MjonMsgSendVO::getRep2);
+		placeholders.put("[*3*]", MjonMsgSendVO::getRep3);
+		placeholders.put("[*4*]", MjonMsgSendVO::getRep4);
+
+		boolean hasPerformedSpamCheck = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
+		boolean hasPerformedMsgType = false; // 치환 문자가 없는 경우, 스팸 체크가 한 번만 수행되도록 제어
+		Boolean replaceYN = getReplaceYN(smsTxtTemp);
+		
+		String msgTypeResult = null;
+		
+		for (MjonMsgSendVO sendVO : mjonMsgSendListVO) {
+
+			String smsTxt = smsTxtTemp;
+			// 치환 문자면
+			if(replaceYN) {
+				
+				// 각 치환 구문을 확인하고 치환할 값이 없으면 오류 반환
+				for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry : placeholders.entrySet()) {
+					String placeholder = entry.getKey();
+					String value = entry.getValue().apply(sendVO);
+					if (smsTxtTemp.contains(placeholder)) {
+						if (StringUtils.isEmpty(value)) {
+							statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "치환 문구중 " + placeholder + " 데이터가 없습니다.");
+							return false;
+						}
+						smsTxt = smsTxtTemp.replace(placeholder, value);
 					}
-				}else {
+				}
+			}
+
+			String smsSpamChkTxt = mjonMsgVO.getSmsTxt().replaceAll(String.valueOf((char) 13), "");
+			// 스팸문자 체크
+			// 치환문자가 아닐 경우
+			if (!replaceYN && !hasPerformedSpamCheck) {
+				checkSpamAndSetStatus(mjonMsgVO, smsSpamChkTxt, resultSpamTxt);
+				hasPerformedSpamCheck = true; // 스팸 체크가 한 번만 수행되도록 설정
+			// 치환 문자가 있는 경우에는 spamChkSize 카운트까지만 수행
+			} else if (replaceYN && sampleCounter < spamChkSize && !"Y".equals(mjonMsgVO.getSpamStatus())) {
+				checkSpamAndSetStatus(mjonMsgVO, smsSpamChkTxt, resultSpamTxt);
+				sampleCounter++;
+			}
+			log.info(" ++ smsTxt:: [{}]", smsTxt);
+			sendVO.setSmsTxt(smsTxt);
+			
+			// 이미지 셋팅
+			setImagePathsForMsgSendVO(mjonMsgVO, sendVO);
+			
+
+			// msgType 셋팅 및 문자열 체크
+			log.info(" + smsTxt :: [{}]", smsTxt);
+			if (!replaceYN && !hasPerformedMsgType) {
+				log.info(" 치환 X ");
+				// byte 체크와 msgType 구하기
+				msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
+				if ("INVALID".equals(msgTypeResult)) {
 					statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
 					return false;
 				}
-				
-			} catch (UnsupportedEncodingException e) {
-				statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 중 오류가 발생하였습니다.");
-				e.printStackTrace();
-				return false;
+				hasPerformedMsgType = true; // 스팸 체크가 한 번만 수행되도록 설정
+			}else if(replaceYN){
+				log.info(" 치환 O ");
+				// byte 체크와 msgType 구하기
+				msgTypeResult = getMsgTypeWithByteValidation(sendVO, smsTxt);
+				if ("INVALID".equals(msgTypeResult)) {
+					statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "문자 치환 후 전송 문자 길이를 초과하였습니다.");
+					return false;
+				}
 			}
+
+			sendVO.setMsgType(msgTypeResult);
+			
 		}
-		
-		lists.setShortCnt(shortCnt);
-		lists.setLongCnt(longCnt);
-		lists.setImgCnt(imgCnt);
 		
 		return true;
 
 	}
 	
+	private static void setImagePathsForMsgSendVO(MjonMsgVO mjonMsgVO, MjonMsgSendVO sendVO) {
+		int fileCount = Integer.parseInt(mjonMsgVO.getFileCnt());
+
+		switch (fileCount) {
+			case 3:
+				sendVO.setFilePath3(mjonMsgVO.getFileName3());
+			case 2:
+				sendVO.setFilePath2(mjonMsgVO.getFileName2());
+			case 1:
+				sendVO.setFilePath1(mjonMsgVO.getFileName1());
+				break;
+			default:
+				// fileCount가 0이거나 설정할 파일이 없는 경우
+				break;
+		}
+		sendVO.setFileCnt(mjonMsgVO.getFileCnt());
+	}
+
+	private static void checkSpamAndSetStatus(MjonMsgVO mjonMsgVO, String personalizedSmsTxt, List<String> resultSpamTxt) throws Exception {
+		String resultParser = ComGetSpamStringParser.getSpamTextParse(personalizedSmsTxt).trim();
+		int spmCnt = 0;
+
+		for (String spmTxt : resultSpamTxt) {
+			String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
+			if (resultParser.contains(parserStr)) {
+				spmCnt++;
+			}
+		}
+
+		if (spmCnt > 0) { // 스팸 문자가 포함된 경우
+			System.out.println("++++++++++++++ spam smsTxt ::: " + resultParser);
+			mjonMsgVO.setSpamStatus("Y");
+		}else {mjonMsgVO.setSpamStatus("N");}
+	}
+
+	private static Boolean getReplaceYN(String smsTxtTemplate) {// 여러 치환 구문이 포함된 정규식 패턴
+		
+		Boolean replaceYN = false;
+		
+		Pattern pattern = Pattern.compile("\\[\\*이름\\*\\]|\\[\\*1\\*\\]|\\[\\*2\\*\\]|\\[\\*3\\*\\]|\\[\\*4\\*\\]");
+		Matcher matcher = pattern.matcher(smsTxtTemplate);
+
+		// 정규식 패턴에 해당하는 치환 구문이 존재하는지 확인
+		if (matcher.find()) {
+			replaceYN = true;
+		}
+		return replaceYN;
+	}
+
+	/** 
+	 * @methodName	: getSpamChkSize 
+	 * @author		: 이호영
+	 * @date		: 2024.11.13 
+	 * @description	: 수신자 건수별로 스팸체크하는 갯수 설정 
+	 * @param size
+	 * @return 
+	 */
+	private static int getSpamChkSize(int size) {
+		int chkSize = 1; // 기본 샘플 크기
+
+		// 수신자 수에 따른 샘플 크기 결정
+		if (size > 100 && size <= 1000) {
+			chkSize = 10;
+		} else if (size > 1000) {
+			chkSize = 50;
+		}
+		
+		return chkSize;
+	}
+
 	/**
 	 * 특정 플레이스홀더를 리스트에서 가져온 값으로 치환합니다.
 	 * 
@@ -234,140 +355,6 @@
 			}
 		}
 		return smsTxt;
-	}
-
-	private static void populateShortLists(ReplacementListsVO lists, String[] nameList, String[] phone, String[] rep1,
-			String[] rep2, String[] rep3, String[] rep4, String smsTxt, int i) {
-        // 이름 치환
-        if (smsTxt.contains("[*이름*]")) {
-            if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
-                lists.getShortNameList()[i] = StringUtil.getString(nameList[i].replaceAll("§", ","));
-            } else {
-                lists.getShortNameList()[i] = " ";
-            }
-        } else {
-            lists.getShortNameList()[i] = getSafeValue(nameList, i);
-        }
-
-        lists.getShortPhone()[i] = getSafeValue(phone, i);
-
-        // 문자 1 치환
-        if (smsTxt.contains("[*1*]")) {
-            lists.getShortRep1()[i] = getReplacementValue(rep1, i, "[*1*]");
-        } else {
-            lists.getShortRep1()[i] = getSafeValue(rep1, i);
-        }
-
-        // 문자 2 치환
-        if (smsTxt.contains("[*2*]")) {
-            lists.getShortRep2()[i] = getReplacementValue(rep2, i, "[*2*]");
-        } else {
-            lists.getShortRep2()[i] = getSafeValue(rep2, i);
-        }
-
-        // 문자 3 치환
-        if (smsTxt.contains("[*3*]")) {
-            lists.getShortRep3()[i] = getReplacementValue(rep3, i, "[*3*]");
-        } else {
-            lists.getShortRep3()[i] = getSafeValue(rep3, i);
-        }
-
-        // 문자 4 치환
-        if (smsTxt.contains("[*4*]")) {
-            lists.getShortRep4()[i] = getReplacementValue(rep4, i, "[*4*]");
-        } else {
-            lists.getShortRep4()[i] = getSafeValue(rep4, i);
-        }
-	}
-
-	// 장문 리스트에 데이터를 채우는 메서드
-	private static void populateLongLists(ReplacementListsVO lists, String[] nameList, String[] phone, String[] rep1, String[] rep2, String[] rep3, String[] rep4, String smsTxt, int i) {
-        // 이름 치환
-        if (smsTxt.contains("[*이름*]")) {
-            if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
-                lists.getLongNameList()[i] = StringUtil.getString(nameList[i].replaceAll("§", ","));
-            } else {
-                lists.getLongNameList()[i] = " ";
-            }
-        } else {
-            lists.getLongNameList()[i] = getSafeValue(nameList, i);
-        }
-
-        lists.getLongPhone()[i] = getSafeValue(phone, i);
-
-        // 문자 1 치환
-        if (smsTxt.contains("[*1*]")) {
-            lists.getLongRep1()[i] = getReplacementValue(rep1, i, "[*1*]");
-        } else {
-            lists.getLongRep1()[i] = getSafeValue(rep1, i);
-        }
-
-        // 문자 2 치환
-        if (smsTxt.contains("[*2*]")) {
-            lists.getLongRep2()[i] = getReplacementValue(rep2, i, "[*2*]");
-        } else {
-            lists.getLongRep2()[i] = getSafeValue(rep2, i);
-        }
-
-        // 문자 3 치환
-        if (smsTxt.contains("[*3*]")) {
-            lists.getLongRep3()[i] = getReplacementValue(rep3, i, "[*3*]");
-        } else {
-            lists.getLongRep3()[i] = getSafeValue(rep3, i);
-        }
-
-        // 문자 4 치환
-        if (smsTxt.contains("[*4*]")) {
-            lists.getLongRep4()[i] = getReplacementValue(rep4, i, "[*4*]");
-        } else {
-            lists.getLongRep4()[i] = getSafeValue(rep4, i);
-        }
-	}
-
-	// 그림 문자 리스트에 데이터를 채우는 메서드
-	private static void populateImgLists(ReplacementListsVO lists, String[] nameList, String[] phone, String[] rep1, String[] rep2, String[] rep3, String[] rep4, String smsTxt, int i) {
-		
-		// 이름 치환
-		if (smsTxt.contains("[*이름*]")) {
-		    if (nameList.length > i && StringUtil.isNotEmpty(nameList[i])) {
-		        lists.getImgNameList()[i] = StringUtil.getString(nameList[i].replaceAll("§", ","));
-		    } else {
-		        lists.getImgNameList()[i] = " ";
-		    }
-		} else {
-		    lists.getImgNameList()[i] = getSafeValue(nameList, i);
-		}
-		
-		lists.getImgPhone()[i] = getSafeValue(phone, i);
-		
-		// 문자 1 치환
-		if (smsTxt.contains("[*1*]")) {
-		    lists.getImgRep1()[i] = getReplacementValue(rep1, i, "[*1*]");
-		} else {
-		    lists.getImgRep1()[i] = getSafeValue(rep1, i);
-		}
-		
-		// 문자 2 치환
-		if (smsTxt.contains("[*2*]")) {
-		    lists.getImgRep2()[i] = getReplacementValue(rep2, i, "[*2*]");
-		} else {
-		    lists.getImgRep2()[i] = getSafeValue(rep2, i);
-		}
-		
-		// 문자 3 치환
-		if (smsTxt.contains("[*3*]")) {
-		    lists.getImgRep3()[i] = getReplacementValue(rep3, i, "[*3*]");
-		} else {
-		    lists.getImgRep3()[i] = getSafeValue(rep3, i);
-		}
-		
-		// 문자 4 치환
-		if (smsTxt.contains("[*4*]")) {
-		    lists.getImgRep4()[i] = getReplacementValue(rep4, i, "[*4*]");
-		} else {
-		    lists.getImgRep4()[i] = getSafeValue(rep4, i);
-		}
-		
 	}
 
 	// 배열 인덱스를 안전하게 접근하는 메서드
@@ -412,54 +399,27 @@
 	 * @date		: 2024.09.25
 	 * @description	: 치환문자가 사용될 때 데이터가 올바른지 확인하는 메서드
 	 * @param mjonMsgVO
-	 * @param statusResponse
+	 * @param list
 	 * @return boolean
 	 */
-	public static boolean validateReplacementData(MjonMsgVO mjonMsgVO, StatusResponse statusResponse) {
-		String[] nameList = mjonMsgVO.getNameList();
-		String[] phone = mjonMsgVO.getCallToList();
-		String[] rep1 = mjonMsgVO.getRep1List();
-		String[] rep2 = mjonMsgVO.getRep2List();
-		String[] rep3 = mjonMsgVO.getRep3List();
-		String[] rep4 = mjonMsgVO.getRep4List();
-
-		// 치환 문자 리스트가 모두 비어있는지 확인
-		if (isEmpty(nameList) 
-			&& isEmpty(rep1) 
-			&& isEmpty(rep2) 
-			&& isEmpty(rep3) 
-			&& isEmpty(rep4)) {
-			statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "특정문구 일괄변환 치환문자 데이터가 없습니다.");
-			return false;
-		}
-
-		// 치환 문자 필드 개수와 전화번호 개수가 일치하는지 확인
-		boolean isRepCountOk = true;
-
-		if (mjonMsgVO.getSmsTxt().contains("[*이름*]") && nameList.length != phone.length) {
-			isRepCountOk = false;
-		}
-		if (mjonMsgVO.getSmsTxt().contains("[*1*]") && rep1.length != phone.length) {
-			isRepCountOk = false;
-		}
-		if (mjonMsgVO.getSmsTxt().contains("[*2*]") && rep2.length != phone.length) {
-			isRepCountOk = false;
-		}
-		if (mjonMsgVO.getSmsTxt().contains("[*3*]") && rep3.length != phone.length) {
-			isRepCountOk = false;
-		}
-		if (mjonMsgVO.getSmsTxt().contains("[*4*]") && rep4.length != phone.length) {
-			isRepCountOk = false;
-		}
-
-		// 필드 개수가 일치하지 않는 경우 에러 메시지 반환
-		if (!isRepCountOk) {
-			statusResponseSet(statusResponse, HttpStatus.BAD_REQUEST, "특정문구 일괄변환 치환문자 데이터가 일치하지 않습니다.");
-			return false;
-		}
-
-		return true; // 모든 유효성 검사를 통과한 경우
-	}
+	/*
+	 * public static boolean validateReplacementData(MjonMsgVO mjonMsgVO,
+	 * List<MjonMsgSendVO> list) { // 치환 구문과 필드 getter 매핑 Map<String,
+	 * Function<MjonMsgSendVO, String>> placeholders = new HashMap<>();
+	 * placeholders.put("\\[\\*이름\\*\\]", MjonMsgSendVO::getName);
+	 * placeholders.put("\\[\\*1\\*\\]", MjonMsgSendVO::getRep1);
+	 * placeholders.put("\\[\\*2\\*\\]", MjonMsgSendVO::getRep2);
+	 * placeholders.put("\\[\\*3\\*\\]", MjonMsgSendVO::getRep3);
+	 * placeholders.put("\\[\\*4\\*\\]", MjonMsgSendVO::getRep4);
+	 * 
+	 * // smsTxt 에서 필요한 치환 구문이 포함되어 있는지 확인 String smsTxt = mjonMsgVO.getSmsTxt();
+	 * for (Map.Entry<String, Function<MjonMsgSendVO, String>> entry :
+	 * placeholders.entrySet()) { if
+	 * (Pattern.compile(entry.getKey()).matcher(smsTxt).find()) { // 해당 치환 구문이 존재할
+	 * 경우 모든 수신자에서 필드 값 확인 for (MjonMsgSendVO recipient : list) { if
+	 * (StringUtils.isEmpty(entry.getValue().apply(recipient))) { return false; //
+	 * 데이터가 없는 경우 } } } } // 모든 치환 구문이 유효한 데이터를 가지고 있으면 true 반환 return true; }
+	 */
 	
 	// 배열이 비어있는지 확인하는 메서드
 	public static boolean isEmpty(String[] array) {
src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
--- src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
+++ src/main/java/itn/let/kakao/admin/kakaoAt/service/MjonKakaoATVO.java
@@ -149,6 +149,7 @@
 	private String bizKakaoResendOrgnlTxt; /* 대체 문자( 치환X ) */
 	private String bizKakaoResendYn; /* 대체 문자 사용 여부*/
 	private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */
+	private String bizKakaoJsonFile;	//카카오 친구톡 Json 파일 경로
 	
 	
 	public String getMsgDiv() {
@@ -1266,5 +1267,11 @@
 	public void setBizKakaoResendType(String bizKakaoResendType) {
 		this.bizKakaoResendType = bizKakaoResendType;
 	}
+	public String getBizKakaoJsonFile() {
+		return bizKakaoJsonFile;
+	}
+	public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
+		this.bizKakaoJsonFile = bizKakaoJsonFile;
+	}
 	
 }
src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoATController.java
--- src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoATController.java
+++ src/main/java/itn/let/kakao/admin/kakaoAt/web/MjonKakaoATController.java
@@ -851,6 +851,7 @@
 			kakaoVO.setPage(Integer.toString(channelIDVO.getPageIndex()));
 			kakaoVO.setKeyword(channelIDVO.getSearchKeyword());
 			kakaoVO.setUserId(channelIDVO.getUserId());
+			kakaoVO.setYellowId(channelIDVO.getYellowId());
 			
 			String templateStatus = channelIDVO.getTemplateStatus();
 			String keyword = channelIDVO.getSearchKeyword();
src/main/java/itn/let/kakao/admin/kakaoFt/web/MjonKakaoFTController.java
--- src/main/java/itn/let/kakao/admin/kakaoFt/web/MjonKakaoFTController.java
+++ src/main/java/itn/let/kakao/admin/kakaoFt/web/MjonKakaoFTController.java
@@ -13,14 +13,21 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.servlet.HandlerMapping;
 
+import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
 import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
+import itn.com.cmm.LoginVO;
 import itn.com.cmm.service.FileVO;
 import itn.com.cmm.util.StringUtil;
+import itn.let.kakao.admin.kakaoAt.service.ChannelIDVO;
 import itn.let.kakao.admin.kakaoFt.service.MjonKakaoFTService;
 import itn.let.kakao.admin.kakaoFt.service.MjonKakaoFTVO;
+import itn.let.kakao.kakaoComm.KakaoVO;
+import itn.let.kakao.kakaoComm.kakaoApi.service.KakaoApiService;
+import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
 import itn.let.mjo.msg.service.MjonMsgResultCodeVO;
 import itn.let.mjo.msg.service.MjonMsgService;
 import itn.let.mjo.reservmsg.service.MjonReservMsgService;
+import itn.let.utl.fcc.service.EgovStringUtil;
 
 /**
 *
@@ -51,6 +58,12 @@
 
 	@Resource(name = "MjonReservMsgService")
     private MjonReservMsgService mjonReservMsgService;
+	
+	@Resource(name = "kakaoFriendsTalkTemplateService")
+	private KakaoFriendsTalkTemplateService kakaoFtTemplateService;
+	
+	@Resource(name = "kakaoApiService")
+	private KakaoApiService kakaoApiService;
 	
 	/*
 	@Resource(name = "EgovCmmUseService")
@@ -501,6 +514,125 @@
         return "/uss/ion/kakaoft/ReserveKakaoFTModify";
     }
 	
+    
+	/**
+	 * 채널 아이디별 등록 친구톡 템플릿 목록 팝업화면 관리자페이지
+	 * @param ChannelIDVO
+	 * @param request
+	 * @param model
+	 * @return
+	 * @throws Exception
+	 */
+	@RequestMapping("/uss/ion/kakaoft/KakaoFTChannelIDTemplateListPopupAjax.do")
+	public String KakaoFTChannelIDTemplateListPopupAjax(@ModelAttribute("searchVO") ChannelIDVO channelIDVO,
+			HttpServletRequest request ,
+			ModelMap model) throws Exception {
+		
+		
+		try {
+			
+			LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+			String id = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+			if(id == "") {
+				return "redirect:/uat/uia/EgovLoginUsr.do";
+			}
+			
+			KakaoVO kakaoVO = new KakaoVO();
+
+			//페이징 처리
+			PaginationInfo paginationInfo = new PaginationInfo();
+			paginationInfo.setCurrentPageNo(channelIDVO.getPageIndex());
+			paginationInfo.setRecordCountPerPage(9);
+			paginationInfo.setPageSize(channelIDVO.getPageSize());
+			
+			kakaoVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+			kakaoVO.setLastIndex(paginationInfo.getLastRecordIndex());
+			kakaoVO.setRecordCountPerPage(9);
+			
+			kakaoVO.setSenderKey(channelIDVO.getSenderKey());
+			kakaoVO.setPage(Integer.toString(channelIDVO.getPageIndex()));
+			kakaoVO.setSearchKeyword(channelIDVO.getSearchKeyword());
+			kakaoVO.setUserId(channelIDVO.getUserId());
+			
+			String templateStatus = channelIDVO.getTemplateStatus();
+			String keyword = channelIDVO.getSearchKeyword();
+			
+			/*if(keyword != null && keyword != "") {
+				kakaoVO.setSearchKeyword(keyword);
+			}else {
+				kakaoVO.setSearchKeyword("");
+			}*/
+			
+			if("".equals(kakaoVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
+				kakaoVO.setSearchSortCnd("friendId");
+				kakaoVO.setSearchSortOrd("desc");
+			}
+			
+			//채널 아이디 정보
+			String yellowId = kakaoVO.getYellowId();
+			
+			kakaoVO.setCount("9"); //페이지 별 템플릿 개수 9개로 
+			List<KakaoVO> kakaoTemplateInfoList = new ArrayList<KakaoVO>();
+			kakaoTemplateInfoList = kakaoFtTemplateService.selectKakaoFriendsTemplateList(kakaoVO);
+			
+			model.addAttribute("kakaoVO", kakaoVO);
+			model.addAttribute("paginationInfo", paginationInfo);
+			model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList); //친구톡 템플릿 리스트 
+			paginationInfo.setTotalRecordCount(kakaoTemplateInfoList.size() > 0 ? ((KakaoVO)kakaoTemplateInfoList.get(0)).getTotCnt() : 0);
+			
+		} catch (Exception e) {
+			System.out.println("KakaoFTChannelIDTemplateListPopupAjax Contrller Error ::: " + e);
+		}
+		
+		return "uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateListPop";
+	}
+	
+	/**
+	 * 채널 아이디별 등록 친구톡 템플릿 상세내용 팝업화면 관리자페이지
+	 * @param ChannelIDVO
+	 * @param request
+	 * @param model
+	 * @return
+	 * @throws Exception
+	 */
+	@RequestMapping("/uss/ion/kakaoft/KakaoFTChannelIDTemplateDetailPopupAjax.do")
+	public String KakaoFTChannelIDTemplateDetailPopupAjax(@ModelAttribute("searchVO") ChannelIDVO channelIDVO,
+			HttpServletRequest request ,
+			ModelMap model) throws Exception {
+		
+		
+		try {
+			
+				LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+				String id = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+				if(id == "") {
+					return "redirect:/uat/uia/EgovLoginUsr.do";
+				}
+				
+				KakaoVO kakaoVO = new KakaoVO();
+				kakaoVO.setSenderKey(channelIDVO.getSenderKey());
+				kakaoVO.setFriendId(channelIDVO.getTemplateCode());
+				kakaoVO.setUserId(channelIDVO.getUserId());
+				
+				String senderKey = kakaoVO.getSenderKey();
+				model.addAttribute("senderKey", senderKey);
+				
+				//친구톡 템플릿 조회하기
+				KakaoVO resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO);
+				model.addAttribute("resultTemplateVO", resultTemplateVO);
+				
+				// 사용자 아이디를 이용한 발신프로필 조회
+				kakaoVO.setUserId(channelIDVO.getUserId()); 
+				List<KakaoVO> selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
+				model.addAttribute("kakaoProfileList", selectKakaoProfileList);
+				
+			} catch (Exception e) {
+				System.out.println("KakaoFTChannelIDTemplateDetailPopupAjax Contrller Error ::: " + e);
+			}
+		
+		return "uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateDetailPop";
+	}
+    
     /**
      * 카톡 전송사 발송 결과 코드 리스트
      * @param MjonMsgResultCodeVO
src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
--- src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoSendUtil.java
@@ -12,6 +12,7 @@
 import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiJsonSave;
 import itn.let.mjo.msg.service.MjonMsgVO;
 import itn.let.mjo.msgdata.service.MjonMsgDataService;
+import itn.let.mjo.spammsg.web.ComGetSpamStringParser;
 import itn.let.sym.site.service.JoinSettingVO;
 import itn.let.uss.umt.service.MberManageVO;
 
@@ -149,6 +150,134 @@
 		return kakaoVO;
 	}
 	
+	
+	/**
+	* @Method Name : kakaoFTSendPrice
+	* @작성일 : 2024. 1. 17.
+	* @작성자 :  WYH
+	* @Method 설명 : 카카오 친구톡 전송 가격 설정
+	*/
+	public KakaoVO kakaoFTSendPrice(KakaoVO kakaoVO) throws Exception {
+		
+		//사용자 현재 보유 금액 불러오기(문자 발송 금액 차감 이전 금액)
+		String befCash = kakaoVO.getBefCash();
+		
+		//VO에서 현재 보유금액이 없으면 디비에서 조회해서 불러옴
+		if("".equals(befCash) || befCash == null) {
+			
+		}
+		MjonMsgVO mjonMsgVO = new MjonMsgVO();
+		mjonMsgVO.setUserId(kakaoVO.getUserId());
+		String userMoney = mjonMsgDataService.selectBeforeCashData(mjonMsgVO);
+		String userPoint = mjonMsgDataService.selectBeforePointData(mjonMsgVO);
+		
+		//1.시스템 기본 단가 정보 불러오기
+		JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
+		
+		//2.사용자 개인 단가 정보 불러오기
+		MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(kakaoVO.getUserId());
+		Float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
+		
+		/** 대체문자 여부 체크(있으면 대체문자 가격으로 없으면 카카오톡 가격으로) */
+		//대체문자 발송 여부 확인
+		if(kakaoVO.getSubMsgSendYn().equals("Y")) {
+			
+			
+			String charset = "euc-kr"; 											//문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
+			int callToCnt = kakaoVO.getCallToList().length;
+			String sendType = "";
+			
+			for(int count =0; count < callToCnt; count++) {
+				String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
+				if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
+					tempSubMagTxt = kakaoFTSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
+				}
+				int bytes = tempSubMagTxt.getBytes(charset).length;
+				
+				if(bytes < 2000) {
+					if(bytes > 90) {
+						sendType = "MMS";
+						break;
+					}else {
+						sendType = "SMS";
+					}
+				}else {
+					kakaoVO.setResultCode("2000");
+					return kakaoVO;
+				}
+			}
+			
+			if(sendType.equals("MMS")) {
+				//협의 단가가 없으면 시스템 단가로 지정
+				if(mberManageVO.getLongPrice() < 1) {
+					kakaoFtPrice = sysJoinSetVO.getLongPrice();
+					
+					kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
+					kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
+					kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
+				}else {
+					kakaoFtPrice = mberManageVO.getLongPrice();
+					
+					kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
+					kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
+					
+					if(mberManageVO.getKakaoFtPrice() < 1) {
+						kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
+					}else {
+						kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
+					}
+				}
+			}else {
+				//협의 단가가 없으면 시스템 단가로 지정
+				if(mberManageVO.getShortPrice() < 1) {
+					kakaoFtPrice = sysJoinSetVO.getShortPrice();
+					
+					kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
+					kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
+					kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
+				}else {
+					kakaoFtPrice = mberManageVO.getShortPrice();
+					
+					kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
+					kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
+					
+					if(mberManageVO.getKakaoFtPrice() < 1) {
+						kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
+					}else {
+						kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
+					}
+				}
+			}
+		}else {
+			
+			if(kakaoFtPrice < 1) { //협의 단가가 없으면 시스템 단가로 지정
+				kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice();
+				
+				kakaoVO.setSmsPrice(sysJoinSetVO.getShortPrice());
+				kakaoVO.setMmsPrice(sysJoinSetVO.getLongPrice());
+				kakaoVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
+			}else {
+				kakaoVO.setSmsPrice(mberManageVO.getShortPrice());
+				kakaoVO.setMmsPrice(mberManageVO.getLongPrice());
+				kakaoVO.setKakaoFtPrice(mberManageVO.getKakaoFtPrice());
+			}
+		}
+		
+		/** 전송인원 확인*/
+		int totCallCnt = kakaoVO.getCallToList().length;
+		Float kakaoTotPrice = totCallCnt * kakaoFtPrice; // 총결제 금액  = 총 전송수량 * 카카오 친구톡 단가
+		String totPrice = kakaoTotPrice.toString();
+		System.out.println("@@@@@@@   : "+kakaoTotPrice  +" =  "+totCallCnt+"  *  "+kakaoFtPrice);
+		
+		kakaoVO.setEachPrice(kakaoFtPrice.toString());
+		kakaoVO.setBefCash(userMoney); // 고객 충전금액
+		kakaoVO.setBefPoint(userPoint); // 고객 충전 포인트
+		kakaoVO.setTotPrice(totPrice); // 총 카카오 전송 금액
+		
+		return kakaoVO;
+	}
+	
+	
 	/** 
 	 * @methodName	: selectSendPriceOfKakaoAtAndSmsAndMms 
 	 * @author		: 이호영
@@ -170,6 +299,10 @@
 		// 사용자 개인 단가가 없으면 시스템 단가로
 		if(mberManageVO.getKakaoAtPrice() == 0.0f)
 			mberManageVO.setKakaoAtPrice(sysJoinSetVO.getKakaoAtPrice());
+		
+		//카카오 친구톡 개인 단가가 없는 경우 시스템 단가로
+		if(mberManageVO.getKakaoFtPrice() == 0.0f)
+			mberManageVO.setKakaoFtPrice(sysJoinSetVO.getKakaoFtPrice());
 		
 		
 		// SMS 인경우
@@ -284,6 +417,84 @@
 		return kakaoVO;
 	}
 	
+	
+	/**
+	* @Method Name : kakaoFTSendMsg
+	* @작성일 : 2024. 1. 17.
+	* @작성자 :  우영두
+	* @Method 설명 : 카카오 친톡 전송 메세지 설정
+	*/
+	public KakaoVO kakaoFTSendMsg(KakaoVO kakaoVO) throws Exception {
+			List<KakaoVO> kakaoSendList = new ArrayList<KakaoVO>();
+			//전체 받는사람 수량만큼 반복 확인
+			int callToCnt = kakaoVO.getCallToList().length;	
+		try {
+			for(int count =0; count < callToCnt; count++) {
+				
+				KakaoVO setSendMsgVO = new KakaoVO();
+				
+				setSendMsgVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
+				// 카카오 전송내용 설정
+				// 변환문자 포함(Y), 미포함(N)
+				if(kakaoVO.getTxtReplYn().equals("Y")) {
+					
+					String templateContent = kakaoFTSubMagTxtRepl(kakaoVO.getTemplateContent(), kakaoVO, count);
+					setSendMsgVO.setTemplateContent(templateContent);
+					
+				}else {
+					
+					// 템플릿 내용 설정
+					setSendMsgVO.setTemplateContent(kakaoVO.getTemplateContent());
+				}
+				
+				//대체문자 포함(Y), 미포함(N)
+				if(kakaoVO.getSubMsgSendYn().equals("Y")) {
+					
+					String charset = "euc-kr";	//문자 바이트 계산에 필요한 캐릭터 셋 : 한글 2Byte로 계산
+					
+					String tempSubMagTxt = kakaoVO.getSubMsgTxt().replace("\r\n", "\n");
+					kakaoVO.setKakaoSubMagOrgnlTxt(tempSubMagTxt);
+					if(kakaoVO.getSubMsgTxtReplYn().equals("Y")) {
+						tempSubMagTxt = kakaoFTSubMagTxtRepl(tempSubMagTxt, kakaoVO, count);
+					}
+					
+					setSendMsgVO.setSubMsgTxt(tempSubMagTxt);
+					
+					int FrBytes = tempSubMagTxt.getBytes(charset).length;
+					
+					//메세지 길이가 90Byte가 초과시 MMS
+					if(FrBytes > 90) {
+						setSendMsgVO.setSubMsgType("MMS");
+					}else {// 아니면 SMS
+						setSendMsgVO.setSubMsgType("SMS");
+					}
+				}
+				
+				if(kakaoVO.getBizJsonYn().equals("Y")) {
+					kakaoVO.setDestPhone(kakaoVO.getCallToList()[count]); // 수신 번호
+					
+					String[] varValInfo = null;
+					if( kakaoVO.getVarValList().size() != 0) {
+						varValInfo = kakaoVO.getVarValList().get(count);
+					}
+					String jsonFileName = kakaoApiJsonSave.kakaoApiFTJsonSave(kakaoVO);
+//					String jsonFileName = kakaoApiJsonSave.kakaoApiJsonSave(kakaoVO, kakaoVO.getVarValList().get(count));
+					setSendMsgVO.setBizJsonName(jsonFileName); //json 파일명
+				}
+				
+				kakaoSendList.add(setSendMsgVO);
+			}
+			kakaoVO.setKakaoSendList(kakaoSendList);
+			
+		} catch (Exception e) {
+			System.out.println(e.toString());
+			e.printStackTrace();
+		}
+		
+		return kakaoVO;
+	}
+	
+	
 	public String kakaoSendMsgTest(KakaoVO kakaoVO) throws Exception {
 		String templateContent = "";
 		try {
@@ -339,4 +550,159 @@
 		}
 		return tempSubMagTxt;
 	}
+	
+	public String kakaoFTSubMagTxtRepl(String tempSubMagTxt, KakaoVO kakaoVO, int count) throws Exception{
+
+		List<String[]> varValList = kakaoVO.getVarValList();
+		
+		tempSubMagTxt = getKakaoFTCntReplace(varValList.get(count)[0], tempSubMagTxt);
+		
+		return tempSubMagTxt;
+	}
+	
+	/*
+	 * 카카오 친구톡 치환 내용에 대한 변환 처리
+	 * 
+	 * 
+	 * */
+	public String getKakaoFTCntReplace(String varValStr, String contents) throws Exception{		
+		
+		String[] array = varValStr.split("¶");
+		String tmpContents = contents;
+		for(int j=0; j < array.length; j++) {
+			String tmpVarVal = array[j].replaceAll("§", ",");
+			if(tmpVarVal.length() > 0) {
+				
+				if(tmpContents.contains("#{이름}") && j == 0) {
+					tmpContents = tmpContents.replaceAll("\\#\\{이름\\}", tmpVarVal);
+				}
+				
+				//1번째에 핸드폰 번호가 포함 되어 있어서 건너뜀
+				
+				if(tmpContents.contains("#{1}") && j == 2) {
+					tmpContents = tmpContents.replaceAll("\\#\\{1\\}", tmpVarVal);
+				}
+				
+				if(tmpContents.contains("#{2}") && j == 3) {
+					tmpContents = tmpContents.replaceAll("\\#\\{2\\}", tmpVarVal);
+				}
+				
+				if(tmpContents.contains("#{3}") && j == 4) {
+					tmpContents = tmpContents.replaceAll("\\#\\{3\\}", tmpVarVal);
+				}
+				
+				if(tmpContents.contains("#{4}") && j == 5) {
+					tmpContents = tmpContents.replaceAll("\\#\\{4\\}", tmpVarVal);
+				}
+				
+			}
+			
+		}
+		
+		return tmpContents;
+	}
+	
+	/*
+	 * 카카오 친구톡 치환문자 내용 스팸 필터
+	 * 치환변수 내용 및 템플릿 내용, 스팸필터 단어 리스트를 전달하면 스팸 문구 포함 문구 리턴
+	 * 없으면 공백을 리턴
+	 * 
+	 * */
+	public String getKakaoFTCntRepToSpamFilter(List<String[]> varValList, List<String> resultSpamTxt, String contents) throws Exception {
+		String spmFilterTxt = "";
+		for(int i=0; i < varValList.size(); i++) {
+			
+			String tmpContents = getKakaoFTCntReplace(varValList.get(i)[0], contents);
+			
+			//입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함.
+			String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim();
+			//List<String> jasoList = HangulParser.disassemble(resultParser);
+			//String assembleStr = HangulParser.assemble(jasoList);
+			
+			//데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함.
+			int spmCnt = 0;
+			for(String spmTxt : resultSpamTxt) {
+				
+				String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
+				
+				if(resultParser.contains(parserStr)) {
+					
+					//스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌.
+					spmFilterTxt += spmTxt + ",";
+					spmCnt++;
+					
+				}
+				
+			}
+			
+			if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리
+				
+				if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
+					// 처음부터 idx 만큼 잘라낸 나머지 글자 
+					spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1); 	
+					
+				}
+				
+				System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
+				
+				return spmFilterTxt;
+				
+			}
+			
+		}
+		return "";
+	}
+	
+	/*
+	 * 치환문자가 없는 내용에 대한 스팸필터링 처리
+	 * 
+	 * */
+	public String getKakaoFTCntToSpamFilter(List<String> resultSpamTxt, String contents) throws Exception {
+		String spmFilterTxt = "";
+		//for(int i=0; i < varValList.size(); i++) {
+			//String[] array = varValList.get(i)[0].split("¶");
+			String tmpContents = contents;
+			System.out.println(tmpContents);
+			
+			//입력 문장에 대해서 우회 문장 또는 특수 기호 입력 제거 등 문장 재구성 처리, 한글 자모음 분리 및 재조함도 함께 처리함.
+			String resultParser = ComGetSpamStringParser.getSpamTextParse(tmpContents).trim();
+			//List<String> jasoList = HangulParser.disassemble(resultParser);
+			//String assembleStr = HangulParser.assemble(jasoList);
+			
+			System.out.println("++++++++++++++ spam resultParser ::: "+resultParser);
+			
+			//데이터베이스에 등록된 스팸문구와 일치하는 단어/문구가 있는지 체크함.
+			int spmCnt = 0;
+			for(String spmTxt : resultSpamTxt) {
+				
+				String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
+				
+				if(resultParser.contains(parserStr)) {
+					
+					//스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌.
+					spmFilterTxt += spmTxt + ",";
+					spmCnt++;
+					
+				}
+				
+			}
+			
+			if(spmCnt > 0) {//스팸문자가 포함되어 있으면 문자열 끝 , 단어 삭제 처리
+				
+				if (StringUtil.getWordRight(spmFilterTxt.trim(), 1).equals(",")) {
+					// 처음부터 idx 만큼 잘라낸 나머지 글자 
+					spmFilterTxt = StringUtil.getWordLeft(spmFilterTxt.trim(), 1); 	
+					
+				}
+				
+				System.out.println("++++++++++++++ spmFilterTxt ::: "+spmFilterTxt);
+				
+				return spmFilterTxt;
+				
+			}
+			
+		//}
+		return "";
+	}
+	
 }
src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
--- src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
+++ src/main/java/itn/let/kakao/kakaoComm/KakaoVO.java
@@ -238,6 +238,7 @@
 	private String imageTitle;						//친구톡 이미지 제목
 	private String imageLink;						//친구톡 이미지 클릭시 링크 주소
 	private String jsonText;						//json 파일 생성시 내용 저장(혹시 몰라서 내용도 별도로 저장함)
+	private String imageFileName;					//친구톡 이미지 원본 파일명
 
 	private String successDay;
 	private String successMonth;
@@ -1110,6 +1111,14 @@
 		this.jsonText = jsonText;
 	}
 
+	public String getImageFileName() {
+		return imageFileName;
+	}
+
+	public void setImageFileName(String imageFileName) {
+		this.imageFileName = imageFileName;
+	}
+
 	public String getSbscrbDe() {
 		return sbscrbDe;
 	}
src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java
--- src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java
+++ src/main/java/itn/let/kakao/kakaoComm/kakaoApi/KakaoApiJsonSave.java
@@ -3,18 +3,14 @@
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
 import java.util.Date;
 import java.util.List;
 
-import org.json.simple.JSONObject;
 import org.json.simple.JSONArray;
-
+import org.json.simple.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
@@ -159,4 +155,111 @@
 		}
 		return jsonFileName;
 	}
+	
+	/*
+	 * 친구톡 발송시 이미지, 버튼 추가에 따른 Json 파일 생성 
+	 * 2024.01.17
+	 * 우영두
+	 * 파일은 하나만 생성해서 동일하게 사용함.
+	 * 
+	 * */
+	@SuppressWarnings("unchecked")
+	public String kakaoApiFTJsonSave(KakaoVO kakaoVO) {
+		// json파일 저장
+		
+		Date nowDate = new Date();
+		SimpleDateFormat todayFrom = new SimpleDateFormat("yyyyMMdd");
+		SimpleDateFormat timeFrom = new SimpleDateFormat("HHmmss");
+		String jsonFileName = mjonBizJsonDir+"/"+kakaoVO.getUserId()+"/"+todayFrom.format(nowDate)+"/"+kakaoVO.getSendType(); // 아이디/날짜/타입
+		
+		String fileName = timeFrom.format(nowDate)+"_"+kakaoVO.getMsgGroupId()+".json";
+		
+		try {
+			
+			File userIdFile = new File(jsonFileName);
+			if(!userIdFile.exists()) {
+				userIdFile.mkdirs(); // 없으면 하위 디렉토리 까지 생성
+				jsonFileName = jsonFileName +"/"+fileName;
+			}else {
+				
+				jsonFileName = jsonFileName +"/"+fileName;
+				System.out.println("jsonFileName  : "+jsonFileName);
+				File file1 = new File(jsonFileName);
+				if (file1.isFile()) {
+					return jsonFileName;
+				}
+			}
+			
+			//KakaoReturnVO templateDetail = kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
+			
+			// 버튼리스트 JSON 생성
+			JSONArray buttonList = new JSONArray();
+			for(KakaoButtonVO buttonInfoVO : kakaoVO.getButtonVOList()) {
+				JSONObject buttonInfo = new JSONObject();
+				
+				buttonInfo.put("name", buttonInfoVO.getName());
+				buttonInfo.put("type", buttonInfoVO.getLinkType());
+				
+				if(buttonInfoVO.getLinkType().equals("WL")) {
+					buttonInfo.put("url_mobile", buttonInfoVO.getLinkMo());
+					buttonInfo.put("url_pc", buttonInfoVO.getLinkPc());
+				}else if(buttonInfoVO.getLinkType().equals("AL")) {
+					buttonInfo.put("scheme_ios", buttonInfoVO.getLinkIos());
+					buttonInfo.put("scheme_android", buttonInfoVO.getLinkAnd());
+				}else if(buttonInfoVO.getLinkType().equals("BC")) {
+					// 상담톡 진행시 등록해야함
+				}else if(buttonInfoVO.getLinkType().equals("BT")) {
+					// 봇 전환 시 전달
+				}
+				buttonList.add(buttonInfo);
+			}
+			
+			// 강조유형 JSON 생성
+			JSONObject templateImageInfo = new JSONObject();
+			JSONObject templateImageExtInfo = new JSONObject();
+			String imageType = kakaoVO.getImageType();
+			
+			if(!imageType.equals("")) {
+				templateImageInfo.put("img_url", kakaoVO.getTemplateImageUrl());
+				templateImageInfo.put("img_link", kakaoVO.getImgLink());
+			}
+			
+			if(imageType.equals("W")) {
+				templateImageExtInfo.put("wide", "Y");
+			}
+			
+			
+			JSONObject jo = new JSONObject();
+			
+			if(buttonList.size() != 0) {
+				jo.put("button", buttonList);
+			}
+			
+			if(templateImageInfo.size() != 0) {
+				jo.put("image", templateImageInfo);
+			}
+			
+			if(templateImageExtInfo.size() != 0) {
+				jo.put("extra", templateImageExtInfo);
+			}
+			
+			// 입력 json 데이터를 파일로 변경
+			String jsonStr = jo.toString();
+			System.out.println("jsonFileName  : "+jsonFileName);
+		
+			File outPut = new File(jsonFileName);
+			outPut.createNewFile();
+			
+			BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outPut), "utf-8"));
+			bw.write(jsonStr);
+			bw.close();
+			
+		} catch (IOException e) {
+			System.out.println("json 생성 실패");
+			e.printStackTrace();
+		}
+		return jsonFileName;
+	}
+	
+	
 }
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
@@ -15,8 +15,14 @@
 	
 	//카카오 알림톡 발신
 	public MjonMsgReturnVO insertKakaoAtSandAjax(KakaoVO kakaoVO) throws Exception;
+
+	//카카오 친구톡 발신
+	public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception;
 	
 	//카카오 알림톡 전송 실패 환불리스트 조회
 	public void selectKakaoAtSentRefundList() throws Exception;
 	
+	//카카오 친구톡 전송 실패 환불리스트 조회
+	public void selectKakaoFtSentRefundList() throws Exception;
+	
 }
src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
--- src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/service/impl/KakaoAlimTalkDAO.java
@@ -7,7 +7,6 @@
 
 import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
 import itn.let.kakao.kakaoComm.KakaoVO;
-import itn.let.mjo.msg.service.MjonMsgVO;
 
 @Repository("kakaoAlimTalkDAO")
 public class KakaoAlimTalkDAO extends EgovAbstractDAO {
@@ -62,6 +61,11 @@
 		return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoAtSentRefundList");
 	}
 	
+	@SuppressWarnings("unchecked")
+	public List<KakaoVO> selectKakaoFtSentRefundList() throws Exception{
+		return (List<KakaoVO>) list("kakaoAlimTalkDAO.selectKakaoFtSentRefundList");
+	}
+	
 	public KakaoVO selectKakaoAtUmid(KakaoVO kakaoVO) throws Exception{
 		return (KakaoVO) select("kakaoAlimTalkDAO.selectKakaoAtUmid", kakaoVO); 
 	}
@@ -77,4 +81,17 @@
 	public void updateKakaoAtNotSend(KakaoVO kakaoVO) {
 		select("kakaoAlimTalkDAO.updateKakaoAtNotSend", kakaoVO);
 	}
+	
+
+	public void updateKakaoFtSend(KakaoVO kakaoVO) {
+		select("kakaoAlimTalkDAO.updateKakaoFtSend", kakaoVO);
+	}
+	
+	public void updateKakaoFtSubMsgSend(KakaoVO kakaoVO) {
+		select("kakaoAlimTalkDAO.updateKakaoFtSubMsgSend", kakaoVO);
+	}
+	
+	public void updateKakaoFtNotSend(KakaoVO kakaoVO) {
+		select("kakaoAlimTalkDAO.updateKakaoFtNotSend", kakaoVO);
+	}
 }
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
@@ -409,7 +409,343 @@
 		}
 		return returnVO;
 	}
+	
+	
+	
+	//카카오 친구톡 발신
+	@Override
+	public MjonMsgReturnVO insertKakaoFtSendAjax(KakaoVO kakaoVO) throws Exception {
+		
+		MjonMsgReturnVO returnVO = new MjonMsgReturnVO();
+		try {
+			String agentCode = "04"; // 다우기술 agent 코드 고정
+			String msgType = "9";	 // 카카오 알림톡 전송 코드 : 8번
+			
+			int totCnt = 1;									// 문자 리스트 추가 수량 
+			int resultCnt = 0;								// 최종전송 수량
+			int callToCnt = kakaoVO.getCallToList().length;	// 전체 받는사람 건수
+			
+			//Controller에서 전달 받은 분할 시간 정보 리스트 
+			List<String> dividDayList = kakaoVO.getDividDay();
+			//String sendTime = kakaoVO.getReqDate();
+			String[] phoneList = kakaoVO.getCallToList();	//받는사람 연락처 리스트
+			
+			//카카오 알림톡 전송 리스트
+			List<KakaoVO> kakaoFtSendList = new ArrayList<KakaoVO>();
+			
+			//야간스미싱 알림여부 정보 불러오기
+			JoinSettingVO joinSettingVO = siteManagerDAO.selectAdminNotiDetail();
+			String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti();
+			
+			//스팸,스미싱이어도 딜레이없이 문자 전송을 처리할지 선택 상태값 변수
+			boolean spamSmishingPassStatus = false;	//야간스미싱 알림여부가 활성화인 경우 false, 비활성화인경우 true 값을 가지도록 한다.
+			
+			//야간스미싱알리 여부가 비활성화 인경우 무조건 문자를 즉시 보내도록 한다.
+			//현재는 평일, 주말, 휴일 상관없이 N 이면 30분 딜레이 없이 발송 처리하도록 함.
+			if(holiSmishingNoti.equals("Y")) {
+				
+				MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO();
+				
+				msgAlarmSetVO.setUseYn("Y");
+				msgAlarmSetVO.setFirstIndex(0);
+				
+				List<MsgAlarmSetVO> resultAlarmList = msgHolidayDAO.selectAlarmSettingList(msgAlarmSetVO);
+				
+				Calendar calendar = Calendar.getInstance(); 
+				int year = calendar.get(Calendar.YEAR);
+				
+				MsgHolidayVO msgHolidayVO = new MsgHolidayVO();
+				msgHolidayVO.setFirstIndex(0);
+				msgHolidayVO.setRecordCountPerPage(100);
+				msgHolidayVO.setSearchHoliYear(Integer.toString(year));
+				
+				List<MsgHolidayVO> resultHolidayList = msgHolidayDAO.selectMsgHolidayList(msgHolidayVO);
+				
+				MjonHolidayApi mjonHolidayApi = new MjonHolidayApi();
+				
+				boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList);
+				 
+				spamSmishingPassStatus = smishingAlarmPassSts;
+			}else {
+				
+				spamSmishingPassStatus = true;
+				
+			}
+			
+			String atSmishingYn = kakaoVO.getAtSmishingYn();
+			
+			if(spamSmishingPassStatus) {
+				atSmishingYn = "N";
+			}
+					
+/** 카카오 알림톡 전송  리스트 생성 (시작)-------------------------------------------*/
+			for(int i = 0; i < callToCnt; i++) {
+			
+				KakaoVO kakaoSandInfo = new KakaoVO(); // 전송설정VO
+				
+				kakaoSandInfo.setMsgId(idgenMsgId.getNextStringId());	// 문자 Id 설정
+				kakaoSandInfo.setMsgGroupId(kakaoVO.getMsgGroupId());	// 문자 그룹ID 설정
+				kakaoSandInfo.setUserId(kakaoVO.getUserId());			// 사용자 ID
+				kakaoSandInfo.setAgentCode(agentCode);					// 전송 agent 설정
+				
+				kakaoSandInfo.setSenderKey(kakaoVO.getSenderKey());
+				kakaoSandInfo.setTemplateCode(kakaoVO.getTemplateCode());
+				
+				
+				kakaoSandInfo.setCallTo(phoneList[i]);					// 받는사람 전화번호
+				kakaoSandInfo.setCallFrom(kakaoVO.getCallFrom());		// 보내는사람 전화전호
+				kakaoSandInfo.setMsgType(msgType);						// 문자전송 타입 설정
+				
+				
+				List<KakaoVO> kakaoSendMsgList = kakaoVO.getKakaoSendList();
+				/**문자내용 치환 처리 (시작) --------------------------------------------*/
+				kakaoSandInfo.setTemplateContent(kakaoSendMsgList.get(i).getTemplateContent()); //템플릿 내용 또는 치환 템플릿 내용
+				/**문자내용 치환 처리 (끝) ---------------------------------------------*/
+				
+				kakaoSandInfo.setTemplateTitle(kakaoSendMsgList.get(i).getTemplateTitle());
 
+				/**json파일 여부 (시작) --------------------------------------------*/
+				kakaoSandInfo.setBizJsonYn(kakaoVO.getBizJsonYn());
+				if(kakaoVO.getBizJsonYn().equals("Y")){
+					kakaoSandInfo.setBizJsonName(kakaoSendMsgList.get(i).getBizJsonName());
+				}
+				/**json파일 여부 (끝) ---------------------------------------------*/
+				
+				/**대체문자 처리 (시작) --------------------------------------------*/
+				kakaoSandInfo.setSubMsgSendYn(kakaoVO.getSubMsgSendYn()); // 대체문자 전송여부 설정
+				if(kakaoVO.getSubMsgSendYn().equals("Y")) {
+					kakaoSandInfo.setSubMsgType(kakaoSendMsgList.get(i).getSubMsgType());	// 대체문자 전송 타입
+					kakaoSandInfo.setSubMsgTxt(kakaoSendMsgList.get(i).getSubMsgTxt());		// 대체문자 전송 내용
+				}
+				/**대체문자 처리 (끝) ---------------------------------------------*/
+				
+				/**전송시간 설정 (시작)------------------------------------------------*/
+				if(!kakaoVO.getReserveYn().equals("N")) {
+					/** 예약 발송 설정 */
+					//분할 발송을 체크 한 경우
+					if(kakaoVO.getDivideChk().equals("Y")) {
+						
+						kakaoSandInfo.setReqDate(dividDayList.get(i)); //분할 문자 예약 시간 입력해주기
+						
+					}else {
+						
+						kakaoSandInfo.setReqDate(kakaoVO.getReqDate());
+						
+					}
+				}else {
+					/** 즉시 발송 설정 */
+					Date now = new Date();
+					SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+					kakaoVO.setReqDate(sdFormat.format(now));
+					kakaoSandInfo.setReqDate(sdFormat.format(now));
+					
+				}
+				
+				if(atSmishingYn.equals("Y")) {
+					String sandDate = "";
+					
+					if(kakaoVO.getDivideChk().equals("Y")) {
+						//분할 문자 예약 시간 입력해주기
+						sandDate = dividDayList.get(i);
+					}else {
+						//예약 시간 입력해주기
+						sandDate = kakaoVO.getReqDate();
+					}
+					
+					if(!kakaoVO.getReserveYn().equals("N")) {
+						/** 예약 발송 설정 */
+						if (i == 0) {
+							SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+							Date date = sdFormat.parse(sandDate);
+							
+							Calendar cal1 = Calendar.getInstance();
+							cal1.setTime(date); // 시간 설정
+							cal1.add(Calendar.MINUTE, 30); // 30분 연산
+							
+							String reqDate = sdFormat.format(cal1.getTime());
+							
+							System.out.println("@@@@@@@@@@@@@@  reqDate  : "+reqDate);
+							kakaoVO.setReqDate(reqDate);
+							kakaoSandInfo.setReqDate(reqDate);
+						}	
+						else {
+							if(kakaoVO.getDivideChk().equals("Y")) {
+								SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+								Date date = sdFormat.parse(sandDate);
+								
+								Calendar cal1 = Calendar.getInstance();
+								cal1.setTime(date); // 시간 설정
+								cal1.add(Calendar.MINUTE, 30); // 30분 연산
+								
+								String reqDate = sdFormat.format(cal1.getTime());
+								
+								System.out.println("@@@@@@@@@@@@@@  reqDate  : "+reqDate);
+								kakaoVO.setReqDate(reqDate);
+								kakaoSandInfo.setReqDate(reqDate);								
+							}
+						}
+					}else {
+						/** 즉시 발송 설정 */
+						SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+						Date date = sdFormat.parse(sandDate);
+						
+						Calendar cal1 = Calendar.getInstance();
+						cal1.setTime(date); // 시간 설정
+						cal1.add(Calendar.MINUTE, 30); // 30분 연산
+						
+						String reqDate = sdFormat.format(cal1.getTime());
+						
+						System.out.println("@@@@@@@@@@@@@@  reqDate  : "+reqDate);
+						kakaoVO.setReqDate(reqDate);
+						kakaoSandInfo.setReqDate(reqDate);						
+					}
+				}
+				
+				/**전송시간 설정 (끝)------------------------------------------------*/
+	
+				/**카카오 전송 데이터 추가*/
+				kakaoFtSendList.add(kakaoSandInfo);
+				
+			
+				int instCnt = 0;		// DB등록 완료 수량
+				//지금까지 루프 돌아간 것이 전체 수신자 갯수와 같으면 추가가 완료된 것으로 판단 되어 전송 해줌
+				if(totCnt == callToCnt) {
+					
+					if(kakaoFtSendList.size() > 0) {
+						instCnt =  kakaoAlimTalkDAO.insertKakaoAtDataInfo(kakaoFtSendList);
+					}
+					//총 디비 입력 건수 저장하기
+					resultCnt = resultCnt + instCnt;
+					
+				}else {
+					
+				}
+				totCnt++;
+				
+			}
+/** 카카오 알림톡 전송  리스트 (종료)-------------------------------------------*/
+			
+/**
+ * 1. 문자 발송 캐시 차감  ----------------------------------------------
+ * 2. 문자 그룹 테이블 등록  --------------------------------------------
+ */
+			
+			//문자 발송 캐시 차감 해주기
+			MjonPayVO mjonPayVO = new MjonPayVO();
+			
+			MjonMsgVO mjonMsgVO = new MjonMsgVO();
+			
+			//1건 이상 발송이 있는 경우만 캐쉬를 차감 시킨다.
+			//문자 발송 그룹 데이블에 추가
+			if(resultCnt > 0) {
+				
+				
+/** 발송 캐시 차감---------------------------------------------*/
+
+				
+				int totSendCnt = kakaoVO.getCallToList().length;
+				Float eachPrice = Float.parseFloat(kakaoVO.getEachPrice());
+				Float totPrice = eachPrice * resultCnt;
+				String strTotPrice = String.format("%.1f", totPrice);
+				
+				mjonMsgVO.setTotPrice(strTotPrice);//현재 합산 금액 셋팅
+				mjonPayVO.setCashId(idgenMjonCashId.getNextStringId());
+				mjonPayVO.setUserId(kakaoVO.getUserId());
+				mjonPayVO.setCash(-Float.parseFloat(strTotPrice));
+				mjonPayVO.setFrstRegisterId(kakaoVO.getUserId());
+				mjonPayVO.setMemo("카카오 친구톡 총 "+totSendCnt+"건 중 " + resultCnt + "건 발송");
+				mjonPayVO.setMsgGroupId(kakaoVO.getMsgGroupId());
+				
+				
+				mjonPayService.insertCash(mjonPayVO); //캐시차감 
+				mjonPayService.updateMemberCash(mjonPayVO); //회원정보 업데이트
+				
+/** 그룹 테이블 등록-------------------------------------------*/
+				
+				mjonMsgVO.setUserId(kakaoVO.getUserId());
+				mjonMsgVO.setMsgGroupId(kakaoVO.getMsgGroupId());
+				mjonMsgVO.setCallFrom(kakaoVO.getCallFrom());
+				mjonMsgVO.setSmsTxt(kakaoVO.getTemplateContent());
+				mjonMsgVO.setReqDate(kakaoVO.getReqDate());
+				mjonMsgVO.setMsgGroupCnt(Integer.toString(resultCnt));
+				mjonMsgVO.setMsgType(msgType);
+				mjonMsgVO.setAgentCode(agentCode);
+				mjonMsgVO.setEachPrice(kakaoVO.getEachPrice());
+				mjonMsgVO.setReserveYn(kakaoVO.getReserveYn());
+				mjonMsgVO.setBefCash(kakaoVO.getBefCash());
+				mjonMsgVO.setBefPoint(kakaoVO.getBefPoint());
+				mjonMsgVO.setKakaoSubMagOrgnlTxt(kakaoVO.getKakaoSubMagOrgnlTxt());
+				mjonMsgVO.setAtDelayYn(kakaoVO.getAtSmishingYn());
+				
+				//야간 스미싱 알림 비활성화인 경우 딜레이처리 안하도록 함 20240912 우영두 수정
+				if(spamSmishingPassStatus) {
+					mjonMsgVO.setAtDelayYn("N");
+				}else {
+					mjonMsgVO.setAtDelayYn(kakaoVO.getAtSmishingYn());
+				}
+				
+				if(kakaoVO.getBizJsonYn().equals("Y")) {
+					mjonMsgVO.setFileCnt("1");	
+				}else {
+					mjonMsgVO.setFileCnt("0");
+				}
+				
+				mjonMsgVO.setDelayYn(kakaoVO.getDelayYn());
+				
+				// 등록되어있는 그룹데이터가 있는지 조회
+				int msgGroupDataCnt = mjonMsgDAO.selectMsgGroupDataCntByGroupId(mjonMsgVO);
+				
+				// 등록되어 있는 그룹데이터가 없으면 insert, 있으면 update를 진행한다.
+				if(msgGroupDataCnt < 1) {
+					mjonMsgDAO.insertGroupMsgData(mjonMsgVO);
+					
+					/*
+					 * 현재 발송하는 카카오 친구톡 및 문자(단/장문) 발송 금액 정보를 mj_msg_group_id와 함께 디비에 저장해준다.
+					 * 환불할 때 각 단가를 사용하기 때문에 별도로 저장함.
+					 * 히스토리 기록을 위해서도 사용할 수 있을것 같음
+					 * 
+					 * */
+					kakaoAlimTalkDAO.insertKakaoSendPrice(kakaoVO);
+					
+					
+					try {
+						
+						//야간 스미싱 알림이 활성화 이고 알림 예외 일정에 포함되고, 스팸 또는 스미싱 의심 상태일 경우 문자정보 별도 저장처리 - 20240821 우영두 추가
+						if(holiSmishingNoti.equals("Y") && spamSmishingPassStatus && kakaoVO.getAtSmishingYn().equals("Y")) {
+							mjonMsgDAO.insertSpamPassMsgData(mjonMsgVO);
+						}
+						
+					} catch (Exception e) {
+						System.out.println("++++++++++++++++++++++++++++++ spamSmishingPassStatus 친구톡 야간 스미싱 알림 데이터 입력 오류 발생 !!!!");
+					}
+					
+					
+				}else {
+					mjonMsgDAO.updateMsgGroupDataForTotCntSum(mjonMsgVO);
+				}
+			}
+			
+			returnVO.setSendMsgCnt(Integer.toString(resultCnt));
+			
+		} catch (Exception e) {
+			// 실패
+			returnVO.setSendMsgCnt(Integer.toString(0)); //발송 건수 저장
+			returnVO.setSendMsgBlockCnt(Integer.toString(0)); //수신차단 건수 저장
+			returnVO.setAgentCode("01");
+			
+			System.out.println("=========================================================================");
+			System.out.println("+++++++++++++++++++++++++++++ 문자발송 ==> insertMsgDataInfo ERROR !!! : " + e);
+			System.out.println("=========================================================================");
+			return returnVO;
+		}
+		return returnVO;
+	}
+	
+	
+	/*
+	 * 카카오 알림톡 발송 실패에 따른 금액 환불 처리
+	 * 
+	 * */
 	@Override
 	public void selectKakaoAtSentRefundList() throws Exception {
 		
@@ -439,4 +775,45 @@
 			}
 		}
 	}
+	
+	
+	/*
+	 * 카카오 친구톡 발송 실패에 따른 금액 환불 처리
+	 * 카카오 친구톡 대체문자 선택에 대해 성공시 친구톡과 문자 간 금액 차액의 환불도 처리 됨. 
+	 * */
+	@Override
+	public void selectKakaoFtSentRefundList() throws Exception {
+		
+		/**
+		 * 1. 카카오 FT 전송성공 확인
+		 * 2. 카카오 FT 전송실패, 대채문자 전송확인
+		 * 3. 카카오 FT 전송 실패 확인
+		 */
+		List<KakaoVO> kakaoFtSentRefundList = kakaoAlimTalkDAO.selectKakaoFtSentRefundList();
+		
+		for(KakaoVO vo : kakaoFtSentRefundList) {
+			System.out.println(vo.getMsgGroupId() +"________결과 : " +vo.getRsltCode() +"     대체문자 전송 : "+vo.getSubMsgSendYn());
+			
+			if(vo.getRsltCode().equals("7000")) {//친구톡 발송 성공시
+			
+				kakaoAlimTalkDAO.updateKakaoFtSend(vo);
+				
+			}else if(vo.getSubMsgSendYn().equals("Y")) {//친구톡 발송 실패 했을 경우
+				
+				//대체문자 발송 UMID 번호 조회 - 알림톡 쿼리 동일하게 사용
+				KakaoVO info = kakaoAlimTalkDAO.selectKakaoAtUmid(vo);
+				
+				System.out.println("대체문자 전송 : " + info.getBizUmid());
+				
+				if (info.getBizUmid() != null) {//대체문자 발송 완료인 경우
+					kakaoAlimTalkDAO.updateKakaoAtSubMsgSend(vo);
+				}else {
+					kakaoAlimTalkDAO.updateKakaoFtNotSend(vo);	 
+				}
+				
+			}else {
+				kakaoAlimTalkDAO.updateKakaoFtNotSend(vo);
+			}
+		}
+	}
 }
src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkTemplateController.java
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkTemplateController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkTemplateController.java
@@ -871,6 +871,8 @@
 			LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
 			String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
 			
+			model.addAttribute("loginVO", loginVO);
+			
 			if(userId == "") {
 				model.addAttribute("message", "로그인 후 이용이 가능합니다.");
 				return "redirect:/web/user/login/login.do";
src/main/java/itn/let/kakao/user/kakaoFt/service/KakaoFriendsTalkTemplateService.java
--- src/main/java/itn/let/kakao/user/kakaoFt/service/KakaoFriendsTalkTemplateService.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/service/KakaoFriendsTalkTemplateService.java
@@ -14,4 +14,13 @@
 	
 	//친구톡 템플릿 삭제처리하기
 	int deleteKakaoFriendstalkTemplate(KakaoVO kakaoVO) throws Exception;
+	
+	//친구톡 템플릿 상세정보 조회
+	KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception;
+	
+	//친구톡 템플릿 수정처리하기
+	int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception;
+	
+	//친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리
+	int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception;
 }
src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateDAO.java
--- src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateDAO.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateDAO.java
@@ -107,4 +107,57 @@
 		
 		return result;
 	}
+	
+	
+	//친구톡 템플릿 상세정보 조회
+	public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{
+		
+		KakaoVO result = new KakaoVO();
+		
+		try {
+			
+			result = (KakaoVO) select("kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail", kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("selectKakaoFriendsTemplateDetail DAO Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	//친구톡 템플릿 수정처리하기
+	public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		
+		try {
+			
+			result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData", kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	//친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리
+	public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		
+		try {
+			
+			result = update("kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel",kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("updateKakaoFriendsTemplateData DAO Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
 }
src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateServiceImpl.java
--- src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateServiceImpl.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/service/impl/KakaoFriendsTalkTemplateServiceImpl.java
@@ -126,4 +126,102 @@
 		return result;
 	}
 	
+	//친구톡 템플릿 상세정보 조회
+	@Override
+	public KakaoVO selectKakaoFriendsTemplateDetail(KakaoVO kakaoVO) throws Exception{
+		
+		KakaoVO result = new KakaoVO();
+		
+		try {
+			
+			result = kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail(kakaoVO);
+			
+			//템플릿에 등록된 버튼정보가 있는지 확인하여 추가
+			if(result != null) {
+				
+				List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>();
+				MjonKakaoTemplateButtonVO buttonVO = new MjonKakaoTemplateButtonVO();
+				buttonVO.setTemplateId(kakaoVO.getFriendId());
+				buttonVO.setTemplateUseType("F");
+				buttonList = kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateButtons(buttonVO);
+				
+				if(buttonList != null) {
+					result.setButtonVOList(buttonList);
+				}
+				
+			}
+			
+		} catch (Exception e) {
+			System.out.println("selectKakaoFriendsTemplateDetail ServiceImple Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
+	//친구톡 템플릿 수정처리하기
+	@Override
+	public int updateKakaoFriendsTemplateData(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		int resultBtn = 0;
+		
+		try {
+			
+			//템플릿 정보 수정
+			result = kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData(kakaoVO);
+			
+			String friendId = kakaoVO.getFriendId();
+			if(result > 0) {
+				
+				//기존 버튼 정보 삭제
+				int resultBtnCnt = kakaoFriendsTalkTemplateDAO.deleteKakaoFriendstalkButtons(kakaoVO);
+				
+				//신규 버튼 정보 입력
+				for(KakaoButtonVO button: kakaoVO.getButtonVOList()) {
+					
+					MjonKakaoTemplateButtonVO tmpButtonVO = new MjonKakaoTemplateButtonVO();
+					
+					tmpButtonVO.setTemplateId(friendId);
+					tmpButtonVO.setTemplateUseType("F");
+					tmpButtonVO.setButtonName(button.getName());
+					tmpButtonVO.setButtonLinktype(button.getLinkType());
+					tmpButtonVO.setButtonLinkpc(button.getLinkPc());
+					tmpButtonVO.setButtonLinkmo(button.getLinkMo());
+					tmpButtonVO.setButtonLinkios(button.getLinkIos());
+					tmpButtonVO.setButtonLinkand(button.getLinkAnd());
+					tmpButtonVO.setUserId(kakaoVO.getUserId());
+					
+					int resultCnt = kakaoFriendsTalkTemplateDAO.insertKakaoFriendsTemplateButtonData(tmpButtonVO);
+					resultBtn = resultBtn + resultCnt;
+					
+				}
+				
+			}
+			
+		} catch (Exception e) {
+			System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e);
+		}
+		
+		return result;
+	}
+	
+	//친구톡 템플릿 이미지 삭제시 템플릿 데이터 변경 처리
+	@Override
+	public int updateKakaoFriendsTemplateImageDataDel(KakaoVO kakaoVO) throws Exception{
+		
+		int result = 0;
+		
+		try {
+			
+			result = kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel(kakaoVO);
+			
+		} catch (Exception e) {
+			System.out.println("updateKakaoFriendsTemplateData ServiceImple Error !!! " + e);
+		}
+		
+		return result;
+		
+	}
+	
 }
src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
--- src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkSendController.java
@@ -1,30 +1,57 @@
 package itn.let.kakao.user.kakaoFt.web;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
 import java.util.List;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.ModelAttribute;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.servlet.ModelAndView;
 
+import egovframework.rte.fdl.idgnr.EgovIdGnrService;
 import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
 import itn.com.cmm.EgovMessageSource;
 import itn.com.cmm.LoginVO;
 import itn.com.cmm.util.MJUtil;
 import itn.com.utl.fcc.service.EgovStringUtil;
+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.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
+import itn.let.mjo.mjocommon.MjonCommon;
+import itn.let.mjo.mjocommon.MjonHolidayApi;
 import itn.let.mjo.msgdata.service.MjonMsgDataService;
+import itn.let.mjo.msgdata.service.MjonMsgDataVO;
+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.mjo.symbol.service.MjonSymbolService;
 import itn.let.mjo.symbol.service.MjonSymbolVO;
+import itn.let.sym.site.service.EgovSiteManagerService;
+import itn.let.sym.site.service.JoinSettingVO;
+import itn.let.uss.umt.service.EgovUserManageService;
+import itn.let.uss.umt.service.MberManageVO;
+import itn.let.uss.umt.service.UserManageVO;
 
 @Controller
 public class KakaoFriendsTalkSendController {
 
+	@Resource(name = "egovMjonMsgGroupIdGnrService")
+	private EgovIdGnrService idgenMjonMsgGroupId;
+	
 	/** EgovMessageSource */
 	@Resource(name="egovMessageSource")
 	EgovMessageSource egovMessageSource;
@@ -38,37 +65,159 @@
 	@Resource(name = "MjonMsgDataService")
 	private MjonMsgDataService mjonMsgDataService;
 	
+	@Resource(name = "kakaoFriendsTalkTemplateService")
+	private KakaoFriendsTalkTemplateService kakaoFtTemplateService;
+	
+	/** userManageService */
+	@Resource(name = "userManageService")
+	private EgovUserManageService userManageService;
+	
+	@Resource(name = "kakaoAlimTalkService")
+	private KakaoAlimTalkService kakaoAlimTalkService;
+	
+	/** 사이트 설정 */ 
+	@Resource(name = "egovSiteManagerService")
+	EgovSiteManagerService egovSiteManagerService;	
+	
+	@Resource(name = "MsgHolidayService")
+    private MsgHolidayService msgHolidayService;
+	
+	@Autowired
+	KakaoSendUtil kakaoSendUtil;
+	
+	
+	
+	/** 
+	 * @methodName	: kakaoFriendsTalkMsgDataView 
+	 * @author		: 우영두
+	 * @date		: 2024.01.05 
+	 * @description	: kakaoFriendsTalkMsgDataView 카카오 친구톡 발송 화면
+	 * @param kakaoVO
+	 * @param model
+	 * @param response
+	 * @return
+	 * @throws Exception 
+	 */
+	
 	@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do"})
 	public String KakaoAlimtalkMsgDataView(ModelMap model
 			, @ModelAttribute("kakaoVO")  KakaoVO kakaoVO) throws Exception {
 		
 		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String author = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getAuthority());
 		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
-		if(userId == "") {
+		
+		/*if(userId == "") {
 			return "redirect:/web/user/login/login.do";
-		}
+		}*/
+		
+		model.addAttribute("loginVO", loginVO);
 		
 		try {
 			
-			//사용자 등록 발신프로필 정보 조회해오기
-			kakaoVO.setUserId(userId);
-			List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
-			model.addAttribute("resultProfileList", resultProfileList);
+			if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
 			
-			// 특수문자 리스트 불러오기
-			MjonSymbolVO symbolVO = new MjonSymbolVO();
-			List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO);
-			model.addAttribute("symbolList", symbolList);
+				//사용자 등록 발신프로필 정보 조회해오기
+				kakaoVO.setUserId(userId);
+				List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
+				model.addAttribute("resultProfileList", resultProfileList);
+				
+				// 특수문자 리스트 불러오기
+				MjonSymbolVO symbolVO = new MjonSymbolVO();
+				List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO);
+				model.addAttribute("symbolList", symbolList);
+				
+				//아이디 발신번호 리스트 불러오기.
+				List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId);
+				List<String> resultPhonList = new ArrayList<String>();
+				MJUtil mjUtil = new MJUtil();
+				for(String phone : resultSendPhonList) {
+					resultPhonList.add(mjUtil.addDash(phone));
+				}
+				model.addAttribute("resultPhonList", resultPhonList);
+				
+				
+				MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
+				
+				model.addAttribute("atSmishingYn", mberManageVO.getAtSmishingYn());
+				
+				//3.사용자 개인단가 정보가 0이 아니면 개인단가 사용, 없으면 시스템 기본 단가 사용
+				/*Float shortPrice = mberManageVO.getShortPrice();
+				Float longPrice = mberManageVO.getLongPrice();
+				Float picturePrice = mberManageVO.getPicturePrice();
+				Float picture2Price = mberManageVO.getPicture2Price();
+				Float picture3Price = mberManageVO.getPicture3Price();*/
+				BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN);
+				
+				model.addAttribute("userMoney", userMoney);
+				
+				
+				//////////////////////////////////////////////////////////////////
+				
+				//최근 전송 내역
+				MjonMsgDataVO searchVO = new MjonMsgDataVO();
+				Calendar cal = Calendar.getInstance();
+				Date now = new Date();
+				SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
+				cal.setTime(now);
+				cal.add(Calendar.DATE, -3);
+				String chkDate = format.format(cal.getTime());
+				searchVO.setUserId(userId);
+				searchVO.setMyMsgStDt(chkDate);	//검색 시작일 저장 - 현재날짜로 부터 3일 이전 날짜로 시작
+				model.addAttribute("resultLatestMsgList", mjonMsgDataService.selectLatestMsgList(searchVO));
+				
+				//자주보내는 번호
+				model.addAttribute("resultBookMarkMsgList", mjonMsgDataService.selectBookMarkMsgList(searchVO));
+				
+				// 사용자 정의 단가 정보 불러오기(시스템 단가 혹은 협의 단가)
+				model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
+				
+				
+				//사용자 템플릿 정보 조회
+				String friendId = kakaoVO.getFriendId();
+				KakaoVO resultTemplateVO = new KakaoVO();
+				
+				if(friendId != null) {
+					resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO);
+				}
+				model.addAttribute("resultTemplateVO", resultTemplateVO);
+				
+				
+				//친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지
+				
+				SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+				
+				Date nows = new Date();
+				String nowDate = sdf1.format(nows);
+				cal.setTime(nows);
+				
+				int hours = cal.get(Calendar.HOUR_OF_DAY);
+				int minuts = cal.get(Calendar.MINUTE);
+
+				boolean sendStatus = true;
+				
+				if(hours >= 20) {
+					
+					if(minuts >= 50) {
+						
+						System.out.println("발송금지 시간" + hours + ":" + minuts); 
+						sendStatus = false;
+						
+					}
+					
+				}
+				
+				if(hours < 8) {
+					
+					System.out.println("발송금지 시간" + hours + ":" + minuts);
+					sendStatus = false;
+					
+				}
+				
+				System.out.println("발송상태는 ::: "+sendStatus);
+				model.addAttribute("sendStatus", sendStatus);
 			
-			//아이디 발신번호 리스트 불러오기.
-			List<String> resultSendPhonList = mjonMsgDataService.selectSendPhonNumList(userId);
-			List<String> resultPhonList = new ArrayList<String>();
-			MJUtil mjUtil = new MJUtil();
-			for(String phone : resultSendPhonList) {
-				resultPhonList.add(mjUtil.addDash(phone));
 			}
-			model.addAttribute("resultPhonList", resultPhonList);
-			
 			
 		} catch (Exception e) {
 			System.out.println(" kakaoFriendsTalkMsgDataViewDataRegist Error ::: " + e);
@@ -78,30 +227,535 @@
 	}
 	
 	
-	@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"})
-	public ModelAndView kakaoFriendsTalkMsgSendAjax(
-			@ModelAttribute("kakaoVO")  KakaoVO kakaoVO
-			) throws Exception {
-		ModelAndView modelAndView = new ModelAndView();		
+	/**
+	* @Method Name : selectSpamKakaoFriendsTalkMsgChkAjax
+	* @작성일 : 2024. 1. 15.
+	* @작성자 :  우영두
+	* @Method 설명 : 카카오 친구톡 전송시 스팸문구 확인 체크
+	*/
+	@RequestMapping(value= {"/web/mjon/kakao/friendstalk/selectSpamKakaoFriendsTalkMsgChkAjax.do"})
+	public ModelAndView selectSpamKakaoFriendsTalkMsgChkAjax(ModelMap model
+			, @ModelAttribute("kakaoVO")  KakaoVO kakaoVO) throws Exception {
+		ModelAndView modelAndView = new ModelAndView(); 
 		modelAndView.setViewName("jsonView");
 		
-		int sendCount = 0;			//발송결과 건수
+		try {
+			List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList();
+			System.out.println("친구톡  스팸 필터링");
+			
+			if(resultSpamTxt == null) {
+				modelAndView.addObject("result", "listEmpty");
+				return modelAndView;
+			}else {
+				//변환변수 포함(Y) 미포함(N)
+				String spmFilterTxt = "";
+
+				if(kakaoVO.getTxtReplYn().equals("Y")) {
+					List<String[]> varValList = kakaoVO.getVarValList(); // value 값
+					
+					String resultSpam = kakaoSendUtil.getKakaoFTCntRepToSpamFilter(varValList, resultSpamTxt, kakaoVO.getTemplateContent());
+					
+					if(resultSpam.length() > 0) {
+						
+						modelAndView.addObject("result", "spams");
+						return modelAndView;
+						
+					}
+					
+					if(kakaoVO.getSubMsgSendYn().equals("Y")) {
+						
+						String resultSmsTxtSpam = kakaoSendUtil.getKakaoFTCntRepToSpamFilter(varValList, resultSpamTxt, kakaoVO.getSmsTxtArea());
+						
+						if(resultSmsTxtSpam.length() > 0) {
+							
+							modelAndView.addObject("result", "spams");
+							return modelAndView;
+							
+						}
+						
+					}
+					
+				}else {//치환문자가 없는 경우 스팸 필터링
+					
+					String resultSpam = kakaoSendUtil.getKakaoFTCntToSpamFilter(resultSpamTxt, kakaoVO.getTemplateContent());
+					
+					if(resultSpam.length() > 0) {
+						
+						modelAndView.addObject("result", "spams");
+						return modelAndView;
+						
+					}
+					
+					if(kakaoVO.getSubMsgSendYn().equals("Y")) {
+						
+						String resultSmsTxtSpam = kakaoSendUtil.getKakaoFTCntToSpamFilter(resultSpamTxt, kakaoVO.getSmsTxtArea());
+						
+						if(resultSmsTxtSpam.length() > 0) {
+							
+							modelAndView.addObject("result", "spams");
+							return modelAndView;
+							
+						}
+						
+					}
+					
+				}
+				
+			}
+			
+		}catch (Exception e) {
+			e.printStackTrace();
+			modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.select"));
+			modelAndView.addObject("result", "fail");
+			return modelAndView;
+		}
+		
+		return modelAndView;
+	}
+	
+	
+	
+	/**
+	* @Method Name : kakaoFriendsTalkMsgSendAjax
+	* @작성일 : 2024. 1. 16.
+	* @작성자 :  우영두
+	* @Method 설명 : 카카오 친구톡 전송
+	*/
+	@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"})
+	public ModelAndView kakaoFriendsTalkMsgSendAjax(ModelMap model
+			, HttpServletRequest request
+			, @ModelAttribute("kakaoVO")  KakaoVO kakaoVO) throws Exception {
+		ModelAndView modelAndView = new ModelAndView(); 
+		modelAndView.setViewName("jsonView");
+		
+		
+		int resultSts = 0;			//발송결과 건수
+		int resultBlockSts = 0;		//수신거부 등록번호로 발송을 안한 건수
+		
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		
 		try {
 			
-		/** 카카오톡 전송 기본 설정 -------------------------------------------*/
-		/** 카카오톡 전송 금액 설정 -------------------------------------------*/
-		/** 카카오톡 전송 분할 설정 -------------------------------------------*/
-		/** 카카오톡 예약 전송 설정 -------------------------------------------*/
-		/** 카카오톡 전송 메시지 설정 ------------------------------------------*/
-		/** 카카오톡 발송 처리 -----------------------------------------------*/
-		
-		}catch (Exception e) {
-			System.out.println(" kakaoFriendsTalkMsgSendAjax Error ::: " + e);
+			if(userId == "") {
+				modelAndView.addObject("message", "로그인 후 이용이 가능합니다.");
+				modelAndView.addObject("result", "loginFail");
+				return modelAndView;
+			}else {
+				
+        		/**
+        		 * 회원 정지된 상태이면 알림톡 발송이 안되도록 처리함
+        		 * 현재 로그인 세션도 만료 처리함
+        		 * */
+        		boolean mberSttus = userManageService.selectUserStatusInfo(userId);
+        		
+        		if(!mberSttus) {
+        			
+        			modelAndView.addObject("message", "현재 고객님께서는 문자온 서비스 이용이 정지된 상태로 알림톡을 발송하실 수 없습니다. 이용정지 해제를 원하시면 고객센터로 연락주시기 바랍니다.");
+        			modelAndView.addObject("result", "authFail");
+        			
+        			request.getSession().invalidate();
+        			
+        			return modelAndView;
+        			
+        		}
+			}
+			
+/** 카카오톡 전송 기본 설정 -------------------------------------------*/
+			kakaoVO.setSendType("FT");
+			kakaoVO.setMsgType("9");
+			kakaoVO.setUserId(userId);
+			
+			
+/** 전송금액 설정 --------------------------------------------------*/
+			KakaoVO priceSet = kakaoSendUtil.kakaoFTSendPrice(kakaoVO);
+			
+			if(priceSet.getResultCode() != null && priceSet.getResultCode().equals("2000")) {
+				
+				modelAndView.addObject("message", "대체문자 치환 후 전송 문자 길이를 초과하였습니다.");
+				modelAndView.addObject("result", "fail");
+				return modelAndView; 
+			}
+			
+			BigDecimal befCash = new BigDecimal(priceSet.getBefCash()).setScale(2, RoundingMode.HALF_EVEN);
+			BigDecimal totMsgPrice = new BigDecimal(priceSet.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN);
+			
+			kakaoVO.setEachPrice(priceSet.getEachPrice());
+			kakaoVO.setBefCash(befCash.toString());
+			kakaoVO.setTotPrice(totMsgPrice.toString());
+			
+			//현재 보유 금액이 발송 문자 총 금액보다 클 경우만 문자 발송
+			//BigDecimal 비교 연산
+			// befCash(현재 보유금액) 값이 totMsgPrice(문자전송 금액) 보다 많으면 문자 전송
+			if(befCash.compareTo(totMsgPrice) != -1) { // -1 : befCash < totMsgPrice, 0 : befCash = totMsgPrice, 1 : befCash > totMsgPrice,
+				
+				kakaoVO.setMsgGroupId(idgenMjonMsgGroupId.getNextStringId());	// 문자 그룹ID 설정
+
+/** 카카오톡 전송 분할 설정 ----------------------------------------------*/
+				
+				String[] tempPhoneList = new String[200];					//임시 수신번호 리스트 저장용 배열
+				List<String[]> tempVarValList = new ArrayList<String[]>();	//임시 변수 리스트 저장용
+				
+				String[] phoneList = kakaoVO.getCallToList();
+				List<String[]> varValList = null;
+
+				
+				//치환문자 포함 여부
+				if(kakaoVO.getTxtReplYn().equals("Y")) {
+					varValList = kakaoVO.getVarValList();
+				}
+				
+				System.out.println("+++++++++++++++++ 회원 스미싱 의심 온/오프 ::: "+kakaoVO.getAtSmishingYn());
+				
+				//스팸 스미싱 여부 - 내용에 스팸 문자열 유무 체크
+				if(kakaoVO.getSpamStatus().equals("Y") || kakaoVO.getAtSmishingYn().equals("Y")) {
+					kakaoVO.setAtSmishingYn("Y");
+				}else {
+					kakaoVO.setAtSmishingYn("N");
+				}
+
+				//스미싱 의심이 아니면 delayYn 값 셋팅
+				if(kakaoVO.getAtSmishingYn().equals("N")) {
+					kakaoVO.setAtDelayYn("N");
+				}else {
+					kakaoVO.setAtDelayYn("Y");
+				}
+				
+				//분할발송 여부 - 친구톡은 분할 발송이 없기애 N으로 픽스
+				kakaoVO.setDivideChk("N");
+				
+				int callToListCnt = kakaoVO.getCallToList().length;
+				kakaoVO.setTotalCallCnt(callToListCnt);
+				
+/** 예약 문자인 경우 설정  ----------------------------------------------*/
+				//분할문자 시간에 간격시간 더해주기
+				String dividDay = null;
+				Calendar cal = Calendar.getInstance();
+				
+				//예약시간 변환
+				SimpleDateFormat transFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+				
+				int turmMin = 0;
+				int totalCallCnt = 0; // 수신자 전체 갯수
+				int divideCnt = 0;
+				int count = 1;		//분할 카운트
+				
+				if(!kakaoVO.getReserveYn().equals("N")) {//예약문자인 경우 시간 셋팅
+						
+					Date toDate = transFormat.parse(kakaoVO.getReqDate());
+					cal.setTime(toDate);										//예약 시간 캘린터 변수에 입력
+					
+					//turmMin = Integer.parseInt(kakaoVO.getDivideTime());		//분할발송 시간 간격
+					//dividDay = transFormat.format(cal.getTime());
+					
+					totalCallCnt = kakaoVO.getCallToList().length;				// 수신자 전체 갯수
+					//divideCnt = Integer.parseInt(kakaoVO.getDivideCnt());		//분할 발송 갯수
+					
+				}
+				
+				//분할 예약 시간 저장 리스트 생성
+				List<String> dividDayList = new ArrayList<String>();
+				
+				if(callToListCnt > 200) {
+					
+					int sendCnt = 0;
+					/** 카카오톡 전송 200개 이상일때  ----------------------------------------------*/
+					for(int i =0; i < callToListCnt;  i++) {
+						
+						//분할 발송을 체크 한 경우
+						/*if(kakaoVO.getDivideChk().equals("Y")) {
+							if(count > divideCnt) {
+								count = 1;
+								cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다.
+								dividDay = transFormat.format(cal.getTime());
+								dividDayList.add(dividDay);
+								count++;
+							}else {
+								dividDayList.add(dividDay);
+								count++;
+							}
+						}*/
+						
+						
+						if((i < callToListCnt -1) && sendCnt == 199) {
+							
+							tempPhoneList[sendCnt] = phoneList[i];
+							
+							if(varValList != null) {
+								tempVarValList.add(varValList.get(i));
+							}
+							
+							List<String> arrPhoneList = new ArrayList<String>();
+							for(String temp : tempPhoneList) {
+								if(temp != null) {
+									arrPhoneList.add(temp);
+								}
+							}
+							
+							String[] sendPhoneList = new String[arrPhoneList.size()];
+							for(int j=0; j< arrPhoneList.size(); j++) {
+								sendPhoneList[j] = arrPhoneList.get(j);
+							}
+							
+/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/
+							kakaoVO.setCallToList(sendPhoneList);
+							kakaoVO.setVarValList(tempVarValList);
+							KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO);
+							kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList());
+							
+/** 카카오톡 발송 처리 --------------------------------------------------*/
+							kakaoVO.setDividDay(dividDayList);
+							MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO);
+							resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt());
+							//전송 초기화
+							sendCnt = 0;
+							Arrays.fill(tempPhoneList, null);
+							tempVarValList.clear();
+							dividDayList.clear();
+							
+						}else if((i == callToListCnt -1) && sendCnt < 200){//200개의 마지막일 경우 처리
+						
+							tempPhoneList[sendCnt] = phoneList[i];
+							
+							if(varValList != null) {
+
+								tempVarValList.add(varValList.get(i));
+								
+							}
+							
+							List<String> arrPhoneList = new ArrayList<String>();
+							for(String temp : tempPhoneList) {
+								if(temp != null) {
+									arrPhoneList.add(temp);
+								}
+							}
+							
+							String[] sendPhoneList = new String[arrPhoneList.size()];
+							for(int j=0; j< arrPhoneList.size(); j++) {
+								sendPhoneList[j] = arrPhoneList.get(j);
+							}
+							
+/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/
+							kakaoVO.setCallToList(sendPhoneList);
+							kakaoVO.setVarValList(tempVarValList);
+							KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO);
+							kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList());
+							kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt());
+/** 카카오톡 발송 처리 --------------------------------------------------*/
+							kakaoVO.setDividDay(dividDayList);
+							MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO);
+							resultSts = resultSts + Integer.parseInt(returnVO.getSendMsgCnt());
+						}else {//198개가 될때까지 배열에 데이터를 쌓는다
+							
+							tempPhoneList[sendCnt] = phoneList[i];
+							
+							if(varValList != null && varValList.get(i).length > 0) {
+								tempVarValList.add(varValList.get(i));
+							}
+							
+							sendCnt++;	
+						}
+					}
+				}else {
+					/** 카카오톡 전송 200개 미만일때  ----------------------------------------------*/
+					//분할 발송을 체크 한 경우
+					/*if(kakaoVO.getDivideChk().equals("Y")) {
+						for(int i =0; i < callToListCnt;  i++) {
+							if(count > divideCnt) {
+								count = 1;
+								cal.add(Calendar.MINUTE, turmMin); //분할 시간 간격을 증가시켜 준다.
+								dividDay = transFormat.format(cal.getTime());
+								dividDayList.add(dividDay);
+								count++;
+							}else {
+								dividDayList.add(dividDay);
+								count++;
+							}
+						}
+					}*/
+					
+					
+					
+/** 카카오톡 전송 메시지 설정 ----------------------------------------------*/
+					KakaoVO kakaoSendMsgSet = kakaoSendUtil.kakaoFTSendMsg(kakaoVO);
+					kakaoVO.setKakaoSendList(kakaoSendMsgSet.getKakaoSendList());
+					kakaoVO.setKakaoSubMagOrgnlTxt(kakaoSendMsgSet.getKakaoSubMagOrgnlTxt());
+					
+/** 카카오톡 발송 처리 --------------------------------------------------*/
+					kakaoVO.setDividDay(dividDayList);
+					MjonMsgReturnVO returnVO = kakaoAlimTalkService.insertKakaoFtSendAjax(kakaoVO);
+					resultSts = Integer.parseInt(returnVO.getSendMsgCnt());
+					
+				}
+				
+/** 카카오톡 결과 처리 --------------------------------------------------*/
+			}else {
+				modelAndView.addObject("message", "친구톡 발송에 필요한 보유 잔액이 부족 합니다.");
+				modelAndView.addObject("result", "fail");
+				return modelAndView;
+			}
+			
+		} catch (Exception e) {
+			System.out.println("kakaoFriendsTalkMsgSendAjax Controller Error !!!! "+e);
 			modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
 			modelAndView.addObject("result", "fail");
 			return modelAndView;
 		}
+		
+		modelAndView.addObject("message", "친구톡 전송이 완료되었습니다.");
+		modelAndView.addObject("result", "success");
+		modelAndView.addObject("resultSts", resultSts);
+		
+		
+/** 카카오 친구톡 발송 내용 법인폰, 친구톡 결과 처리 --------------------------------------------------*/
+		try {
+			String adminSmsNoticeYn = "Y";
+			String spamStatus = kakaoVO.getAtSmishingYn(); // 스미싱 의심으로 체크된 고객 정보
+			
+			UserManageVO userManageVO = new UserManageVO();
+			userManageVO.setMberId(userId);
+			
+			if(!userId.equals("")) {
+				userManageVO = userManageService.selectAdminSmsNoticeYn(userManageVO);
+				adminSmsNoticeYn = userManageVO.getAdminSmsNoticeYn(); 
+			}
+			
+			//법인폰 알림 온 이거나 스미싱의심 문자인 경우 법인폰으로 발송
+			if(adminSmsNoticeYn.equals("Y") || spamStatus.equals("Y")) {
+				
+				if(spamStatus.equals("Y")) {
+					kakaoVO.setAtDelayYn("Y");
+				}
+				
+				// 법인폰 알람여부 체크
+				JoinSettingVO joinSettingVO = new JoinSettingVO();
+				joinSettingVO = egovSiteManagerService.selectAdminNotiDetail();
+				
+				String holiSmishingNoti = joinSettingVO.getHoliSmishingNoti();
+				
+				//야간 스미싱의심 알림이 활성화 되어있는 경우 예외 알림 시간대가 아닌경우 슬랙 알림 발송 처리한다.
+				if(holiSmishingNoti.equals("Y")) {
+					
+					// SLACK 체크
+					if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
+						
+						MsgAlarmSetVO msgAlarmSetVO = new MsgAlarmSetVO();
+						
+						msgAlarmSetVO.setUseYn("Y");
+						msgAlarmSetVO.setFirstIndex(0);
+						
+						List<MsgAlarmSetVO> resultAlarmList = msgHolidayService.selectAlarmSettingList(msgAlarmSetVO);
+						
+						Calendar calendar = Calendar.getInstance(); 
+						int year = calendar.get(Calendar.YEAR);
+						
+						MsgHolidayVO msgHolidayVO = new MsgHolidayVO();
+						msgHolidayVO.setFirstIndex(0);
+						msgHolidayVO.setRecordCountPerPage(100);
+						msgHolidayVO.setSearchHoliYear(Integer.toString(year));
+						
+						List<MsgHolidayVO> resultHolidayList = msgHolidayService.selectMsgHolidayList(msgHolidayVO);
+						
+						MjonHolidayApi mjonHolidayApi = new MjonHolidayApi();
+						
+						boolean smishingAlarmPassSts = mjonHolidayApi.getHolidaySmishingPassStatus(resultAlarmList, resultHolidayList);
+						
+						if(!smishingAlarmPassSts) {//평일,주말, 공휴일 알림설정 시간에 포함되지 않는 경우 슬랙 알림 발송
+							
+							MjonCommon comm = new MjonCommon();
+							comm.getAdminKakaoAtSandSlack(kakaoVO);
+							
+						}
+						
+					}
+					
+				}
+				
+				// SLACK 체크
+				/*if (joinSettingVO != null && joinSettingVO.getSlackNoti().equals("Y")) {
+					//Slack으로 메세지 전송 처리
+					MjonCommon comm = new MjonCommon();
+					comm.getAdminKakaoAtSandSlack(kakaoVO);
+				}*/
+			}
+			
+		} catch (Exception e) {
+			throw new Exception("++++++++++++++++++++++ getAdminPhoneSendMsgData Error !!! " + e);
+		}
+		
+		
 		return modelAndView;
 	}
 	
+	
+	/**
+	* @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax
+	* @작성일 : 2024. 1. 18.
+	* @작성자 :  우영두
+	* @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트
+	*/
+	@RequestMapping(value= {"/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendRefundTestAjax.do"})
+	public ModelAndView kakaoFriendsTalkMsgSendRefundTestAjax(ModelMap model
+			, HttpServletRequest request
+			, @ModelAttribute("kakaoVO")  KakaoVO kakaoVO) throws Exception {
+		
+		ModelAndView modelAndView = new ModelAndView(); 
+		modelAndView.setViewName("jsonView");
+		
+		kakaoAlimTalkService.selectKakaoFtSentRefundList();
+		
+		modelAndView.addObject("result", "success");
+		return modelAndView;
+	}
+	
+	/**
+	* @Method Name : kakaoFriendsTalkMsgSendRefundTestAjax
+	* @작성일 : 2024. 1. 18.
+	* @작성자 :  우영두
+	* @Method 설명 : 카카오 친구톡 전송 환불 스케줄러 서비스 테스트
+	*/
+	@RequestMapping(value= {"/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do"})
+	public String selectKakaoFriendsTalkTestSendPopup(ModelMap model
+			, @ModelAttribute("kakaoVO")  KakaoVO kakaoVO) throws Exception {
+		
+		
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+ 		if(userId == "") {
+			return "redirect:/web/user/login/login.do";
+		}else {
+			//1.시스템 기본 단가 정보 불러오기
+			JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
+			
+			//2.사용자 개인 단가 정보 불러오기
+			MberManageVO mberManageVO = mjonMsgDataService.selectMberManageInfo(userId);
+			Float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
+			
+			if(kakaoFtPrice < 1) {
+				kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice();
+			}
+			
+			BigDecimal userMoney = new BigDecimal(mberManageVO.getUserMoney()).setScale(2, RoundingMode.HALF_EVEN);
+			model.addAttribute("userMoney", userMoney);
+			model.addAttribute("kakaoFtPrice", kakaoFtPrice);
+		}
+		
+		String tmpContents = kakaoVO.getTemplateContent();
+		String txtReplYn = kakaoVO.getTxtReplYn();
+		
+		if(txtReplYn.equals("Y")) {
+			
+			String[] varValStr = kakaoVO.getVarValList().get(0);
+			tmpContents = kakaoSendUtil.getKakaoFTCntReplace(varValStr[0], tmpContents);
+			
+			kakaoVO.setTemplateContent(tmpContents);
+			
+		}
+		
+		model.addAttribute("kakaoVO", kakaoVO);
+		
+		return "web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataTestPop";
+	}
+	
+	
 }
src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java
--- src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java
+++ src/main/java/itn/let/kakao/user/kakaoFt/web/KakaoFriendsTalkTemplateController.java
@@ -34,6 +34,7 @@
 import itn.let.kakao.user.kakaoFt.service.KakaoFriendsTalkTemplateService;
 import itn.let.mjo.symbol.service.MjonSymbolService;
 import itn.let.mjo.symbol.service.MjonSymbolVO;
+import itn.let.uss.umt.service.EgovUserManageService;
 
 @Controller
 public class KakaoFriendsTalkTemplateController {
@@ -53,6 +54,10 @@
 	
 	@Resource(name = "mjonSymbolService")
 	private MjonSymbolService mjonSymbolService;
+	
+	/** userManageService */
+	@Resource(name = "userManageService")
+	private EgovUserManageService userManageService;
 	
 	@Autowired
 	KakaoApiProfile kakaoApiProfile;
@@ -90,6 +95,8 @@
 		if(userId == "") {
 			return "redirect:/web/user/login/login.do";
 		}
+		
+		model.addAttribute("loginVO", loginVO);
 		
 		try {
 			
@@ -260,11 +267,21 @@
 				
 				KakaoReturnVO result = kakaoApiImageUpload.kakaoApiImageDelete(kakaoVO);
 				
+				String code = result.getBizReturnCode();
+				
+				if(code.equals("200")) {//이미지 삭제 성공시 템플릿 디비에 있는 이미지 정보도 함께 지워준다.
+					
+					kakaoVO.setUserId(userId);
+					kakaoVO.setLastUpdusrId(userId);
+					kakaoFtTemplateService.updateKakaoFriendsTemplateImageDataDel(kakaoVO);
+					
+				}
+				
 				modelAndView.addObject("code", result.getBizReturnCode());
 				modelAndView.addObject("msg", result.getBizReturnMsg());
 				modelAndView.addObject("result", "success");
 			}
-		}catch(Exception ex){
+ 		}catch(Exception ex){
 			ex.printStackTrace();
 			modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
 			modelAndView.addObject("result", "fail");
@@ -276,10 +293,10 @@
 	
 	
 	/** 
-	 * @methodName	: deleteKakaoFriendsImageDataAjax 
+	 * @methodName	: selectKakaoFriendsTemplateList 
 	 * @author		: 우영두
 	 * @date		: 2023.03.23 
-	 * @description	: deleteKakaoFriendsImageDataAjax 카카오 친구톡 이미지 삭제요청
+	 * @description	: selectKakaoFriendsTemplateList 카카오 친구톡 템플릿 리스트 화면
 	 * @param kakaoVO
 	 * @param model
 	 * @param response
@@ -297,7 +314,18 @@
 			return "redirect:/web/user/login/login.do";
 		}
 		
+		model.addAttribute("loginVO", loginVO);
+		
 		try {
+			
+			/**
+			 * 회원 정지된 상태이면 알림톡  템플릿 등록 화면으로 이동되지 않도록 처리
+			 * */
+			boolean mberSttus = userManageService.selectUserStatusInfo(userId);
+			
+			if(!mberSttus) {
+				return "redirect:/web/uat/uia/actionLogout.do";
+			}
 			
 			//사용자 등록 발신프로필 정보 조회해오기
 			searchVO.setUserId(userId);
@@ -319,10 +347,10 @@
 	
 	
 	/** 
-	 * @methodName	: deleteKakaoFriendsImageDataAjax 
+	 * @methodName	: selectKakaoFriendsTemplateListAjax 
 	 * @author		: 우영두
 	 * @date		: 2023.03.23 
-	 * @description	: deleteKakaoFriendsImageDataAjax 카카오 친구톡 이미지 삭제요청
+	 * @description	: selectKakaoFriendsTemplateListAjax 카카오 친구톡 템플릿 하단 리스트 정보 조회
 	 * @param kakaoVO
 	 * @param model
 	 * @param response
@@ -345,12 +373,12 @@
 			/** pageing */
 			PaginationInfo paginationInfo = new PaginationInfo();
 			paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
-			paginationInfo.setRecordCountPerPage(searchVO.getPageUnit());
+			paginationInfo.setRecordCountPerPage(9);
 			paginationInfo.setPageSize(searchVO.getPageSize());
 			
 			searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
 			searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
-			searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+			searchVO.setRecordCountPerPage(9);
 			
 			if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
 				searchVO.setSearchSortCnd("FRIEND_ID");
@@ -456,4 +484,184 @@
 		return modelAndView;
 	}
 	
+	
+	/** 
+	 * @methodName	: selectKakaoFriendsTemplateDataDetail 
+	 * @author		: 우영두
+	 * @date		: 2024.01.04 
+	 * @description	: selectKakaoFriendsTemplateDataDetail 카카오 친구톡 템플릿 상세 화면
+	 * @param kakaoVO
+	 * @param model
+	 * @param response
+	 * @return
+	 * @throws Exception 
+	 */
+	@RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateDataDetail.do"})
+	public String selectKakaoFriendsTemplateDataDetail(
+			@ModelAttribute("kakaoVO")  KakaoVO kakaoVO, ModelMap model, HttpServletResponse response
+			) throws Exception {
+		
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		if(userId == "") {
+			return "redirect:/web/user/login/login.do";
+		}
+		
+		model.addAttribute("loginVO", loginVO);
+		
+		try {
+			
+			//사용자 등록 발신프로필 정보 조회해오기
+			kakaoVO.setUserId(userId);
+			List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
+			model.addAttribute("resultProfileList", resultProfileList);
+			
+			// 특수문자 리스트 불러오기
+			MjonSymbolVO symbolVO = new MjonSymbolVO();
+			List<MjonSymbolVO> symbolList = mjonSymbolService.selectMjonSymbolList(symbolVO);
+			model.addAttribute("symbolList", symbolList);
+			
+			KakaoVO resultTemplateVO = kakaoFtTemplateService.selectKakaoFriendsTemplateDetail(kakaoVO);
+			
+			System.out.println("++++++++++++++++++ templateCode ::: "+kakaoVO.getFriendId());
+			System.out.println("++++++++++++++++++ senderKey ::: "+kakaoVO.getSenderKey());
+			
+			model.addAttribute("resultTemplateVO", resultTemplateVO);
+			
+		} catch (Exception e) {
+			System.out.println(" selectKakaoFriendsTemplateDataDetail Error ::: " + e);
+		}
+		
+		return "/web/kakao/template/ft/KakaoFriendstalkTemplateDetail";
+	}
+	
+	// 카카오 친구톡 템플릿 수정요청
+	/** 
+	 * @methodName	: updateKakaoFriendsTemplateDataAjax 
+	 * @author		: 우영두
+	 * @date		: 2024.01.05 
+	 * @description	: updateKakaoFriendsTemplateDataAjax 카카오 친구톡 템플릿 수정요청
+	 * @param kakaoVO
+	 * @param model
+	 * @param response
+	 * @return
+	 * @throws Exception 
+	 */
+	@RequestMapping(value= {"/web/mjon/kakao/template/updateKakaoFriendsTemplateDataAjax.do"})
+	public ModelAndView updateKakaoFriendsTemplateDataAjax(
+		@ModelAttribute("kakaoVO")  KakaoVO kakaoVO
+		, final MultipartHttpServletRequest multiRequest
+	) throws Exception {
+		ModelAndView modelAndView = new ModelAndView();		
+		modelAndView.setViewName("jsonView");
+		
+		try {
+			LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+			String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+			
+			if(userId == "") {
+				modelAndView.addObject("result", "loginFail");
+				return modelAndView;
+			}else {
+				
+				kakaoVO.setUserId(userId);
+				kakaoVO.setUserCallbackYn(userId);
+				kakaoVO.setFrstRegisterId(userId);
+				kakaoVO.setLastUpdusrId(userId);
+				kakaoVO.setSendType("FT");
+				
+				String imgUrl = kakaoVO.getTemplateImageUrl();
+				int buttonSize = kakaoVO.getButtonVOList().size();
+				
+				if(!imgUrl.equals("") || buttonSize > 0) {
+					
+					//json 파일 생성 처리
+					String resultJsonPath = kakaoFTJsonSave.kakaoApiJsonSave(kakaoVO);
+					kakaoVO.setBizJsonName(resultJsonPath);
+					
+				}
+				
+				int result = kakaoFtTemplateService.updateKakaoFriendsTemplateData(kakaoVO);
+				
+				if(result > 0) {
+					modelAndView.addObject("result", "success");
+				}else {
+					modelAndView.addObject("result", "fail");
+				}
+			}
+		}catch(Exception ex){
+			ex.printStackTrace();
+			modelAndView.addObject("message", egovMessageSource.getMessage("fail.common.update"));
+			modelAndView.addObject("result", "fail");
+			return modelAndView;
+		}
+		
+		return modelAndView;
+	}
+	
+	
+	/** 
+	 * @methodName	: selectKakaoFriendsTemplateListPopupAjax 
+	 * @author		: 우영두
+	 * @date		: 2024.01.05 
+	 * @description	: selectKakaoFriendsTemplateListPopupAjax 카카오 친구톡 발송화면 템플릿 팝업 리스트 화면
+	 * @param kakaoVO
+	 * @param model
+	 * @param response
+	 * @return
+	 * @throws Exception 
+	 */
+	@RequestMapping(value= {"/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do"})
+	public String selectKakaoFriendsTemplateListPopupAjax(@ModelAttribute("searchVO") KakaoVO searchVO, 
+			HttpServletRequest request ,
+			ModelMap model) throws Exception{
+
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		if(userId == "") {
+			return "redirect:/uat/uia/EgovLoginUsr.do";
+		}
+		
+		try {
+			
+			searchVO.setUserId(userId);
+			
+			/** pageing */
+			PaginationInfo paginationInfo = new PaginationInfo();
+			paginationInfo.setCurrentPageNo(searchVO.getPageIndex());
+			paginationInfo.setRecordCountPerPage(6);
+			paginationInfo.setPageSize(searchVO.getPageSize());
+			
+			searchVO.setFirstIndex(paginationInfo.getFirstRecordIndex());
+			searchVO.setLastIndex(paginationInfo.getLastRecordIndex());
+			searchVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());
+			
+			if("".equals(searchVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
+				searchVO.setSearchSortCnd("FRIEND_ID");
+				searchVO.setSearchSortOrd("desc");
+			}
+			
+			List<KakaoVO> kakaoTemplateInfoList = new ArrayList<KakaoVO>();
+			// 문자발송 완료건은 모두 보이도록 처리
+			searchVO.setUserId(userId);
+			kakaoTemplateInfoList = kakaoFtTemplateService.selectKakaoFriendsTemplateList(searchVO);
+	        model.addAttribute("kakaoTemplateInfoList", kakaoTemplateInfoList);
+	        model.addAttribute("searchVO", searchVO);
+	        
+	        paginationInfo.setTotalRecordCount(kakaoTemplateInfoList.size() > 0 ? ((KakaoVO)kakaoTemplateInfoList.get(0)).getTotCnt() : 0);
+			model.addAttribute("paginationInfo", paginationInfo);
+			
+			//사용자 등록 발신프로필 정보 조회해오기
+			searchVO.setUserId(userId);
+			List<KakaoVO> resultProfileList = kakaoApiService.selectKakaoProfileList(searchVO);
+			model.addAttribute("resultProfileList", resultProfileList);
+			
+		} catch (Exception e) {
+			System.out.println("selectKakaoFriendsTemplateListAjax Controller Error !!! " + e);
+		}
+		
+		return "/web/kakao/template/ft/KakaoFriendstalkTemplateListPopupAjax";
+        
+	}
+	
 }
src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
--- src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
+++ src/main/java/itn/let/kakao/user/sent/web/KakaoSentController.java
@@ -1,5 +1,6 @@
 package itn.let.kakao.user.sent.web;
 
+import java.io.FileReader;
 import java.io.OutputStream;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -19,6 +20,9 @@
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.parser.JSONParser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,6 +39,7 @@
 import itn.com.cmm.util.StringUtil2;
 import itn.com.utl.fcc.service.EgovStringUtil;
 import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
+import itn.let.kakao.kakaoComm.KakaoButtonVO;
 import itn.let.kakao.kakaoComm.KakaoReturnVO;
 import itn.let.kakao.kakaoComm.KakaoVO;
 import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
@@ -244,16 +249,36 @@
 		mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt()));  
 		model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
 		
-		// 템플릿 api 가져오기
-		KakaoVO kakaoVO = new KakaoVO(); 
-		kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
-		kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
+		String msgType = mjonKakaoATResultVO.getMsgType();
 		
-		KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
+		if(msgType.equals("8")) {//카카오 알림톡인 경우 상세정보 처리
+			
+			// 템플릿 api 가져오기
+			KakaoVO kakaoVO = new KakaoVO(); 
+			kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
+			kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
+			
+			KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
+			
+			model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
+			// //템플릿 api 가져오기
+			
+		}else if(msgType.equals("9")) {//카카오 친구톡인 경우 상세정보 처리
+			
+			//String smsTxt = mjonKakaoATResultVO.getSmsTxt();
+			
+			KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO);
+			//kakaoTemplateInfo.setTemplateContent(smsTxt);
+			
+			model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
+			
+		}else {
+			
+			model.addAttribute("kakaoTemplateInfo", "");
+			
+		}
 		
-		model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
-		// //템플릿 api 가져오기
-		
+		model.addAttribute("msgType", msgType);		
 		return "web/kakao/sent/KakaoSentDetailPopAjax";
 	}
 	
@@ -278,27 +303,45 @@
 
 		//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA)
 		MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailData2Ajax(mjonKakaoATVO);
-		// 대체문자 엔터키 치환
-		mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans()));  
 		
-		// 강조형 타이틀이 있는지 없는지 구분
-		if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle()))
-		{
-			String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
-			mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]);
-			mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]);
+		String msgType = mjonKakaoATResultVO.getMsgType();
+		
+		if(msgType.equals("8")) {
+			
+			// 대체문자 엔터키 치환
+			mjonKakaoATResultVO.setSmsTxtTrans(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxtTrans()));  
+			
+			// 강조형 타이틀이 있는지 없는지 구분
+			if(StringUtil.isNotEmpty(mjonKakaoATResultVO.getBizKakaoTitle()))
+			{
+				String[] temp = mjonKakaoATResultVO.getBizKakaoTitle().split("§§");
+				mjonKakaoATResultVO.setBizKakaoTitle01(temp[0]);
+				mjonKakaoATResultVO.setBizKakaoTitle02(temp[1]);
+			}
+			
+			model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
+			
+			// 템플릿 api 가져오기
+			KakaoVO kakaoVO = new KakaoVO(); 
+			kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
+			kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
+			
+			KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
+			
+			model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
+			
+		}else if(msgType.equals("9")) {
+			
+			KakaoReturnVO kakaoTemplateInfo = getKakaoFTSendTemplateInfo(mjonKakaoATResultVO);
+			
+			model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
+			model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
+			
+		}else {
+			
+			model.addAttribute("kakaoTemplateInfo", "");
+			
 		}
-		
-		model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
-		
-		// 템플릿 api 가져오기
-		KakaoVO kakaoVO = new KakaoVO(); 
-		kakaoVO.setSenderKey(mjonKakaoATResultVO.getMsgNoticetalkSenderKey());
-		kakaoVO.setTemplateCode(mjonKakaoATResultVO.getMsgNoticetalkTmpKey());
-		
-		KakaoReturnVO kakaoTemplateInfo =kakaoApiTemplate.selectKakaoApiTemplateDetail(kakaoVO);
-		
-		model.addAttribute("kakaoTemplateInfo", kakaoTemplateInfo);
 
 		return "web/kakao/sent/KakaoSentDetailPop2Ajax";
 	}	
@@ -846,5 +889,101 @@
 		
 	}
 	
+
+	/*
+	 * 20240122 우영두 추가
+	 * 친구톡 발송 결과 내용 팝업 처리
+	 * 발송 내용 처리 및 첨부 이미지, 버튼 정보 처리
+	 * 
+	 * */
+	public KakaoReturnVO getKakaoFTSendTemplateInfo(MjonKakaoATVO kakaoATVO) throws Exception {
+		
+		KakaoReturnVO returnVO = new KakaoReturnVO();
+		try {
+			
+			String tmpContent = kakaoATVO.getSmsTxtTrans();
+			String jsonFilePath = kakaoATVO.getBizKakaoJsonFile();
+			
+			//친구톡 이미지 또는 버튼 정보가 있다면 실행
+			if(jsonFilePath != null && jsonFilePath.length() > 0) {
+				
+				FileReader reader = new FileReader(jsonFilePath);         
+				int ch;        
+				String resultStr = "";
+				while ((ch = reader.read()) != -1) {
+					 
+					resultStr = resultStr + (char)ch;
+				}
+				
+				JSONParser parser = new JSONParser();
+				Object obj = parser.parse(resultStr);
+				JSONObject object = (JSONObject) obj;
+				
+				String image = (object.get("image") == null) ? null : object.get("image").toString();
+				String button = (object.get("button") == null) ? null : object.get("button").toString();
+				
+				if(image != null) {
+					
+					Object imagObj = parser.parse(image);
+					JSONObject jsonImgObj = (JSONObject) imagObj;
+					
+					System.out.println(jsonImgObj.toJSONString());
+					
+					String imgUrl = (jsonImgObj.get("img_url") == null) ? null : jsonImgObj.get("img_url").toString();
+					
+					System.out.println(imgUrl);
+					
+					returnVO.setTemplateEmphasizeType("IMAGE");
+					returnVO.setTemplateImageUrl(imgUrl);
+					
+				}
+				
+				if(button != null) {
+					
+					JSONArray buttonJsonList = (JSONArray) object.get("button");
+					
+					System.out.println(buttonJsonList.size());
+					
+					List<KakaoButtonVO> buttonList = new ArrayList<KakaoButtonVO>();
+					
+					for(int i=0; i < buttonJsonList.size(); i++) {
+						
+						JSONObject itemInfo = (JSONObject)buttonJsonList.get(i);
+						
+						String name = itemInfo.get("name").toString();
+						
+						System.out.println(name);
+						
+						KakaoButtonVO buttonVO = new KakaoButtonVO();
+						
+						buttonVO.setName(name);
+						
+						buttonList.add(buttonVO);
+						
+					}
+					
+					returnVO.setButtonList(buttonList);
+					
+					for(KakaoButtonVO butVO : returnVO.getButtonList()) {
+						
+						System.out.println("+++++++++++++ btn name ::: "+butVO.getName());
+						
+					}
+					
+				}
+				
+			}
+			
+			//친구톡 내용 셋팅
+			returnVO.setTemplateContent(tmpContent);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		
+		return returnVO;
+		
+	}
+	
 	
 }
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
@@ -265,7 +265,12 @@
 			String smisingSmsTxt = "";
 			//예약문자를 발송하는 경우 문자 내용 앞에 "[예약]" 표시되도록 처리
 			if(reserveYn.equals("Y")) {
-				reservSmsTxt = "[예약]" + smsTxt;
+				
+				if(atDelayYn.equals("Y")) {//예약문자 중 스미싱의심 일 경우
+					reservSmsTxt = "[스미싱의심][예약]" + smsTxt;
+				}else {
+					reservSmsTxt = "[예약]" + smsTxt;
+				}
 				smsTxt = reservSmsTxt;
 			}else if(atDelayYn.equals("Y")) {
 				
@@ -280,7 +285,7 @@
 			if(kakaoVO.getMsgType().equals("8")) {
 				msgType = "[알림톡]";
 			}else if(kakaoVO.getMsgType().equals("9")){
-				
+				msgType = "[친구톡]";
 			}
 			sandName = "[" + userId + "]" + "[" + sandName + "]" + msgType;
 			
src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
--- src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
+++ src/main/java/itn/let/mjo/msg/service/MjonMsgVO.java
@@ -6,7 +6,7 @@
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 import itn.com.cmm.ComDefaultVO;
-import itn.com.cmm.MjonMsgTabulVO;
+import itn.com.cmm.MjonMsgSendVO;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -305,6 +305,6 @@
 	
 	private String detailType;
 
-	private List<MjonMsgTabulVO> mjonMsgTabulListVO = new ArrayList<>();
+	private List<MjonMsgSendVO> mjonMsgSendVOList = new ArrayList<>();
 
 }
 
src/main/java/itn/let/mjo/msgdata/service/ReplacementListsVO.java (deleted)
--- src/main/java/itn/let/mjo/msgdata/service/ReplacementListsVO.java
@@ -1,59 +0,0 @@
-package itn.let.mjo.msgdata.service;
-
-import itn.let.mjo.msg.service.MjonMsgVO;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Setter
-@NoArgsConstructor
-public class ReplacementListsVO {
-	String[] shortNameList;
-	String[] shortPhone;
-	String[] shortRep1;
-	String[] shortRep2;
-	String[] shortRep3;
-	String[] shortRep4;
-	int shortCnt;
-
-	String[] longNameList;
-	String[] longPhone;
-	String[] longRep1;
-	String[] longRep2;
-	String[] longRep3;
-	String[] longRep4;
-	int longCnt;
-
-	String[] imgNameList;
-	String[] imgPhone;
-	String[] imgRep1;
-	String[] imgRep2;
-	String[] imgRep3;
-	String[] imgRep4;
-	int imgCnt;
-
-	// 배열을 초기화하는 메서드
-	public void initializeLists(MjonMsgVO mjonMsgVO) {
-		shortNameList = new String[Integer.parseInt(mjonMsgVO.getShortMsgCnt())];
-		shortPhone = new String[shortNameList.length];
-		shortRep1 = new String[shortNameList.length];
-		shortRep2 = new String[shortNameList.length];
-		shortRep3 = new String[shortNameList.length];
-		shortRep4 = new String[shortNameList.length];
-
-		longNameList = new String[Integer.parseInt(mjonMsgVO.getLongMsgCnt())];
-		longPhone = new String[longNameList.length];
-		longRep1 = new String[longNameList.length];
-		longRep2 = new String[longNameList.length];
-		longRep3 = new String[longNameList.length];
-		longRep4 = new String[longNameList.length];
-
-		imgNameList = new String[mjonMsgVO.getCallToList().length];
-		imgPhone = new String[imgNameList.length];
-		imgRep1 = new String[imgNameList.length];
-		imgRep2 = new String[imgNameList.length];
-		imgRep3 = new String[imgNameList.length];
-		imgRep4 = new String[imgNameList.length];
-	}
-}
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
@@ -27,6 +27,7 @@
 import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
 import egovframework.rte.psl.dataaccess.util.EgovMap;
 import itn.com.cmm.LoginVO;
+import itn.com.cmm.MjonMsgSendVO;
 import itn.com.cmm.util.MJUtil;
 import itn.com.cmm.util.MsgSendUtils;
 import itn.com.cmm.util.StringUtil;
@@ -47,7 +48,6 @@
 import itn.let.mjo.msgdata.service.MjonMsgDataService;
 import itn.let.mjo.msgdata.service.MjonMsgDataVO;
 import itn.let.mjo.msgdata.service.MjonMsgReturnVO;
-import itn.let.mjo.msgdata.service.ReplacementListsVO;
 import itn.let.mjo.msgholiday.service.MsgAlarmSetVO;
 import itn.let.mjo.msgholiday.service.MsgHolidayVO;
 import itn.let.mjo.msgholiday.service.impl.MsgHolidayDAO;
@@ -4022,6 +4022,7 @@
 			smsTxt = "(광고)"+smsTxt
 					+"\n"+"무료거부 0808800858";
 		}
+		mjonMsgVO.setSmsTxt(smsTxt);
 
 		log.debug(" :: smsTxt :: [{}]", smsTxt);
 
@@ -4034,16 +4035,6 @@
 
 		log.debug(" + mjonMsgVO.getFileCnt() :: [{}]", mjonMsgVO.getFileCnt());
 
-		//////////////////////////////////
-		//////////////////////////////////
-		//////////////////////////////////
-		if(true) {
-		    return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 테스트 실패");
-		}
-		//////////////////////////////////
-		//////////////////////////////////
-		//////////////////////////////////
-		
 		
 		/*
 		 * 화면에서 넘어오는 단가 금액 및 총 결제 캐시 금액 체크 해주기
@@ -4052,23 +4043,23 @@
 		 * 파라미터로 넘어온 개별단가(eachPrice), 총 결제캐시(totPrice)를 비요하여 동일하지 않으면 컨트롤러에서 계산한 금액으로 입력해줌.
 		 */
 		
-		int smsTxtByte = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt());
-		if(smsTxtByte > 2000) {
-		    return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다.");
-		}
+//		int smsTxtByte = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt());
+//		if(smsTxtByte > 2000) {
+//		    return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다.");
+//		}
 		
 		// MSG_TYPE 설정
-		String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsTxtByte);
-		if ("INVALID".equals(msgType)) {
-		    return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다.");
-		}
-		mjonMsgVO.setMsgType(msgType);
+//		String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsTxtByte);
+//		if ("INVALID".equals(msgType)) {
+//		    return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 내용은 2000Byte를 넘을 수 없습니다.");
+//		}
+//		mjonMsgVO.setMsgType(msgType);
 		
-		
-		
-		MjonEventVO mjonEventVO = new MjonEventVO();
-		mjonEventVO.setMberId(userId);
-		
+
+		/////////////////////////////////////////////////////////////////////////////
+		// 금액 관련은 끝에서 이벤트 발송 / 기존금액 박송으로 나눠야하기 때문에 나중에 수정
+		/////////////////////////////////////////////////////////////////////////////
+		/*
 		//1.시스템 기본 단가 정보 불러오기
 		JoinSettingVO sysJoinSetVO = mjonMsgDataService.selectJoinSettingInfo();
 		
@@ -4089,7 +4080,11 @@
 		// 기존 소수점 2째자리에서 반올림하였으나, 정책 변경으로 소수점 버림 처리함
 //		boolean compareEndDate = false;
 		float paramEachPrice = Float.parseFloat(mjonMsgVO.getEachPrice());
+
 		
+		
+		MjonEventVO mjonEventVO = new MjonEventVO();
+		mjonEventVO.setMberId(userId); 
 		
 		MjonEventVO eventMberInfo = mjonEventService.selectEventMsgMberDefaultInfo(mjonEventVO);
 		// 호출부에서 handleEventStatus를 호출하고 예외 처리를 추가
@@ -4113,7 +4108,10 @@
 		        picture3Price = Float.parseFloat(eventMberInfo.getEventPicture3Price());
 		    }
 		}
-
+		
+		
+		
+		
 
 		// 토탈금액 "," 리플레이스 처리
 		mjonMsgVO.setTotPrice(mjonMsgVO.getTotPrice().replaceAll(",", ""));
@@ -4126,35 +4124,83 @@
 		int tmpTotCallCnt = mjonMsgVO.getCallToList().length;
 		float tmpTotPrice = tmpTotCallCnt * tmpEachPrice;
 		mjonMsgVO.setTotPrice(Float.toString(tmpTotPrice));
-		
+*/
+		/////////////////////////////////////////////////////////////////////////////
+		// 금액 관련은 끝에서 이벤트 발송 / 기존금액 박송으로 나눠야하기 때문에 나중에 수정
+		/////////////////////////////////////////////////////////////////////////////
 		
 		
 		////////////////////////////////////////////////
 		// 치환 여부
 		////////////////////////////////////////////////
-		if (MsgSendUtils.isReplacementRequired(mjonMsgVO)) {
+		List<MjonMsgSendVO> mjonMsgSendVOList = mjonMsgVO.getMjonMsgSendVOList();
+//		if (MsgSendUtils.isRepleasYN(mjonMsgVO)) {
 			
-			if (!MsgSendUtils.validateReplacementData(mjonMsgVO, statusResponse)) {
-				//특정문구 일괄변환 치환문자 데이터가 없습니다.
-				return statusResponse;  // 유효성 검사 실패 시 처리
-			}
+//			if (!MsgSendUtils.validateReplacementData(mjonMsgVO, mjonMsgTabulVO)) {
+//				//특정문구 일괄변환 치환문자 데이터가 없습니다.
+//				return statusResponse;  // 유효성 검사 실패 시 처리
+//			}
 
 			
-			
-			// 치환 문자 리스트 생성
-			ReplacementListsVO intiLists = MsgSendUtils.createReplacementLists(mjonMsgVO);
-			if(!MsgSendUtils.populateReplacementLists(mjonMsgVO ,intiLists, statusResponse)) {;
-				//문자 치환 후 전송 문자 길이를 초과하였습니다.
-				//문자 치환 중 오류가 발생하였습니다.
-				return statusResponse;
-			}
-			
-			// 발송 처리
-			statusResponse = processMessageSending(mjonMsgVO, intiLists, statusResponse);
-		} else {
-			// 일반 문자 발송
-			statusResponse = fncSendMsg(mjonMsgVO);
+
+		log.info(" ++ mjonMsgVO.getSpamStatus() :: [{}]", mjonMsgVO.getSpamStatus());
+		// smstxt 치환 및 스팸체크 후  mjonMsgSendVOList 에 add()
+		List<String> resultSpamTxt = mjonMsgDataService.selectSpamKeywordList();
+		if(!MsgSendUtils.populateSendLists(mjonMsgVO, mjonMsgSendVOList, statusResponse, resultSpamTxt)) {;
+			//문자 치환 후 전송 문자 길이를 초과하였습니다.
+			//문자 치환 중 오류가 발생하였습니다.
+			return statusResponse;
 		}
+		log.info(" ++ mjonMsgVO.getSpamStatus() :: [{}]", mjonMsgVO.getSpamStatus());
+		
+		
+		// 수신목록 셋팅
+		
+		
+
+		// 수신거부 목록 불러오기
+		List<String> userBlockList = mjonMsgDAO.selectUserBlockList(mjonMsgVO);
+
+		List<String> dupliBlockList = MJUtil.getDuplicateList(userBlockList);
+		int usrBlockCnt = dupliBlockList.size();
+		
+		
+		
+		
+		
+		
+		
+		
+		
+		
+		
+		
+		
+//		mjonMsgSendVOList.stream().forEach(t-> System.out.println(t.toString()));
+		
+//		mjonMsgSendVOList.stream()
+//			.map(MjonMsgSendVO::getSmsTxt) // 각 객체의 getSmsTxt() 호출
+//			.forEach(System.out::println); // 결과를 바로 출력
+		
+
+			
+
+		//////////////////////////////////
+		//////////////////////////////////
+		//////////////////////////////////
+//		if(true) {
+//		    return new StatusResponse(HttpStatus.BAD_REQUEST, "문자 테스트 실패");
+//		}
+		//////////////////////////////////
+		//////////////////////////////////
+		//////////////////////////////////
+		
+			// 발송 처리
+//			statusResponse = processMessageSending(mjonMsgVO, intiLists, statusResponse);
+//		} else {
+//			// 일반 문자 발송
+//			statusResponse = fncSendMsg(mjonMsgVO);
+//		}
 		
 		return statusResponse;
 
@@ -4208,6 +4254,7 @@
 				
 				String imgFilePath = mjonMsgDAO.selectPhotoImgFileRealPath(fileId[i]);
 
+				log.info("imgFilePath : [{}]", imgFilePath);
 				if (StringUtils.isEmpty(imgFilePath)) {
 					statusResponse.setStatus(HttpStatus.NO_CONTENT);
 					statusResponse.setMessage("문자 메세지 이미지 추가에 오류가 발생하여 문자 발송이 취소 되었습니다.");
@@ -4262,7 +4309,7 @@
 	
 	
 	
-	
+	/*
 	// 그림 문자 발송 처리 메서드
 	private StatusResponse processMessageSending(MjonMsgVO mjonMsgVO, ReplacementListsVO lists, StatusResponse statusResponse) throws Exception {
 
@@ -4288,7 +4335,7 @@
 
 		return statusResponse;
 	}
-
+*/
 
 	private Map<String, String> fncSendMsgRtnMap(MjonMsgVO mjonMsgVO) throws Exception {
 		Map<String, String> returnMap = new HashMap<String, String>();
@@ -4437,6 +4484,8 @@
 	 * 20241002 이호영
 	 * 치환 후 장문, 단문이 모두 있을 수 있기 때문에 아래 로직처럼 모든 if를 열어둠 
 	 */
+	
+	/*
 	private Map<String, String> sendMessages(MjonMsgVO msgVO, ReplacementListsVO lists) throws Exception {
 
 		Map<String, String> resultMap = new HashMap<>();
@@ -4568,8 +4617,9 @@
 		return fncSendMsgRtnMap(msgVO);
 		
 		*/
+	/*
 	}
-    
+*/
 
     // 20240924 이호영
     // 이벤트 상태를 처리하는 메서드
@@ -4622,7 +4672,8 @@
 
 
 		// Step 1: 메시지 내용이 있는지 확인 후 msgType 정하기
-		String msgType = checkMessageContent(mjonMsgVO);
+//		String msgType = checkMessageContent(mjonMsgVO);
+		String msgType = "";
 		if (msgType == null) {
 			return new StatusResponse(HttpStatus.BAD_REQUEST, "입력 문자 내용을 확인할 수 없습니다. 문자 내용을 입력해 주세요.");
 		}
@@ -4677,27 +4728,27 @@
 	 * @throws IllegalArgumentException 메시지 길이가 초과된 경우 예외 발생
 	 * @작성자 20241007 이호영
 	*/
-	private String checkMessageContent(MjonMsgVO mjonMsgVO) {
-		try {
-			// 문자 바이트 계산을 MsgSendUtils의 유틸리티 메서드를 사용하여 처리
-			int smsBytes = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt());
-	
-			// 메시지 내용이 없는 경우 null 반환
-			if (smsBytes < 1) {
-				return null;
-			}
-	
-			// 메시지 타입 결정 로직을 MsgSendUtils의 getMsgType 메서드를 사용하여 처리
-			String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsBytes);
-			if ("INVALID".equals(msgType)) {
-				return "INVALID";
-			}
-	
-			return msgType;
-		} catch (UnsupportedEncodingException e) {
-			throw new IllegalArgumentException("문자 인코딩 중 오류가 발생하였습니다.", e);
-		}
-	}
+//	private String checkMessageContent(MjonMsgVO mjonMsgVO) {
+//		try {
+//			// 문자 바이트 계산을 MsgSendUtils의 유틸리티 메서드를 사용하여 처리
+//			int smsBytes = MsgSendUtils.getSmsTxtBytes(mjonMsgVO.getSmsTxt());
+//	
+//			// 메시지 내용이 없는 경우 null 반환
+//			if (smsBytes < 1) {
+//				return null;
+//			}
+//	
+//			// 메시지 타입 결정 로직을 MsgSendUtils의 getMsgType 메서드를 사용하여 처리
+//			String msgType = MsgSendUtils.getMsgType(mjonMsgVO, smsBytes);
+//			if ("INVALID".equals(msgType)) {
+//				return "INVALID";
+//			}
+//	
+//			return msgType;
+//		} catch (UnsupportedEncodingException e) {
+//			throw new IllegalArgumentException("문자 인코딩 중 오류가 발생하였습니다.", e);
+//		}
+//	}
 
 
 
src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
--- src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
+++ src/main/java/itn/let/mjo/msgdata/web/MjonMsgDataController.java
@@ -69,7 +69,7 @@
 import itn.com.cmm.EgovMessageSource;
 import itn.com.cmm.JsonResult;
 import itn.com.cmm.LoginVO;
-import itn.com.cmm.MjonMsgTabulVO;
+import itn.com.cmm.MjonMsgSendVO;
 import itn.com.cmm.service.EgovFileMngService;
 import itn.com.cmm.service.EgovFileMngUtil;
 import itn.com.cmm.service.FileVO;
@@ -2071,6 +2071,7 @@
 					String parserStr = ComGetSpamStringParser.getSpamTextParse(spmTxt).trim();
 
 					System.out.println("spmTxt : "+ spmTxt);
+					System.out.println("parserStr : "+ parserStr);
 					if(resultParser.contains(parserStr)) {
 						//스팸 단어/문구가 있으면 콤마로 연결시킨 후 리턴해줌.
 						spmFilterTxt += spmTxt + ",";
@@ -3077,6 +3078,7 @@
 			String smishingYn = "N";
 			String spamStatus = mjonMsgVO.getSpamStatus(); //스미싱 의심으로 체크된 문자 정보
 			
+			
 			UserManageVO userManageVO = new UserManageVO();
 			userManageVO.setMberId(userId);
 			
@@ -3172,8 +3174,8 @@
 	        ModelMap model) throws Exception {
 
 	    // 디버깅 출력
-	    System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgTabulListVO().toString());
-	    System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgTabulListVO().size());
+	    System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().toString());
+	    System.out.println("mjonMsgVO : " + mjonMsgVO.getMjonMsgSendVOList().size()); 
 		
 		return ResponseEntity.ok().body(mjonMsgDataService.sendMsgData_advc(mjonMsgVO, request)) ;
 //		return null;
src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser.java
--- src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser.java
+++ src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser.java
@@ -6,156 +6,128 @@
 
 public class ComGetSpamStringParser {
 	
-	/*
-	 * 스팸 문자 필터링을 위한 변형된 한글 SMS 문장의 정규화 기법을 기반으로 개발 
-	 * Kang Seung-Shik
-	 * 
-	 * 20230419
-	 * */
-	
-	//이상문자열 파싱 후 결합하여 
-	public static String getSpamTextParse(String strString) throws Exception {
-		
-		String smsTxt = strString;
-		String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", "");		//한글, 영문, 숫자 이외의 문자는 제거
-		String[] split = repSmsTxt.split(" ");										//띄어쓰기를 기준으로 분할
-		String reMakeStringText = "";
-		
-		try {
-			
-			for(String txt : split) {
-				
-				for(int i=0; i < txt.length(); i++) {
-					
-					char test = txt.charAt(i); 
-					if(test >= 0xAC00) {//한글 문자이면 스킵 
-						continue;
-					}else {
-						
-						String tmpStr = Character.toString(test);
-						if(tmpStr.matches(".*[ㄱ-ㅎ]+.*")) {
-							
-							String nextCharAt = Character.toString(txt.charAt(i+1));//현재 단어 다음 단어가 어떤것인지 가져온다.
 
-							if(i == txt.length() - 1 ) {//일단 마지막 자음은 스킵 한다.
-								break;
-							}/*else if(!nextCharAt.matches(".*[ㄱ-ㅎㅏ-ㅣa-zA-Z]+.*")) {//현재 자음이면서 다음글자가 자/모음이 아니면 삭제 액ㄱ정 이런 경우 삭제하려고 함. 
-								txt = txt.replace(tmpStr, "");
-								break;
-							}*/
-							
-							
-							if(nextCharAt.matches(".*[a-zA-Z]+.*")) {//다음 단어가 영문이면 영문과 유사한 한글 모음을 찾아서 합쳐준다.
-								
-								String repCharAt = getEngToHanglue(nextCharAt);
-								String repStringChar = tmpStr + repCharAt;
-								
-								String repTxt = tmpStr + nextCharAt;
-								
-								txt = txt.replace(repTxt, repStringChar);
-								//System.out.println(txt);
-									
-								
-							}/*else if(nextCharAt.matches(".*[ㅏ-ㅣ]+.*")) {//다음 단어가 모음이면 앞 자음과 합쳐 주기
-								
-								String repStringChar = tmpStr + nextCharAt;
-								//String norString = Normalizer.normalize(repStringChar, Normalizer.Form.NFC);
-								//System.out.println(repStringChar);
-								
-								//txt = txt.replace(repStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다.
-								
-								//System.out.println(txt);
-								
-							}*/
-							
-						}else if(tmpStr.matches(".*[a-zA-Z]+.*")) {//영문단어가 나오면 앞뒤 단어 체크하여 연관성 없으면 삭제 처리.
-							
-							String engStr = tmpStr;
-							if(i < txt.length() - 1) {//마지막 글자 제외
-								char nextEngChar = txt.charAt(i+1);
-								if(i > 0) {//첫글자가 영문인 경우 제외
-									
-									char befEngChar = txt.charAt(i-1);
-									
-									//한글 단어사이에 영문자 한글자만 있는 경우 삭제 처리함.
-									if(nextEngChar >= 0xAC00 && befEngChar >= 0xAC00) {
-										
-										if(tmpStr.toLowerCase().equals("b")) {//B를 넣어서 한글로 읽힐수 있게도 함, 서B스 와 같은 형태
-											txt = txt.replace(engStr, "비");
-										}else {
-											txt = txt.replace(engStr, "");
-										}
-									}
-									
-								}
-								
-							}else {
-								
-								char befEngChar = txt.charAt(i-1);
-								//마지막 글자이고 앞글자가 한글이면 마지막 영단어 삭제 처리
-								if(befEngChar >= 0xAC00) {
-									txt = txt.replace(engStr, "");
-									//continue;
-								}
-								
-							}
-							
-						}else if(tmpStr.matches(".*[0-9]+.*")) {
-							
-							if(i-1 < 0) {//한글자만 있는경우 패스
-								continue;
-							}
-							
-							String befString = Character.toString(txt.charAt(i-1));
-							
-							if(befString.matches(".*[ㄱ-ㅎ]+.*")) {//이전 글자가 자음이면 변환 문자 체크
-								
-								String numToStr = getNumberToString(tmpStr);	//숫자를 모음으로 변환 처리
-								
-								String orgStringChar = befString + tmpStr;		//원래 앞자음 + 숫자
-								String repStringChar = befString + numToStr;	//원래 앞자음 + 숫자를 변환한 모음
-								
-								txt = txt.replace(orgStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다.
-								//System.out.println(txt);
-								
-							}else {
-								//숫자면 스킵
-								continue;
-							}
-							
-						}else {
-							//특수문자들 처리
-							String repSpcStr = getRepSpacialString(tmpStr); 
-							if(!repSpcStr.equals("")) {//변환문자가 있는경우만 치환
-								txt = txt.replace(tmpStr, repSpcStr);
-							}
-							
-						}
-						
-					}
-					
-				}
-				
-				reMakeStringText = reMakeStringText + " " + txt;
-				
+	/** 
+	 * @methodName	: getSpamTextParse 
+	 * @author		: 이호영
+	 * @date		: 2024.11.13 
+	 * @description	: 리펙토링
+	 * 					원본 : ComGetSpamStringParser_advc_backup_20241113.java
+	 * @param strString
+	 * @return
+	 * @throws Exception 
+	 */
+	public static String getSpamTextParse(String strString) throws Exception {
+		String smsTxt = strString;
+		String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", ""); // 한글, 영문, 숫자 이외의 문자는 제거
+		String[] split = repSmsTxt.split(" ");
+		StringBuilder reMakeStringText = new StringBuilder();
+
+		try {
+			for (String txt : split) {
+				txt = processCharacters(txt);
+				reMakeStringText.append(" ").append(txt);
 			}
-			
-			//System.out.println("++++++++++++++ ::: "+reMakeStringText);
-			//넘어오는 모든 글자에서 한글에 대해서 자/모음을 분리해준다.
-			List<String> jasoList = HangulParser.disassemble(reMakeStringText);
-			
-			//분리된 자/모음 리스트를 다시 한글로 합쳐준다.
+
+			// 분리된 자/모음을 합쳐 최종 문자열 생성
+			List<String> jasoList = HangulParser.disassemble(reMakeStringText.toString());
 			String assembleStr = HangulParser.assemble(jasoList);
-			
-			reMakeStringText = assembleStr;
-			
+
+			return assembleStr;
+
 		} catch (Exception e) {
-			System.out.println("++++++++++ getSpamTextParse Error !!! "+e);
+			System.out.println("++++++++++ getSpamTextParse Error !!! " + e);
 			return "getSpamTextParse 오류가 발생하였습니다.";
 		}
-		
-		return reMakeStringText;
-		
+	}
+
+	// 한 단어 내 각 문자에 대한 처리 로직
+	private static String processCharacters(String txt) throws Exception {
+		StringBuilder processedText = new StringBuilder(txt);
+
+		for (int i = 0; i < txt.length(); i++) {
+			char currentChar = txt.charAt(i);
+			if (isKorean(currentChar)) continue;
+
+			String tmpStr = Character.toString(currentChar);
+
+			// 자음, 영문, 숫자, 특수문자 각각에 대한 처리
+			if (isKoreanConsonant(tmpStr)) {
+				txt = handleConsonant(txt, tmpStr, i);
+			} else if (isEnglish(tmpStr)) {
+				txt = handleEnglish(txt, tmpStr, i);
+			} else if (isNumber(tmpStr)) {
+				txt = handleNumber(txt, tmpStr, i);
+			} else {
+				txt = handleSpecialCharacter(txt, tmpStr);
+			}
+		}
+
+		return processedText.toString();
+	}
+
+	// 자음 처리 로직
+	private static String handleConsonant(String txt, String tmpStr, int index) throws Exception {
+		if (index == txt.length() - 1) return txt;
+
+		String nextCharAt = Character.toString(txt.charAt(index + 1));
+		if (isEnglish(nextCharAt)) {
+			String repCharAt = getEngToHanglue(nextCharAt);
+			txt = txt.replace(tmpStr + nextCharAt, tmpStr + repCharAt);
+		}
+		return txt;
+	}
+
+	// 영문 처리 로직
+	private static String handleEnglish(String txt, String engStr, int index) {
+		if (index < txt.length() - 1 && index > 0) {
+			char nextChar = txt.charAt(index + 1);
+			char previousChar = txt.charAt(index - 1);
+			if (isKorean(previousChar) && isKorean(nextChar)) {
+				txt = txt.replace(engStr, engStr.equalsIgnoreCase("b") ? "비" : "");
+			}
+		} else if (index > 0 && isKorean(txt.charAt(index - 1))) {
+			txt = txt.replace(engStr, "");
+		}
+		return txt;
+	}
+
+	// 숫자 처리 로직
+	private static String handleNumber(String txt, String tmpStr, int index) throws Exception {
+		if (index == 0) return txt;
+		String previousStr = Character.toString(txt.charAt(index - 1));
+
+		if (isKoreanConsonant(previousStr)) {
+			String numToStr = getNumberToString(tmpStr);
+			txt = txt.replace(previousStr + tmpStr, previousStr + numToStr);
+		}
+		return txt;
+	}
+
+	// 특수문자 처리 로직
+	private static String handleSpecialCharacter(String txt, String tmpStr) throws Exception {
+		String repSpcStr = getRepSpacialString(tmpStr);
+		if (!repSpcStr.isEmpty()) {
+			txt = txt.replace(tmpStr, repSpcStr);
+		}
+		return txt;
+	}
+
+	// 문자 유형 판별 메서드
+	private static boolean isKorean(char ch) {
+		return ch >= 0xAC00;
+	}
+
+	private static boolean isKoreanConsonant(String str) {
+		return str.matches(".*[ㄱ-ㅎ]+.*");
+	}
+
+	private static boolean isEnglish(String str) {
+		return str.matches(".*[a-zA-Z]+.*");
+	}
+
+	private static boolean isNumber(String str) {
+		return str.matches(".*[0-9]+.*");
 	}
 	
 	/*
 
src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser_advc_backup_20241113.java (added)
+++ src/main/java/itn/let/mjo/spammsg/web/ComGetSpamStringParser_advc_backup_20241113.java
@@ -0,0 +1,249 @@
+package itn.let.mjo.spammsg.web;
+
+import java.util.List;
+
+import itn.let.hangulparser.HangulParser;
+
+public class ComGetSpamStringParser_advc_backup_20241113 {
+	
+	/*
+	 * 스팸 문자 필터링을 위한 변형된 한글 SMS 문장의 정규화 기법을 기반으로 개발 
+	 * Kang Seung-Shik
+	 * 
+	 * 20230419
+	 * */
+	
+	//이상문자열 파싱 후 결합하여 
+	public static String getSpamTextParse(String strString) throws Exception {
+		
+		String smsTxt = strString;
+		String repSmsTxt = smsTxt.replaceAll("[^ㄱ-ㅎㅏ-ㅣ가-힣a-zA-Z0-9①ⓒ⒪㈄β]", "");		//한글, 영문, 숫자 이외의 문자는 제거
+		String[] split = repSmsTxt.split(" ");										//띄어쓰기를 기준으로 분할
+		String reMakeStringText = "";
+		
+		try {
+			
+			for(String txt : split) {
+				
+				for(int i=0; i < txt.length(); i++) {
+					
+					char test = txt.charAt(i); 
+					if(test >= 0xAC00) {//한글 문자이면 스킵 
+						continue;
+					}else {
+						
+						String tmpStr = Character.toString(test);
+						if(tmpStr.matches(".*[ㄱ-ㅎ]+.*")) {
+							
+							String nextCharAt = Character.toString(txt.charAt(i+1));//현재 단어 다음 단어가 어떤것인지 가져온다.
+
+							if(i == txt.length() - 1 ) {//일단 마지막 자음은 스킵 한다.
+								break;
+							}/*else if(!nextCharAt.matches(".*[ㄱ-ㅎㅏ-ㅣa-zA-Z]+.*")) {//현재 자음이면서 다음글자가 자/모음이 아니면 삭제 액ㄱ정 이런 경우 삭제하려고 함. 
+								txt = txt.replace(tmpStr, "");
+								break;
+							}*/
+							
+							
+							if(nextCharAt.matches(".*[a-zA-Z]+.*")) {//다음 단어가 영문이면 영문과 유사한 한글 모음을 찾아서 합쳐준다.
+								
+								String repCharAt = getEngToHanglue(nextCharAt);
+								String repStringChar = tmpStr + repCharAt;
+								
+								String repTxt = tmpStr + nextCharAt;
+								
+								txt = txt.replace(repTxt, repStringChar);
+								//System.out.println(txt);
+									
+								
+							}/*else if(nextCharAt.matches(".*[ㅏ-ㅣ]+.*")) {//다음 단어가 모음이면 앞 자음과 합쳐 주기
+								
+								String repStringChar = tmpStr + nextCharAt;
+								//String norString = Normalizer.normalize(repStringChar, Normalizer.Form.NFC);
+								//System.out.println(repStringChar);
+								
+								//txt = txt.replace(repStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다.
+								
+								//System.out.println(txt);
+								
+							}*/
+							
+						}else if(tmpStr.matches(".*[a-zA-Z]+.*")) {//영문단어가 나오면 앞뒤 단어 체크하여 연관성 없으면 삭제 처리.
+							
+							String engStr = tmpStr;
+							if(i < txt.length() - 1) {//마지막 글자 제외
+								char nextEngChar = txt.charAt(i+1);
+								if(i > 0) {//첫글자가 영문인 경우 제외
+									
+									char befEngChar = txt.charAt(i-1);
+									
+									//한글 단어사이에 영문자 한글자만 있는 경우 삭제 처리함.
+									if(nextEngChar >= 0xAC00 && befEngChar >= 0xAC00) {
+										
+										if(tmpStr.toLowerCase().equals("b")) {//B를 넣어서 한글로 읽힐수 있게도 함, 서B스 와 같은 형태
+											txt = txt.replace(engStr, "비");
+										}else {
+											txt = txt.replace(engStr, "");
+										}
+									}
+									
+								}
+								
+							}else {
+								
+								char befEngChar = txt.charAt(i-1);
+								//마지막 글자이고 앞글자가 한글이면 마지막 영단어 삭제 처리
+								if(befEngChar >= 0xAC00) {
+									txt = txt.replace(engStr, "");
+									//continue;
+								}
+								
+							}
+							
+						}else if(tmpStr.matches(".*[0-9]+.*")) {
+							
+							if(i-1 < 0) {//한글자만 있는경우 패스
+								continue;
+							}
+							
+							String befString = Character.toString(txt.charAt(i-1));
+							
+							if(befString.matches(".*[ㄱ-ㅎ]+.*")) {//이전 글자가 자음이면 변환 문자 체크
+								
+								String numToStr = getNumberToString(tmpStr);	//숫자를 모음으로 변환 처리
+								
+								String orgStringChar = befString + tmpStr;		//원래 앞자음 + 숫자
+								String repStringChar = befString + numToStr;	//원래 앞자음 + 숫자를 변환한 모음
+								
+								txt = txt.replace(orgStringChar, repStringChar);//분리된 자믐, 모음을 합쳐진 한 단어로 치환해준다.
+								//System.out.println(txt);
+								
+							}else {
+								//숫자면 스킵
+								continue;
+							}
+							
+						}else {
+							//특수문자들 처리
+							String repSpcStr = getRepSpacialString(tmpStr); 
+							if(!repSpcStr.equals("")) {//변환문자가 있는경우만 치환
+								txt = txt.replace(tmpStr, repSpcStr);
+							}
+							
+						}
+						
+					}
+					
+				}
+				
+				reMakeStringText = reMakeStringText + " " + txt;
+				
+			}
+			
+			//System.out.println("++++++++++++++ ::: "+reMakeStringText);
+			//넘어오는 모든 글자에서 한글에 대해서 자/모음을 분리해준다.
+			List<String> jasoList = HangulParser.disassemble(reMakeStringText);
+			
+			//분리된 자/모음 리스트를 다시 한글로 합쳐준다.
+			String assembleStr = HangulParser.assemble(jasoList);
+			
+			reMakeStringText = assembleStr;
+			
+		} catch (Exception e) {
+			System.out.println("++++++++++ getSpamTextParse Error !!! "+e);
+			return "getSpamTextParse 오류가 발생하였습니다.";
+		}
+		
+		return reMakeStringText;
+		
+	}
+	
+	/*
+	 * 
+	 * 한글과 유사한 영문자를 변환 처리함
+	 * 
+	 * */
+	public static String getEngToHanglue(String strWord) throws Exception {
+		
+		String returnStr = "";
+		
+		try {
+			
+			if(strWord.toLowerCase().equals("r")) {
+				
+				returnStr = "ㅏ";
+				
+			}else if(strWord.toLowerCase().equals("h")) {
+				
+				returnStr = "ㅐ";
+				
+			}else if(strWord.toLowerCase().equals("i") || strWord.toLowerCase().equals("I") || strWord.toLowerCase().equals("l")) {
+				
+				returnStr = "ㅣ";
+				
+			}
+			
+		} catch (Exception e) {
+			System.out.println("++++++++++++++ getEngToHanglue Error !!! "+e);
+		}
+		
+		return returnStr;
+	}
+	
+	
+	/*
+	 * 
+	 * 한글과 유사한 숫자를 변환처리함
+	 * 
+	 * */
+	public static String getNumberToString(String strWord) throws Exception {
+		
+		String returnStr = "";
+		
+		try {
+			
+			if(strWord.equals("1")) {
+				
+				returnStr = "ㅣ";
+				
+			}
+			
+		} catch (Exception e) {
+			System.out.println("++++++++++++++ getNumberToString Error !!! "+e);
+		}
+		
+		return returnStr;
+	}
+	
+	/*
+	 * 
+	 * 한글과 유사한 특수문자들 변환처리함
+	 * 
+	 * */
+	public static String getRepSpacialString(String strWord) throws Exception{
+		
+		String returnStr = "";
+		
+		try {
+			
+			if(strWord.equals("ⓒ")) {
+				returnStr = "c";
+			}else if(strWord.equals("β")) {
+				returnStr = "비";
+			}else if(strWord.equals("⒪")) {
+				returnStr = "ㅇ";
+			}else if(strWord.equals("㈄")) {
+				returnStr = "ㅁ";
+			}else if(strWord.equals("①")) {
+				returnStr = "ㅣ";
+			}
+			
+		} catch (Exception e) {
+			System.out.println("++++++++++++++ getRepSpacialString Error !!! "+e);
+		}
+		
+		return returnStr;
+		
+	}
+	
+}
src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
--- src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
+++ src/main/java/itn/let/schdlr/service/impl/SchdlrManageServiceImpl.java
@@ -425,8 +425,12 @@
 	//카카오 환불 처리 리스트
 	public void kakaoFailPayBack() throws Exception {
 		
+		//카카오 알림톡 환불 처리
 		kakaoAlimTalkService.selectKakaoAtSentRefundList();
 		
+		//카카오 친구톡 환불 처리
+		kakaoAlimTalkService.selectKakaoFtSentRefundList();
+		
 	}
 
 	@Override
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
@@ -36,6 +36,7 @@
 	private float customEdit3Price;			// 이미지 편집(첨부이미지 3장이하)
 	private float customTextPrice;			// 텍스트 단순수정
 	private float kakaoAtPrice;				// 카카오 알림톡 단가
+	private float kakaoFtPrice;				// 카카오 친구톡 단가
 	private float faxPrice;					// 팩스 단가
 	
 	private float refundPer; //환불 비율
@@ -210,6 +211,14 @@
 		this.kakaoAtPrice = kakaoAtPrice;
 	}
 
+	public float getKakaoFtPrice() {
+		return kakaoFtPrice;
+	}
+
+	public void setKakaoFtPrice(float kakaoFtPrice) {
+		this.kakaoFtPrice = kakaoFtPrice;
+	}
+
 	public float getFaxPrice() {
 		return faxPrice;
 	}
src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
--- src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
+++ src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
@@ -1105,6 +1105,7 @@
 		model.addAttribute("sysPicture3Price", sysJoinSetVO.getPicture3Price());
 		model.addAttribute("sysPicture3Price", sysJoinSetVO.getPicture3Price());
 		model.addAttribute("sysKakaoAtPrice", sysJoinSetVO.getKakaoAtPrice());
+		model.addAttribute("sysKakaoFtPrice", sysJoinSetVO.getKakaoFtPrice());
 		
 		// 등급제 단가 추출 => 시스템 단가에 적용
 		sysJoinSetVO = mberGrdService.selectMberGrdDefaultInfo(sysJoinSetVO, userId);
@@ -1116,6 +1117,7 @@
 		Float picture2Price = mberManageVO.getPicture2Price();
 		Float picture3Price = mberManageVO.getPicture3Price();
 		Float kakaoAtPrice = mberManageVO.getKakaoAtPrice();
+		Float kakaoFtPrice = mberManageVO.getKakaoFtPrice();
 		Float faxPrice = mberManageVO.getFaxPrice();
 		System.out.println("mberManageVO.getFaxPrice() : " + mberManageVO.getFaxPrice());
 		
@@ -1131,6 +1133,11 @@
 		if(kakaoAtPrice < 1) {
 			kakaoAtPrice = sysJoinSetVO.getKakaoAtPrice();
 		}
+		
+		if(kakaoFtPrice < 1) {
+			kakaoFtPrice = sysJoinSetVO.getKakaoFtPrice();
+		}
+		
 		if(faxPrice < 1) {
 			faxPrice = sysJoinSetVO.getFaxPrice();
 		}
@@ -1141,6 +1148,7 @@
 		model.addAttribute("picture2Price", picture2Price);
 		model.addAttribute("picture3Price", picture3Price);
 		model.addAttribute("kakaoAtPrice", kakaoAtPrice);
+		model.addAttribute("kakaoFtPrice", kakaoFtPrice);
 		model.addAttribute("faxPrice", faxPrice);
 		model.addAttribute("sysJoinSetVO", sysJoinSetVO);
 		
@@ -1319,6 +1327,9 @@
 			double kakaoAtCost = 0.00;
 			double kakaoAtMargin = 0.00;
 			
+			double kakaoFtCost = 0.00;
+			double kakaoFtMargin = 0.00;
+			
 			double faxCost = 0.00;
 			double faxMargin = 0.00;
 			
@@ -1351,10 +1362,23 @@
 					avgPriceP = Double.parseDouble(item.getAgentPrice());
 				}
 			}
+
+			/*
+			 * 알림톡,친구톡 원가 정보 조회
+			 * Agent 코드 번호를 넘겨준다.
+			 * 다우기술 04번으로 넘겨줌
+			 * */
 			
-			// kakao 원가
-			kakaoAtCost = kakaoApiService.selectKakaoCost();
+			MjonMsgAgentStsVO resultAgentCost = mjonMsgAgentStsService.selectHotLineAgentCost("04");
+			kakaoAtCost = resultAgentCost.getKakaoAtCost();	//알림톡 원가
+			kakaoFtCost = resultAgentCost.getKakaoFtCost();	//친구톡 원가
+			
+			// kakao 알림톡 마진률 계산
+			//kakaoAtCost = kakaoApiService.selectKakaoCost();
 			kakaoAtMargin = (1-(kakaoAtCost / kakaoAtPrice))*100;
+			
+			//kakao 친구톡 마진률 계산
+			kakaoFtMargin = (1-(kakaoFtCost / kakaoFtPrice))*100;
 			
 			// fax 원가 SELECT
 			faxCost = faxService.getFaxCost();
@@ -1372,7 +1396,9 @@
 			model.addAttribute("avgPriceL", avgPriceL);
 			model.addAttribute("avgPriceP", avgPriceP);
 			model.addAttribute("kakaoAtCost", kakaoAtCost);
+			model.addAttribute("kakaoFtCost", kakaoFtCost);
 			model.addAttribute("kakaoAtMargin", kakaoAtMargin);
+			model.addAttribute("kakaoFtMargin", kakaoFtMargin);
 			model.addAttribute("faxCost", faxCost);
 			model.addAttribute("faxMargin", faxMargin);
 		}		
@@ -3045,6 +3071,11 @@
             // 알림톡 => 수정하려는 단가가 시스템기본단가와 동일할경우 0으로 세팅
             if (Float.compare(sysJoinSetVO.getKakaoAtPrice(), mberManageVO.getKakaoAtPrice()) == 0) {
             	mberManageVO.setKakaoAtPrice(0);
+            }
+            
+            // 친구톡 => 수정하려는 단가가 시스템기본단가와 동일할경우 0으로 세팅
+            if (Float.compare(sysJoinSetVO.getKakaoFtPrice(), mberManageVO.getKakaoFtPrice()) == 0) {
+            	mberManageVO.setKakaoFtPrice(0);
             }
             
     		int resultCnt = mberManageService.updateUserPrice(mberManageVO);
@@ -4942,7 +4973,7 @@
      * 회원 이용정지 사유  조회하기
      * @param searchVO
      * @param model
-     * @return	"/uss/umt/user/uss/umt/user/EgovGnrlselectedUserView.do.do"
+     * @return	"/uss/umt/user/uss/umt/user/selectMberSpamBlockMemoDetailAjax.do"
      * @throws Exception
      */
     @RequestMapping(value = {"/uss/umt/user/selectMberSpamBlockMemoDetailAjax.do"})
src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/kakao/MjonKakaoATData_SQL_mysql.xml
@@ -367,11 +367,11 @@
 			AND     C.RSLT_CODE != '7000'
 			AND     C.MSG_TYPE = '8'
 		)	AS atFailCount ,
-		<!-- ( SELECT COUNT(0) 
+		( SELECT COUNT(0) 
 			FROM    MJ_MSG_DATA C
 			WHERE   C.DEL_FLAG     = 'N'
 			AND     C.RESERVE_C_YN = 'N'
-			AND     C.MSG_GROUP_ID = MG.MSG_GROUP_ID
+			AND     C.MSG_GROUP_ID = M2.msgGroupId
 			AND     C.RSLT_CODE = '7000'
 			AND     C.MSG_TYPE = '9'
 		)	AS ftSuccessCount ,
@@ -379,12 +379,12 @@
 			FROM    MJ_MSG_DATA C
 			WHERE   C.DEL_FLAG     = 'N'
 			AND     C.RESERVE_C_YN = 'N'
-			AND     C.MSG_GROUP_ID = MG.MSG_GROUP_ID
+			AND     C.MSG_GROUP_ID = M2.msgGroupId
 			AND     C.RSLT_CODE != '7000'
 			AND     C.MSG_TYPE = '9'
-		)	AS ftFailCount , -->
-		'0' AS ftSuccessCount,
-		'0' AS ftFailCount,
+		)	AS ftFailCount ,
+		<!-- '0' AS ftSuccessCount,
+		'0' AS ftFailCount, -->
 		M2.bizUmid,
 		M2.callStatus,
 		M2.bizKakaoResendYn,
@@ -525,7 +525,7 @@
 				</isNotEmpty>
 				AND MG.DEL_FLAG ='N'
 				AND MG.RESERVE_C_YN = 'N'
-				AND MG.MSG_TYPE = '8'
+				AND MG.MSG_TYPE IN ('8', '9')
 			)M
 			LEFT JOIN MJ_KAKAO_PROFILE_INFO MKPI
 			ON	M.MSG_NOTICETALK_SENDER_KEY = MKPI.SENDER_KEY 
@@ -1142,7 +1142,7 @@
 				AND     C.RSLT_CODE != '7000'
 				AND     C.MSG_TYPE = '8'
 			)	AS atFailCount ,
-			<!-- ( SELECT COUNT(0) 
+			( SELECT COUNT(0) 
 				FROM    MJ_MSG_DATA C
 				WHERE   C.DEL_FLAG     = 'N'
 				AND     C.RESERVE_C_YN = 'N'
@@ -1157,9 +1157,9 @@
 				AND     C.MSG_GROUP_ID = M2.msgGroupId
 				AND     C.RSLT_CODE != '7000'
 				AND     C.MSG_TYPE = '9'
-			)	AS ftFailCount ,-->
-			'0' AS ftSuccessCount,
-			'0' AS ftFailCount,
+			)	AS ftFailCount ,
+			<!-- '0' AS ftSuccessCount,
+			'0' AS ftFailCount, -->
 			M2.bizUmid,
 			M2.callStatus,
 			M2.bizKakaoResendYn,
@@ -1290,7 +1290,7 @@
 				</isNotEmpty>
 					AND MG.DEL_FLAG ='N'
 					AND MG.RESERVE_C_YN = 'N'
-					AND MG.MSG_TYPE = '8'
+					AND MG.MSG_TYPE IN ('8', '9')
 				)M
 				LEFT JOIN MJ_KAKAO_PROFILE_INFO MKPI
 				ON	M.MSG_NOTICETALK_SENDER_KEY = MKPI.SENDER_KEY 
@@ -1363,7 +1363,8 @@
 				
 				<isNotEmpty property="pageType">
 					<isEqual property="pageType" compareValue="sand">
-						AND M.AT_DELAY_COMPLETE_YN ='Y'
+					/** 20240119 우영두 수정 - 딜레이 승인된 건들만 조회하고 있어서 AND 조건 에서 OR 조건으로 변경 처리함 */
+						OR M.AT_DELAY_COMPLETE_YN ='Y'
 						/*AND M.REFUND_YN = 'N'*/
 					</isEqual>
 				</isNotEmpty>
@@ -2386,7 +2387,7 @@
 				MJ_MSG_DATA A
 			WHERE 1=1
 				AND A.USER_ID = #userId#
-				AND A.MSG_TYPE IN (8)
+				AND A.MSG_TYPE IN ('8', '9')
 			GROUP BY A.MSG_GROUP_ID
 			)A
 			LEFT JOIN MJ_MSG_GROUP_DATA MGD
src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/KakaoSent_SQL_Mysql.xml
@@ -911,6 +911,7 @@
 		SELECT
 		    MGD.MSG_GROUP_ID				as msgGroupId
 			, MGD.USER_ID					as userId
+			, MD.MSG_TYPE					as msgType
 			, MD.REQ_DATE					as reqDate /* 발송 시간 */
 			, MD.MSG_NOTICETALK_SENDER_KEY	as msgNoticetalkSenderKey 	/* api key */
 			, MD.MSG_NOTICETALK_TMP_KEY		as msgNoticetalkTmpKey 		/* 특정 템플릿 key */
@@ -921,6 +922,7 @@
 			, MD.BIZ_KAKAO_RESEND_TYPE		as bizKakaoResendType		/* MMS / LMS / SMS */
 			, MD.BIZ_KAKAO_RESEND_DATA		as bizKakaoResendData 		/* 대체 문자 (치환O) */
 			, MGD.BIZ_KAKAO_RESEND_ORGNL_TXT   as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */
+			, MD.BIZ_KAKAO_JSON_FILE		as bizKakaoJsonFile			/* Json 파일 경로 */
 		FROM MJ_MSG_GROUP_DATA MGD
 				INNER JOIN MJ_MSG_DATA MD 
 					ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID
@@ -937,6 +939,7 @@
 
 		SELECT
 			MD.REQ_DATE					as reqDate /* 발송 시간 */
+			, MD.MSG_TYPE					as msgType
 			, MD.MSG_NOTICETALK_SENDER_KEY	as msgNoticetalkSenderKey 	/* api key */
 			, MD.MSG_NOTICETALK_TMP_KEY		as msgNoticetalkTmpKey 		/* 특정 템플릿 key */
 			, MD.SMS_TXT					as smsTxtTrans 				/* 알림톡 본문 내용 치환(O)*/
@@ -944,6 +947,7 @@
 			, MD.BIZ_KAKAO_RESEND_YN		as bizKakaoResendYn 		/* 대체 문자 사용 여부*/
 			, MD.BIZ_KAKAO_RESEND_TYPE		as bizKakaoResendType		/* MMS / LMS / SMS */
 			, MD.BIZ_KAKAO_RESEND_DATA		as bizKakaoResendData 		/* 대체 문자 (치환O) */
+			, MD.BIZ_KAKAO_JSON_FILE		as bizKakaoJsonFile			/* Json 파일 경로 */
 		FROM MJ_MSG_DATA MD
 		WHERE
 			MD.MSG_ID	= #msgId#
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
@@ -103,6 +103,32 @@
 			AND MMD.MSG_TYPE = 8
 	</select>
 	
+	<select id="kakaoAlimTalkDAO.selectKakaoFtSentRefundList" resultClass="kakaoVO">
+		SELECT
+			MMD.USER_ID									AS userId
+			, MMD.MSG_GROUP_ID							AS msgGroupId
+			, MMD.MSG_SEQ								AS msgSeq
+			, MMD.USERDATA								AS userData
+			, MMD.REFUND_YN								AS refundYn
+			, MMD.RSLT_CODE								AS rsltCode
+			, MMD.RSLT_CODE2							AS rsltCode2
+			, MMD.AGENT_CODE							AS agentCode
+			, DATE_FORMAT(MMD.SENT_DATE,'%Y-%m-%d %T')	AS sentDate
+			, DATE_FORMAT(MMD.RSLT_DATE,'%Y-%m-%d %T')	AS rsltDate
+			, MMD.BIZ_KAKAO_RESEND_YN					AS subMsgSendYn
+			, MMD.BIZ_KAKAO_RESEND_TYPE					AS subMsgType
+			
+		FROM
+			MJ_MSG_DATA MMD
+			INNER JOIN LETTNGNRLMBER MB
+			ON MMD.USER_ID = MB.MBER_ID
+		WHERE 1=1
+			AND	MMD.CUR_STATE          = '3'
+			AND	MMD.REFUND_YN          = 'N'
+			AND	MMD.RESERVE_C_YN       = 'N'
+			AND MMD.MSG_TYPE = 9
+	</select>
+	
 	<select id="kakaoAlimTalkDAO.selectKakaoAtUmid" resultClass="kakaoVO" parameterClass="kakaoVO">
 		SELECT
 			BIZ_UMID	AS bizUmid
@@ -126,4 +152,22 @@
 	<procedure id="kakaoAlimTalkDAO.updateKakaoAtNotSend" parameterClass="kakaoVO">
 		{call kakaoAt_NotSend(#userId#, #msgGroupId#, #userData#)}
 	</procedure>
+	
+	
+	
+	<!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 성공 관련 - 대체문자 선택시 차액 환불 처리) -->
+	<procedure id="kakaoAlimTalkDAO.updateKakaoFtSend" parameterClass="kakaoVO">
+		{call kakaoFt_Send(#userId#, #msgGroupId#, #userData#)}
+	</procedure>
+	
+	<!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 실패시 대체문자 관련 - 대체문자 발송 완료 된 경우) -->
+	<procedure id="kakaoAlimTalkDAO.updateKakaoFtSubMsgSend" parameterClass="kakaoVO">
+		{call kakaoFt_SubMsg_Send(#userId#, #msgGroupId#, #userData#)}
+	</procedure>
+	
+	<!-- 카카오 친구톡 전송 환불 프로시저 실행 (카카오 전송 실패시 대체문자 관련 - 대체문자 발송 실패 된 경우) -->
+	<procedure id="kakaoAlimTalkDAO.updateKakaoFtNotSend" parameterClass="kakaoVO">
+		{call kakaoFt_NotSend(#userId#, #msgGroupId#, #userData#)}
+	</procedure>
+	
 </sqlMap>
(No newline at end of file)
src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_FT_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_FT_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/mjo/kakao/Kakao_FT_SQL_Mysql.xml
@@ -20,6 +20,7 @@
 		              USER_ID,
 		              ATCH_FILE_ID,
 		              TEMPLATE_NAME,
+		              IMAGE_FILE_NAME,
 		              IMAGE_URL,
 		              IMAGE_TYPE,
 		              IMAGE_TITLE,
@@ -38,6 +39,7 @@
 		              , #userId#
 		              , #bizJsonName#
 		              , #templateName#
+		              , #imageFileName#
 		              , #templateImageUrl#
 		              , #imageType#
 		              , #imgTitle#
@@ -94,72 +96,60 @@
 	
 	<select id="kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateList" parameterClass="kakaoVO" resultClass="kakaoVO">
 	
-		SELECT COUNT(A.FRIEND_ID) OVER() AS totCnt ,
-			   A.FRIEND_ID AS friendId,
-		       A.USER_ID AS userId,
-		       A.SENDER_KEY AS senderKey,
-		       KPI.YELLOW_ID AS yellowId,
-		       A.TEMPLATE_NAME AS templateName,
-		       A.IMAGE_URL AS templateImageUrl,
-		       A.IMAGE_TYPE AS imageType,
-		       A.IMAGE_TITLE AS imgTitle,
-		       A.IMAGE_LINK AS imgLink,
-		       A.TEMPLATE_CONTENTS AS templateContent,
-		       A.AD_FLAG AS adFlag,
-		       DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm,
-		       A.FRST_REGISTER_ID AS frstRegisterId,
-		       DATE_FORMAT(A.LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm,
-		       A.LAST_UPDUSR_ID AS lastUpdusrId
-		FROM   ( SELECT  KFT.FRIEND_ID,
-		                KFT.USER_ID,
-		                KFT.SENDER_KEY,
-		                KFT.TEMPLATE_NAME,
-		                KFT.IMAGE_URL,
-		                KFT.IMAGE_TYPE,
-		                KFT.IMAGE_TITLE,
-		                KFT.IMAGE_LINK,
-		                KFT.TEMPLATE_CONTENTS,
-		                KFT.AD_FLAG,
-		                KFT.FRST_REGIST_PNTTM,
-		                KFT.FRST_REGISTER_ID,
-		                KFT.LAST_UPDT_PNTTM,
-		                KFT.LAST_UPDUSR_ID
-		       FROM     MJ_KAKAO_FRIENDS_TEMPLATE KFT
-		       WHERE    DELETE_YN                                       = 'N'
-		       AND      USER_ID                                         = #userId#
-		       AND      SENDER_KEY                                      = #senderKey#
-		       <isNotEmpty property="searchKeyword">
-		       		AND      KFT.TEMPLATE_NAME                            LIKE CONCAT ('%', #searchKeyword#,'%')
-			   </isNotEmpty>
-		       <isNotEmpty property="startDate">
-				<![CDATA[ 
-		       		AND      DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
-			       ]]>
-			   </isNotEmpty>
-			   <isNotEmpty property="startDate">
-				<![CDATA[ 
-		       		AND      DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') <= DATE_FORMAT(#endDate#, '%Y-%m-%d')
-		       ]]>
-			   </isNotEmpty>
-		       ORDER BY 1                                               =1
-		       <isNotEmpty property="searchSortCnd">
-					<isEqual property="searchSortCnd" compareValue="curState">
-						, curState  $searchSortOrd$
-						, orderByrsltCode
-					</isEqual>
-					<isNotEqual  property="searchSortCnd" compareValue="curState">
-						,$searchSortCnd$
-					</isNotEqual>
-				</isNotEmpty>
-				<isNotEmpty property="searchSortOrd">
-					$searchSortOrd$
-				</isNotEmpty>
-				LIMIT  #recordCountPerPage# OFFSET #firstIndex#
-		       )
-		       A
-		       LEFT JOIN MJ_KAKAO_PROFILE_INFO KPI
-		       ON     A.USER_ID    = KPI.USER_ID
-		       AND    A.SENDER_KEY = KPI.SENDER_KEY
+		SELECT COUNT(KFT.FRIEND_ID) OVER() AS totCnt, 
+				KFT.FRIEND_ID AS friendId,
+                KFT.USER_ID AS userId,
+                KFT.SENDER_KEY AS senderKey,
+                KPI.YELLOW_ID AS yellowId,
+                KFT.TEMPLATE_NAME AS templateName,
+                KFT.IMAGE_FILE_NAME AS imageFileName,
+                KFT.IMAGE_URL AS templateImageUrl,
+                KFT.IMAGE_TYPE AS imageType,
+                KFT.IMAGE_TITLE AS imgTitle,
+                KFT.IMAGE_LINK AS imgLink,
+                KFT.TEMPLATE_CONTENTS AS templateContent,
+                KFT.AD_FLAG AS adFlag,
+                DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm,
+                KFT.FRST_REGISTER_ID AS frstRegisterId,
+                DATE_FORMAT(KFT.LAST_UPDT_PNTTM, '%Y-%m-%d %T') AS lastUpdtPnttm,
+                KFT.LAST_UPDUSR_ID AS lastUpdusrId
+       FROM     MJ_KAKAO_FRIENDS_TEMPLATE KFT
+       LEFT JOIN MJ_KAKAO_PROFILE_INFO KPI
+       ON     KFT.USER_ID    = KPI.USER_ID
+       AND    KFT.SENDER_KEY = KPI.SENDER_KEY
+       WHERE    KFT.DELETE_YN                                       = 'N'
+       AND      KFT.USER_ID                                         = #userId#
+       <isNotEmpty property="senderKey">
+       		AND      KFT.SENDER_KEY                                      = #senderKey#
+       </isNotEmpty>
+       <isNotEmpty property="searchKeyword">
+       		AND      KFT.TEMPLATE_NAME                            LIKE CONCAT ('%', #searchKeyword#,'%')
+	   </isNotEmpty>
+       <isNotEmpty property="startDate">
+		<![CDATA[ 
+       		AND      DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') >= DATE_FORMAT(#startDate#, '%Y-%m-%d')
+	       ]]>
+	   </isNotEmpty>
+	   <isNotEmpty property="startDate">
+		<![CDATA[ 
+       		AND      DATE_FORMAT(KFT.FRST_REGIST_PNTTM, '%Y-%m-%d') <= DATE_FORMAT(#endDate#, '%Y-%m-%d')
+       ]]>
+	   </isNotEmpty>
+       ORDER BY 1                                               =1
+       <isNotEmpty property="searchSortCnd">
+			<isEqual property="searchSortCnd" compareValue="curState">
+				, curState  $searchSortOrd$
+				, orderByrsltCode
+			</isEqual>
+			<isNotEqual  property="searchSortCnd" compareValue="curState">
+				,$searchSortCnd$
+			</isNotEqual>
+		</isNotEmpty>
+		<isNotEmpty property="searchSortOrd">
+			$searchSortOrd$
+		</isNotEmpty>
+		LIMIT  #recordCountPerPage# OFFSET #firstIndex#
+		       
 	
 	</select>
 	
@@ -199,5 +189,87 @@
 	
 	</delete>
 	
+	<select id="kakaoFriendsTalkTemplateDAO.selectKakaoFriendsTemplateDetail" parameterClass="kakaoVO" resultClass="kakaoVO">
+		SELECT A.FRIEND_ID                                     AS friendId,
+		       A.USER_ID                                       AS userId,
+		       A.SENDER_KEY                                    AS senderKey,
+		       KPI.YELLOW_ID                                   AS yellowId,
+		       A.TEMPLATE_NAME                                 AS templateName,
+		       A.IMAGE_FILE_NAME 							   AS imageFileName,
+		       A.IMAGE_URL                                     AS templateImageUrl,
+		       A.IMAGE_TYPE                                    AS imageType,
+		       A.IMAGE_TITLE                                   AS imgTitle,
+		       A.IMAGE_LINK                                    AS imgLink,
+		       A.TEMPLATE_CONTENTS                             AS templateContent,
+		       A.AD_FLAG                                       AS adFlag,
+		       DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %T') AS frstRegistPnttm,
+		       A.FRST_REGISTER_ID                              AS frstRegisterId,
+		       DATE_FORMAT(A.LAST_UPDT_PNTTM, '%Y-%m-%d %T')   AS lastUpdtPnttm,
+		       A.LAST_UPDUSR_ID                                AS lastUpdusrId
+		FROM   ( SELECT KFT.FRIEND_ID,
+		               KFT.USER_ID,
+		               KFT.SENDER_KEY,
+		               KFT.TEMPLATE_NAME,
+		               KFT.IMAGE_FILE_NAME,
+		               KFT.IMAGE_URL,
+		               KFT.IMAGE_TYPE,
+		               KFT.IMAGE_TITLE,
+		               KFT.IMAGE_LINK,
+		               KFT.TEMPLATE_CONTENTS,
+		               KFT.AD_FLAG,
+		               KFT.FRST_REGIST_PNTTM,
+		               KFT.FRST_REGISTER_ID,
+		               KFT.LAST_UPDT_PNTTM,
+		               KFT.LAST_UPDUSR_ID
+		       FROM    MJ_KAKAO_FRIENDS_TEMPLATE KFT
+		       WHERE   DELETE_YN = 'N'
+		       AND    USER_ID    = #userId#
+			   AND    FRIEND_ID = #friendId#
+		       )
+		       A
+		       LEFT JOIN MJ_KAKAO_PROFILE_INFO KPI
+		       ON     A.USER_ID    = KPI.USER_ID
+		       AND    A.SENDER_KEY = KPI.SENDER_KEY
+	
+	</select>
+	
+	<update id="kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateData" parameterClass="kakaoVO" >
+		
+		UPDATE MJ_KAKAO_FRIENDS_TEMPLATE
+			SET    ATCH_FILE_ID      = #bizJsonName#,
+			       TEMPLATE_NAME     = #templateName#,
+			       IMAGE_FILE_NAME   = #imageFileName#,
+			       IMAGE_URL         = #templateImageUrl#,
+			       IMAGE_TYPE        = #imageType#,
+			       IMAGE_TITLE       = #imgTitle#,
+			       IMAGE_LINK        = #imgLink#,
+			       SENDER_KEY        = #senderKey#,
+			       TEMPLATE_CONTENTS = #templateContent#,
+			       AD_FLAG           = #adFlag#,
+			       LAST_UPDT_PNTTM   = NOW(),
+			       LAST_UPDUSR_ID    = #lastUpdusrId#
+			WHERE
+				FRIEND_ID = #friendId#
+				AND USER_ID = #userId#
+				AND SENDER_KEY = #senderKey#
+	
+	</update>
+	
+	<update id="kakaoFriendsTalkTemplateDAO.updateKakaoFriendsTemplateImageDataDel" parameterClass="kakaoVO">
+		
+		UPDATE MJ_KAKAO_FRIENDS_TEMPLATE
+			SET    IMAGE_FILE_NAME   = '',
+			       IMAGE_URL         = '',
+			       IMAGE_TYPE        = '',
+			       IMAGE_TITLE       = '',
+			       IMAGE_LINK        = '',
+			       LAST_UPDT_PNTTM   = NOW(),
+			       LAST_UPDUSR_ID    = #lastUpdusrId#
+			WHERE
+				FRIEND_ID = #friendId#
+				AND USER_ID = #userId#
+				
+	</update>
+	
 	
 </sqlMap>
(No newline at end of file)
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
@@ -2105,6 +2105,7 @@
 			, CUSTOM_TEXT_PRICE		AS customTextPrice
 			, POINT_PER				AS pointPer
 			, KAKAO_AT_PRICE		AS kakaoAtPrice
+			, KAKAO_FT_PRICE		AS kakaoFtPrice
 			, FAX_PRICE				AS faxPrice
 		FROM MJ_MBER_SETTING
 	
src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
--- src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/uss/umt/EgovMberManage_SQL_Mysql.xml
@@ -1217,6 +1217,7 @@
 			, PICTURE2_PRICE = #picture2Price#
 			, PICTURE3_PRICE = #picture3Price#
 			, KAKAO_AT_PRICE = #kakaoAtPrice#
+			, KAKAO_FT_PRICE = #kakaoFtPrice#
 			, KAKAO_FT_IMG_PRICE = #kakaoFtImgPrice#
 			, KAKAO_FT_WIDE_IMG_PRICE = #kakaoFtWideImgPrice#
 		WHERE MBER_ID = #mberId#
src/main/webapp/WEB-INF/decorators.xml
--- src/main/webapp/WEB-INF/decorators.xml
+++ src/main/webapp/WEB-INF/decorators.xml
@@ -183,6 +183,7 @@
 		<pattern>*/web/pop/*</pattern>
 		<pattern>/web/mjon/kakao/template/selectKakaoAlimtalkTemplateListPopupAjax.do</pattern> 
 		<pattern>/web/mjon/kakao/alimtalk/selectKakaoAlimtalkTemplateDataTestPopup.do</pattern>
+		<pattern>/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do</pattern>
 		<pattern>/web/mjon/fax/faxSendDetailPopup.do</pattern>
 	</decorator>
 	
src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
--- src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
+++ src/main/webapp/WEB-INF/jsp/cmm/uss/umt/EgovGnrlUserSelectUpdt.jsp
@@ -5289,7 +5289,7 @@
 							<tr>
 								<th>구분</th>
 								<th>알림톡(<fmt:formatNumber value="${sysJoinSetVO.kakaoAtPrice}" pattern="###.#" />원)</th>
-								<th>친구톡(준비중)</th>
+								<th>친구톡(<fmt:formatNumber value="${sysJoinSetVO.kakaoFtPrice}" pattern="###.#" />원)</th>
 								<th>팩스(<fmt:formatNumber value="${sysJoinSetVO.faxPrice}" pattern="###.#" />원)</th>
 							</tr>
 						</thead>
@@ -5297,7 +5297,7 @@
 							<tr>
 								<td>문자온 원가</td>
 								<td><c:out value="${kakaoAtCost}"/></td>
-								<td>준비중</td>
+								<td><c:out value="${kakaoFtCost}"/></td>
 								<td><c:out value="${faxCost}"/></td>
 							</tr>
 							<tr>
@@ -5306,7 +5306,7 @@
 									<fmt:formatNumber value='${kakaoAtPrice}' pattern='###.#' />
 								</td>
 								<td>
-									준비중
+									<fmt:formatNumber value='${kakaoFtPrice}' pattern='###.#' />
 								</td>
 								<td>
 									<fmt:formatNumber value='${faxPrice}' pattern='###.#' />
@@ -5315,7 +5315,7 @@
 							<tr>
 								<td>마진률</td>
 								<td><fmt:formatNumber value="${kakaoAtMargin}" pattern=".0" />%</td>
-								<td>준비중</td>
+								<td><fmt:formatNumber value="${kakaoFtMargin}" pattern=".0" />%</td>
 								<td><fmt:formatNumber value="${faxMargin}" pattern=".0" />%</td>
 							</tr>
 						</tbody>
@@ -5772,6 +5772,10 @@
 							<th>알림톡 금액</th>
 							<td><input type="text" name="kakaoAtPrice" id="kakaoAtPrice" value="<c:out value='${kakaoAtPrice}'/>"/></td>
 						</tr>
+						<tr>
+							<th>친구톡 금액</th>
+							<td><input type="text" name="kakaoFtPrice" id="kakaoFtPrice" value="<c:out value='${kakaoFtPrice}'/>"/></td>
+						</tr>
 					</tbody>
 				</table>
 				<div class="button_box">
src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/KakaoATChannelIDList.jsp
--- src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/KakaoATChannelIDList.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/KakaoATChannelIDList.jsp
@@ -83,13 +83,27 @@
 }
 
 //선택 채널 알림톡 템플릿 리스트 불러오기
-function fnTemplateListPop(senderKey, userId){
+function fnAtTemplateListPop(yellowId, senderKey, userId){
+	
+	document.popupForm.senderKey.value = senderKey;
+	document.popupForm.userId.value = userId;
+	document.popupForm.yellowId.value = yellowId;
+	
+	window.open("about:blank", 'listPopup', 'width=930, height=860, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes');
+    document.popupForm.action = "<c:url value='/uss/ion/kakaoat/KakaoATChannelIDTemplateListPopupAjax.do'/>";
+    document.popupForm.target = "listPopup";
+    document.popupForm.submit();
+	
+}
+
+//선택 채널 친구톡 템플릿 리스트 불러오기
+function fnFtTemplateListPop(senderKey, userId){
 	
 	document.popupForm.senderKey.value = senderKey;
 	document.popupForm.userId.value = userId;
 	
 	window.open("about:blank", 'listPopup', 'width=930, height=860, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes');
-    document.popupForm.action = "<c:url value='/uss/ion/kakaoat/KakaoATChannelIDTemplateListPopupAjax.do'/>";
+    document.popupForm.action = "<c:url value='/uss/ion/kakaoft/KakaoFTChannelIDTemplateListPopupAjax.do'/>";
     document.popupForm.target = "listPopup";
     document.popupForm.submit();
 	
@@ -118,6 +132,7 @@
 	<input type="hidden" name="mberId"/>
 	<input type="hidden" id="senderKey" name="senderKey" value=""/>
 	<input type="hidden" name="userId" value=""/>
+	<input type="hidden" name="yellowId" value=""/>
 </form>
 
 
@@ -193,6 +208,7 @@
 						<col style="width: 19%">
 						<col style="width: 24%">
 						<col style="width: 10%">
+						<col style="width: 10%">
 						<col style="width: 11%">
 						<col style="width: 11%">
 						<col style="width: 10%">
@@ -204,6 +220,7 @@
 							<th>채널ID<input type="button" class="sort sortBtn" id="sort_yellowId"></th>
 							<th>채널명<input type="button" class="sort sortBtn" id="sort_yellowId"></th>
 							<th>등록상태</th>
+							<th>템플릿</th>
 							<th>채널생성일</th>
 							<th>채널등록일<input type="button" class="sort sortBtn" id="sort_lastUpdtPnttm"></th>
 							<th>삭제여부<input type="button" class="sort sortBtn" id="sort_deleteYn"></th>
@@ -226,7 +243,7 @@
 							<td  onClick="fnTemplateListPop('<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" style="cursor:pointer;">
 		                        <c:out value="${result.uuid}"/>
 							</td>
-							<td  onClick="fnTemplateListPop('<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" style="cursor:pointer;">
+							<td>
 								<c:out value="${result.name}"/>
 							</td>
 							<td>
@@ -249,6 +266,10 @@
                             		<c:otherwise>
                             		</c:otherwise>
                             	</c:choose>
+							</td>
+							<td>
+								<input type="button" class="btnType1" onClick="fnAtTemplateListPop('<c:out value="${result.uuid}"/>','<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');"  value="AT"/>
+								<input type="button" class="btnType1" onClick="fnFtTemplateListPop('<c:out value="${result.senderKey}"/>', '<c:out value="${result.userId}"/>');" value="FT"/>
 							</td>
 							<td>
 								<fmt:parseDate value="${result.createdAt}" var="dateValue" pattern="yyyy-MM-dd HH:mm:ss"/>
@@ -342,14 +363,14 @@
 						</tr>
 						</c:forEach>
 						<c:if test="${empty resultChannelList}">
-		         			<tr><td colspan="14"><spring:message code="common.nodata.msg" /></td></tr>
+		         			<tr><td colspan="9"><spring:message code="common.nodata.msg" /></td></tr>
 		         		</c:if>    
 					</tbody>
 				</table>
 			</div>
-			<!-- <div class="btnWrap">
-				<input type="button" class="btnType2"  onclick="javascript:fnSttusYAll(); return false;" value="일괄승인">
-			</div> -->
+			<div class="btnWrap">
+				<!-- <input type="button" class="btnType2"  onclick="javascript:fnSttusYAll(); return false;" value="일괄승인"> -->
+			</div>
 			<!-- 페이지 네비게이션 시작 -->
 			<c:if test="${!empty resultChannelList}">
 		 		<div class="page">
src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/ReserveKakaoATModify.jsp
--- src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/ReserveKakaoATModify.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/ReserveKakaoATModify.jsp
@@ -358,14 +358,17 @@
 							<c:out value="${mjonKakaoATDetailVO.yellowId}"/>
 						</td>
 					</tr>
-					<tr>
-						<th><span class="reqArea">템플릿명</span></th>
-						<td colspan="3">
-							<div class="btnWrap">
-								<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
-							</div>
-						</td>
-					</tr>
+					<c:if test="${not empty mjonKakaoATDetailVO.msgNoticetalkTmpKey}">
+						<!-- 알림톡 템플릿 상세 팝업 호출 -->
+						<tr>
+							<th><span class="reqArea">템플릿명</span></th>
+							<td colspan="3">
+								<div class="btnWrap">
+									<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
+								</div>
+							</td>
+						</tr>
+					</c:if>
 					<%-- <tr>
 						<th><span class="reqArea">발신번호</span></th>
 						<td colspan="3">
src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/SendKakaoATModify.jsp
--- src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/SendKakaoATModify.jsp
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoat/SendKakaoATModify.jsp
@@ -358,14 +358,17 @@
 							<c:out value="${mjonKakaoATDetailVO.yellowId}"/>
 						</td>
 					</tr>
-					<tr>
-						<th><span class="reqArea">템플릿명</span></th>
-						<td colspan="3">
-							<div class="btnWrap">
-								<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
-							</div>
-						</td>
-					</tr>
+					<c:if test="${not empty mjonKakaoATDetailVO.msgNoticetalkTmpKey}">
+						<!-- 알림톡 템플릿 상세 팝업 호출 -->
+						<tr>
+							<th><span class="reqArea">템플릿명</span></th>
+							<td colspan="3">
+								<div class="btnWrap">
+									<input type="button" class="btnType2" style="padding:5px 10px" onclick="fnTemplateDetail('<c:out value="${mjonKakaoATDetailVO.msgNoticetalkTmpKey}"/>'); return false;" value="템플릿 상세보기">
+								</div>
+							</td>
+						</tr>
+					</c:if>
 					<%-- <tr>
 						<th><span class="reqArea">발신번호</span></th>
 						<td colspan="3">
 
src/main/webapp/WEB-INF/jsp/uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateDetailPop.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateDetailPop.jsp
@@ -0,0 +1,1112 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title> 친구톡 템플릿 상세보기</title>
+<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap" rel="stylesheet">
+    <link rel="stylesheet" href="/publish/css/reset.css">
+    <link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css">
+    <link rel="stylesheet" href="/publish/css/common.css">
+    <link rel="stylesheet" href="/publish/css/button.css">
+    <link rel="stylesheet" href="/publish/css/content.css">
+    <link rel="stylesheet" href="/publish/css/adrbook.css">
+    <link rel="stylesheet" href="/publish/css/font.css">
+    <link rel="stylesheet" href="/publish/css/popupLayer.css">
+    <link rel="stylesheet" href="/publish/js/datepicker/classic.css">
+    <link rel="stylesheet" href="/publish/js/datepicker/classic.date.css">
+
+
+    <script src="/publish/js/jquery-3.5.0.js"></script>
+    <script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
+    <script src="/publish/js/common.js"></script>
+    <script src="/publish/js/content.js"></script>
+    <script src="/publish/js/popupLayer.js"></script>
+    <script type="text/javascript" src="/publish/js/datepicker/picker.js"></script>
+    <script type="text/javascript" src="/publish/js/datepicker/picker.date.js"></script>
+    <script type="text/javascript" src="/publish/js/datepicker/ko_KR.js"></script>
+
+	<script src="/js/MJUtill.js"></script>
+	<script src="/js/kakao/templateComm.js"></script>
+
+<script type="text/javascript">
+
+/* 파일등록 */
+var _fileIdx = 0;
+var _fileForm2 = new Array();
+var fileExt = ""; // 첨부파일 확장자
+
+$(document).ready(function (){
+	
+	initFormChk();
+	
+	//첫로딩시 우측 미리보기 화면 숨김처리
+	//$('.emphasis_title_text').hide();	//강조유형 타이틀
+	//$('.emphasis_side_text').hide();	//강조유형 보조문구
+	//$('.template_text').hide();			//내용 미리보기
+	//$('.side_info_text').hide();		//부가정보 내용
+	//$('.channel_info_text').hide();		//채널추가 텍스트 내용
+	//$('.btnAd').hide();					//샘플 채널추가 버튼
+	//$('.btnEmpty').hide();				//샘플 버튼
+	
+	$("#selectTemplateFirstCatagory").on("change", function(){
+		$("#selectTemplateSecondCatagory option").remove();
+		templateCatagoryChange("2", $(this).val(), "insert");
+	});
+	
+	$("#selectTemplateFirstCatagory_select").on("change", function(){
+		$("#selectTemplateSecondCatagory_select option").remove();
+		templateCatagoryChange("2", $(this).val(), "select");
+	});
+	
+	//메시지 유형에 따른 화면 변경 기능 추가
+	$("#selectTemplateType").on("change", function(){
+		if($(this).val() == 'BA'){
+			$("#ExTr").hide();
+			$("#AdTr").hide();
+			$("#buttonChannelAdd").hide();
+		}else if($(this).val() == 'EX'){
+			$("#ExTr").show();
+			$("#AdTr").hide();
+			$("#buttonChannelAdd").hide();
+		}else if($(this).val() == 'AD'){
+			$("#ExTr").hide();
+			$("#AdTr").show();
+			$("#buttonChannelAdd").show();
+			
+		}else{
+			
+		}
+	});
+	
+	//템플릿 강조유형에 따른 화면 변경 기능 추가
+	$("#selectTemplateEmphasizeType").on("change", function(){
+		if($(this).val() == 'NONE'){
+			$("#imageNameTr").hide();
+			$("#imageUrlTr").hide();
+			$("#titleTr").hide();
+			$("#subTitleTr").hide();
+		}else if($(this).val() == 'IMAGE'){
+			$("#imageNameTr").show();
+			$("#imageUrlTr").show();
+			$("#titleTr").hide();
+			$("#subTitleTr").hide();
+		}else if($(this).val() == 'TEXT'){
+			$("#imageNameTr").hide();
+			$("#imageUrlTr").hide();
+			$("#titleTr").show();
+			$("#subTitleTr").show();
+		}
+	});
+	
+	
+	
+	//템플릿명 입력 글자수 체크 해주기
+	$("#inputTemplateName").keyup(function(e){
+		
+		var contents = $('#inputTemplateName').val();
+		var conLeng = strMaxCharacterCnt(contents);
+		
+		if(conLeng > 100){
+			
+			alert("템플릿명은 100자를 넘을 수 없습니다.");
+			var splicecon = strMaxLengthSubstring(contents, 99);
+			 $('#inputTemplateName').val(splicecon);
+			return false;
+			
+		}
+		
+	});
+	
+	//템플릿 내용 입력 글자수 체크 해주기
+	$("#inputTemplateContent").keyup(function(e){
+		
+		var contents = $('#inputTemplateContent').val();
+		setContentsLeng(contents);
+		
+	});
+	
+	
+	//강조표기 타이틀 입력시 우측 미리보기 화면에 표시해주기
+	$("#inputTemplateTitle").keyup(function(e){
+		
+		var title = $('#inputTemplateTitle').val();
+		$('.emphasis_title_text').show();
+		$('.emphasis_title_text').text(title);
+		
+	});
+	
+	//강조표기 타이틀 입력시 우측 미리보기 화면에 표시해주기
+	$("#inputTemplateSubTitle").keyup(function(e){
+		
+		var subTitle = $('#inputTemplateSubTitle').val();
+		$('.emphasis_side_text').show();
+		$('.emphasis_side_text').text(subTitle);
+		
+	});
+	
+	//부가정보 내용 입력시 우측 미리보기 화면에 표시해주기
+	$("#inputTemplateExtra").keyup(function(e){
+		
+		var extraCon = $('#inputTemplateExtra').val();
+		$('.side_info_text').show();
+		$('.side_info_text').text(extraCon);
+		
+	});
+	
+	//채널추가형 내용 입력시 우측 미리보기 화면에 표시해주기
+	$("#inputTemplateAd").keyup(function(e){
+		
+		var contentsAd = $('#inputTemplateAd').val();
+		$('.channel_info_text').show();
+		$('.channel_info_text').text(contentsAd);
+		
+	});
+	
+	//메세지 유형이 채널추가인경우 미리보기에 채널 추가 버튼 표시해주기
+	var msgTypeVal = $('#selectTemplateType option:selected').val();
+	if(msgTypeVal == 'AD'){
+		
+		$(".btnAd").css("display", "block");
+		
+	}else if(msgTypeVal == 'MI'){//복합형인경우 부가정보 및 채널추가 버튼 모두 표시
+		
+		$(".side_info_text").css("display", "block");
+		$(".btnAd").css("display", "block");
+		
+	}
+	
+});
+
+//화면 초기 로딩시 셀렉트 박스 등 처리 해주기
+function initFormChk(){
+	
+	//첫로딩시 우측 미리보기 화면 숨김처리
+	$('.emphasis_title_text').hide();	//강조유형 타이틀
+	$('.emphasis_side_text').hide();	//강조유형 보조문구
+	//$('.template_text').hide();			//내용 미리보기
+	$('.side_info_text').hide();		//부가정보 내용
+	$('.channel_info_text').hide();		//채널추가 텍스트 내용
+	$('.btnAd').hide();					//샘플 채널추가 버튼
+	$('.btnEmpty').hide();				//샘플 버튼
+	
+	//채널ID 정보 미리보기에 표시해주기
+	fnAgentCodeChg();
+	
+	//템플릿 등록 이미지가 있는 경우 이미지 정보 표시해 주기
+	var imgType = $("input[name=img_file_add]:checked").val();
+	
+	if(!imgType == ''){
+		
+		if($("input[name='img_file_add']:checked").attr("id")=="img_file_1"){
+			$(".basic_img_add_wrap").show().siblings(".img_add_info_wrap").hide();
+			$(".img_file_add_wrap").show();
+		}else if($("input[name='img_file_add']:checked").attr("id")=="img_file_2"){
+			$(".wide_img_add_wrap").show().siblings(".img_add_info_wrap").hide();
+			$(".img_file_add_wrap").show();
+		} else{
+			$(".img_add_info_wrap, .img_file_add_wrap").hide();
+		}
+		
+	}
+	var imageFileName = '${resultTemplateVO.imageFileName}';
+	$("#imgNm").text(imageFileName);
+	
+	//미리보기에 이미지 표시해주기
+	var imgUrl = '${resultTemplateVO.templateImageUrl}';
+	$('.kakao_image').css("display", "block");
+	$("#kakaoImg").attr("src", imgUrl);
+	
+	
+	//초기 템플릿 내용 글자수 처리해주기
+	var tmpContents = $('#inputTemplateContent').val();
+	setContentsLengForFriends(tmpContents);
+	
+	//초기 광고포함 여부 처리
+	var adFlagVal = $("input[name=ad_flag]:checked").val();
+	advTextChange(adFlagVal);
+	
+}
+
+// 카테고리 선택 조회
+function templateCatagoryChange(depth, code, type){
+	var categoryDepth = depth;
+	var categoryCode = code;
+	
+	$.ajax({
+		type: "POST"
+		, url: "/web/mjon/test/selectKakaoTemplateCategoryAjax.do"
+		, data:{ "categoryDepth":categoryDepth, "categoryCode" : categoryCode}
+		, dataType:'json'
+		, cache: false
+		, async: false
+		, timeout: 600000
+		, success: function (returnData, status) {
+			if(status == 'success'){
+				if(categoryDepth == '2'){
+					
+					if(type == "insert"){
+						var list = returnData.selectCatagoryList;
+						$("#selectTemplateSecondCatagory").append("<option value=''>카테고리 선택</option>");
+						for(var i=0; i < list.length; i++){
+							$("#selectTemplateSecondCatagory").append("<option value='"+list[i].categoryCode+"'>"+list[i].categoryGroupName+"</option>");
+						}
+					}else if(type == "select"){
+						var list = returnData.selectCatagoryList;
+						$("#selectTemplateSecondCatagory_select").append("<option value=''>카테고리 선택</option>");
+						for(var i=0; i < list.length; i++){
+							$("#selectTemplateSecondCatagory_select").append("<option value='"+list[i].categoryCode+"'>"+list[i].categoryGroupName+"</option>");
+						}
+					}
+				}
+			} else if(status== 'fail'){
+				alert("저장에 실패하였습니다. !!");
+			}
+		}
+		,error: function (e) {
+			console.log("ERROR : ", e);
+			alert("삭제처리에 실패하였습니다.");
+		}
+	});
+	
+	
+}
+
+//--------------첨부파일 처리 함수 시작--------------------------
+
+/* 파일사이즈 가져오기 */
+function getStrFileSize(filesize){
+	var sizeStr="";
+	var sizeKB = filesize/1024;
+	if(parseInt(sizeKB) > 1024){
+	    var sizeMB = sizeKB/1024;
+	    sizeStr = sizeMB.toFixed(2)+" MB";
+	}else{
+	    sizeStr = sizeKB.toFixed(2)+" KB";
+	}
+	return sizeStr;
+}
+
+//첨부 이미지 정보 확인 처리 해주기(이미지 리사이징 전단계)
+function imgResizeInfo(event){
+	
+	var fileValue = $("#imgFile").val().split("\\");
+	var fileName = fileValue[fileValue.length-1];
+	
+	var fileExt = fileName.split('.').pop().toLowerCase();
+
+	if(fileExt.length > 0){
+		if($.inArray(fileExt, ['jpg','jpeg','png']) == -1) {
+			alert('jpg, jpeg, png 파일만 업로드 할수 있습니다.');
+			return false;
+	   	}
+	   
+		$("#imgNm").val(fileName); 
+	}
+	
+	//알림톡 이미지 등록 요청하기
+	getTemplateImagUrl();
+}
+
+function getTemplateImagUrl(){
+	
+	var bizForm = document.bizForm;
+	var data = new FormData(bizForm);
+	var atchFileSts = true;	//첨부파일 갯수 상태 값
+	
+	data.append("file0", $('#imgFile').prop('files')[0]);
+	
+	var fileValue = $("#imgFile").val().split("\\");
+	var fileName = fileValue[fileValue.length-1];
+	
+	var fileExt = fileName.split('.').pop().toLowerCase();
+	
+	if($.inArray(fileExt, ['jpg','jpeg', 'png']) == -1) {
+
+		alert('jpg, jpeg 파일만 업로드 할수 있습니다.');
+		return false;
+
+   	}
+	
+	var url = "";
+	
+	if(fileExt == "jpg" || fileExt == "jpeg" || fileExt == "png"){
+		
+		url = "/web/mjon/kakao/template/sendKakaoTemplateImageUploadAjax.do";
+		
+	}else{
+		
+		alert('jpg, jpeg 파일만 업로드 할수 있습니다.');
+		return;
+		
+	}
+	
+	$.ajax({
+		type : 'POST'
+		, enctype : 'multipart/form-data'
+		, url : url
+		, data : data
+		, dataType:'json'
+		, async:false
+		, processData: false
+		, contentType: false
+		, cache : false
+		, success : function(returnData, status){
+			if(returnData.result == "success") {
+				
+				var code = returnData.code;
+				var msg = returnData.msg;
+				var imgUrl = returnData.imgUrl;
+				
+				if(code == "200"){//등록 성공시 메시지 및 이미지 표시 처리
+					alert("이미지 등록이 완료 되었습니다.");
+					$("#templateImageName").val(fileName);
+					$("#templateImageUrl").val(imgUrl);
+				
+					$('.kakao_image').css("display", "block");
+					$("#kakaoImg").attr("src", imgUrl);
+					
+				}else if(code == "2002"){//일반 이미지 가로 세로 크기 오류 발생
+					
+					alert("권장 이미지 사이즈는  가로 800px 세로 400px(가로:세로 비율이 2:1 아닐 경우, 가로 500px, 세로 250px 이하일 경우 업로드 불가)입니다.");
+					$("#imgNm").val("");
+					return false;
+					
+				}else{//기타 실패
+					
+					alert(msg);
+					$("#imgNm").val("");
+					return false;
+				}
+				
+			}else if(returnData.result == "loginFail"){
+				location.href="/web/user/login/login.do";
+			}else{
+				alert("이미지 등록 중 오류가 발생하였습니다.!!!");
+				return false;
+			}
+		}
+		,error : function(request , status, error){
+			alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
+		}
+	});
+	
+	//첨부파일 이름 및 데이터 지워주기 - 완료 후 팝업이 자동으로 닫힘.
+	$("#imgFile").val("");
+    //$("#imgNm").val(""); 
+	
+}
+
+//파일첨부 버튼 클릭시 파일 첨부 실행
+function upImgClick(){
+	
+	$("#imgFile").click();
+	
+}
+
+
+//발신 템플릿 등록
+function updateTemplate(){
+	
+	var selectAgentCode = $("select[name='selectAgentCode']").val();	// 선택 채널ID
+	var inputTemplateName = $("#inputTemplateName").val();				// 입력 템플릿 이름
+	
+	var selectTemplateType = $("select[name='selectTemplateType']").val();			// 선택 템플릿 메시지 유형
+	var inputTemplateContent = $("#inputTemplateContent").val();	// 템플릿 내용
+	var inputTemplateExtra = $("#inputTemplateExtra").val();		// 부가정보 내용
+	var inputTemplateAd = $("#inputTemplateAd").val();				// 광고성메시지
+	
+	var selectTemplateEmphasizeType = $("select[name='selectTemplateEmphasizeType']").val();	// 선택 템플릿 강조 유형
+	var inputTemplateImageName = $("#templateImageName").val();	// 템플릿 이미지 파일명
+	var inputTemplateImageUrl = $("#templateImageUrl").val();		// 템플릿 이미지 링크
+	var inputTemplateTitle = $("#inputTemplateTitle").val();			// 템플릿 타이틀
+	var inputTemplateSubTitle = $("#inputTemplateSubTitle").val();		// 템플릿 서브 타이틀
+	
+	var selectTemplateSecondCatagory = $("select[name='selectTemplateSecondCatagory']").val();	// 선택 템플릿 카테고리
+	
+	// 공통 유효성 검사 조회
+	if(selectAgentCode == null || selectAgentCode == ""){
+		alert("채널ID를 선택해 주세요");
+		return;
+	};
+	
+	if(inputTemplateName == null || inputTemplateName == ""){
+		alert("템플릿 이름을 입력해 주세요");
+		$("#inputTemplateName").focus();
+		return;
+	};
+	
+	if(selectTemplateSecondCatagory == null || selectTemplateSecondCatagory == ""){
+		alert("템플릿 카테고리를 선택해 주세요");
+		return;
+	};
+	
+	if(inputTemplateContent == null || inputTemplateContent == ""){
+		alert("템플릿 내용을 입력해 주세요.");
+		return;
+	};
+	
+	
+	
+	// 메시지 유형 선택여부에 따른 필수값 체크
+	if(selectTemplateType == "EX"){
+		if(inputTemplateExtra == null || inputTemplateExtra == ""){
+			alert("템플릿 내용을 입력해 주세요");
+			$("#inputTemplateExtra").focus();
+			return;
+		};
+	}else if(selectTemplateType == "AD"){
+		if(inputTemplateAd == null || inputTemplateAd == ""){
+			alert("광고성 메시지 내용을 입력해 주세요");
+			$("#inputTemplateAd").focus();
+			return;
+		};
+	}
+	
+	// 템플릿 강조유형에 따른 필수값 체크
+	if(selectTemplateEmphasizeType == "TEXT"){
+		if(inputTemplateTitle == null || inputTemplateTitle == ""){
+			alert("템플릿 타이틀을 입력해 주세요");
+			$("#inputTemplateTitle").focus();
+			return;
+		}else{
+			
+			var returnMatch = inputTemplateContent.match(inputTemplateTitle);
+			if(returnMatch == null){
+				
+				alert("강조표기타이틀은 템플릿 본문에 있는 내용/변수만 입력 가능합니다.");
+				return false;
+			}
+			
+		};
+		if(inputTemplateSubTitle == null || inputTemplateSubTitle == ""){
+			alert("템플릿 서브타이틀을 입력해 주세요");
+			$("#inputTemplateSubTitle").focus();
+			return;
+		}else{
+			
+			var returnMatch = inputTemplateContent.match(inputTemplateSubTitle);
+			
+			if(returnMatch == null){
+				
+				alert("강조표기보조문구는 템플릿 본문에 있는 내용만 입력 가능합니다.");
+				return false;
+			}
+			
+			//보조문구에 변수를 입력했는지 체크
+			var varValue = inputTemplateSubTitle.match(/#\{([^}]+)\}/g);
+			
+			if(varValue != null){
+				
+				alert("강조 표기 보조 문구에 변수를 입력할 수 없습니다.");
+				return false;
+				
+			}
+			
+		};
+	}else if(selectTemplateEmphasizeType == "IMAGE"){
+		if(inputTemplateImageName == null || inputTemplateImageName == ""){
+			alert("템플릿 이미지 파일명을 입력해 주세요");
+			$("#inputTemplateImageName").focus();
+			return;
+		};
+		if(inputTemplateImageUrl == null || inputTemplateImageUrl == ""){
+			alert("탬플릿 이미지 링크를 입력해주세요");
+			$("#inputTemplateImageUrl").focus();
+			return;
+		};
+	}else if(selectTemplateEmphasizeType == "ITEM_LIST"){
+		
+	}
+	
+	var bizForm = document.bizForm;
+	bizForm.senderKey.value = selectAgentCode;
+	bizForm.templateName.value = inputTemplateName;
+	bizForm.templateMessageType.value = selectTemplateType;
+	bizForm.templateEmphasizeType.value = selectTemplateEmphasizeType;
+	bizForm.templateContent.value = inputTemplateContent;
+	bizForm.categoryCode.value = selectTemplateSecondCatagory;
+	
+	// 메시지 유형 선택여부에 따른 필수값 체크
+	if(selectTemplateType == "EX"){
+		bizForm.templateExtra.value = inputTemplateExtra;
+	}else if(selectTemplateType == "AD"){
+		bizForm.tamplateAd.value = inputTemplateAd;
+	}
+	
+	// 템플릿 강조유형에 따른 필수값 체크
+	if(selectTemplateEmphasizeType == "TEXT"){
+		bizForm.templateTitle.value = inputTemplateTitle;
+		bizForm.templateSubtitle.value = inputTemplateSubTitle;
+	}else if(selectTemplateEmphasizeType == "IMAGE"){
+		bizForm.templateImageName.value = inputTemplateImageName;
+		bizForm.templateImageUrl.value = inputTemplateImageUrl;
+	}else if(selectTemplateEmphasizeType == "ITEM_LIST"){
+		
+	}
+	
+	
+	var data = new FormData(bizForm);
+	
+	if(confirm("템플릿을 수정하시겠습니까?")){
+		
+		$.ajax({
+			type: "POST"
+			, url: "/web/mjon/kakao/template/updateKakaoApiTemplateAjax.do"
+			, data: data
+			, dataType: 'json'
+			, async: false
+			, processData: false
+			, contentType: false
+			, cache: false
+			, success: function (returnData, status) {
+				
+				var result = returnData.result;
+				var code = returnData.code;
+				var msg = returnData.msg;
+				
+				if(result == "notLogin") {//차단 발신번호인 경우 등록 불가
+					alert("로그인후 진행이 가능합니다.");
+				}else if(returnData.result == "success") {
+					if(code == "200"){
+						alert("템플릿 수정이 완료되었습니다.");
+						location.href="/web/mjon/kakao/template/selectKaKaoTemplateList.do";
+					}else{
+						alert(msg);
+						return false;
+					}
+				}else{
+					
+					if(msg != 'msg'){
+						alert(msg);	
+						return false;
+					}else{
+						
+						alert("알림톡 템플릿 수정에 오류가 발생하였습니다.");
+						return false;
+						
+					}
+					
+					console.log();
+					return false;
+					
+				}
+			}
+			,error: function (e) {
+				console.log("ERROR : ", e);
+				alert("알림톡 템플릿 수정에 오류가 발생하였습니다.");
+			}
+		});
+		
+	}
+	
+}
+
+
+//알림톡 내용 초기화 해주기
+function fnContentsReset(){
+
+	$("#inputTemplateContent").val("");
+	$('.nowChar').text("0 /");
+	
+}
+
+//우측 미리보기 화면 채널 아이디 정보 변경해 주기
+function fnAgentCodeChg(){
+	
+	var yellowId = $("#selectAgentCode option:checked").text();
+	if(yellowId != ''){
+		
+		$('#spnYellowid').text(yellowId);	
+	}
+	
+}
+
+$(document).on('click', '.symbolButton, .changeWord', function (){
+	var templateContents = $('#inputTemplateContent').val();
+	$('#inputTemplateContent').val(templateContents + $(this).attr("value"));
+
+	setContentsLeng($('#inputTemplateContent').val());
+});
+
+</script>
+</head>
+<body>
+
+
+<form id="templateForm" name="templateForm" method="post">
+
+	<input type="hidden" id="inputSenderKey" name="senderKey" value=""/>
+	<input type="hidden" id="inputTemplateCode" name="templateCode" value=""/>
+
+</form>
+
+<div id="container" class="adminCont sub">
+<!-- content 영역 -->
+<div class="inner">
+    <!-- send top -->
+    <div class="send_top">
+        <!-- tab button -->
+        <%-- <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %> --%>
+        <!--// tab button -->
+        <!-- 카카오톡 설정 - 알림톡 템플릿 등록/관리 - 내템플릿 -->
+        <div class="top_content kakaotalkset_cont current pay_tab_wrap">
+            <div class="heading">
+                <h2>카카오 친구톡 템플릿 상세보기</h2>
+                <!-- <button type="button" class="button info"
+                    onclick="window.open('popup_kakaoset_template.html','_blank','width=790, height=300, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')">사용안내</button> -->
+            </div>
+            <div class="list_tab_wrap2 type2 ">
+                <!-- tab button -->
+                <%-- <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkSubMenuTap.jsp" %> --%>
+                <!--// tab button -->
+            </div>
+            
+            <form id="bizForm" name="bizForm" method="post">
+            	<input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf">
+				<input type="hidden" id="menuSubTab" name="menuSubTab" value="tabTemplate">
+            	<input type="hidden" id="templateCode" name="templateCode" value="<c:out value='${kakaoReturnVO.templateCode}'/>">
+				<input type="hidden" id="senderKey" name="senderKey" value="<c:out value='${senderKey}'/>">
+				<input type="hidden" id="templateName" name="templateName" value="">
+				<input type="hidden" id="templateMessageType" name="templateMessageType" value="">
+				<input type="hidden" id="templateEmphasizeType" name="templateEmphasizeType" value="">
+				<input type="hidden" id="templateContent" name="templateContent" value="">
+				<input type="hidden" id="categoryCode" name="categoryCode" value="">
+				
+				<input type="hidden" id="templateExtra" name="templateExtra" value="">
+				<input type="hidden" id="tamplateAd" name="tamplateAd" value="">
+				
+				<input type="hidden" id="templateTitle" name="templateTitle" value="">
+				<input type="hidden" id="templateSubtitle" name="templateSubtitle" value="">
+				<input type="hidden" id="templateImageName" name="templateImageName" value="<c:out value='${kakaoReturnVO.templateImageName}'/>">
+				<input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${kakaoReturnVO.templateImageUrl}'/>">
+			
+            
+	            <div class="send_general friend_talk_wrap kakao_wrap">
+	                <div class="send_left">
+	                    <!-- <p class="tType1_title">알림톡 템플릿 수정</p> -->
+	                    <table class="tType1">
+	                        <colgroup>
+	                            <col style="width: 190px;">
+	                            <col style="width: auto;">
+	                        </colgroup>
+	                        <tbody>
+	                            <tr>
+	                                <th>채널ID</th>
+	                                <td>
+	                                    <select class="select_gray_type" name="selectAgentCode" id="selectAgentCode" onchange="javascript:fnAgentCodeChg();">
+	                                        <option value="">채널ID 선택</option>
+	                                        <c:forEach var="kakaoProfileInfo" items="${kakaoProfileList}" varStatus="status">
+												<option value="${kakaoProfileInfo.senderKey}" <c:if test="${senderKey eq kakaoProfileInfo.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option>
+											</c:forEach>
+	                                    </select>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>템플릿명</th>
+	                                <td>
+	                                    <input type="text" class="template_name" id="inputTemplateName" name="inputTemplateName" value="<c:out value='${resultTemplateVO.templateName}'/>" placeholder="템플릿 명을 입력해주세요" maxlength="100">
+	                                    <p class="template_name_cf">최대 50자, 템플릿 관리용</p>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>이미지 첨부</th>
+	                                <td class="img_file_add_td">
+										<div class="img_sort_wrap">
+		                                    <input type="radio" name="img_file_add" id="img_file_0" value="" <c:if test="${resultTemplateVO.imageType eq ''}">checked</c:if> ><label for="img_file_0">첨부 안함</label>
+		                                    <input type="radio" name="img_file_add" id="img_file_1" value="I" <c:if test="${resultTemplateVO.imageType eq 'I'}">checked</c:if> ><label for="img_file_1">이미지 첨부</label>
+		                                    <input type="radio" name="img_file_add" id="img_file_2" value="W" <c:if test="${resultTemplateVO.imageType eq 'W'}">checked</c:if>><label for="img_file_2">와이드 이미지 첨부</label>
+		                                    <div class="img_add_info_wrap basic_img_add_wrap">
+		                                        <p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p>
+		                                        <ul class="info_text">
+		                                            <li>- 권장사이즈 : 720px * 720px</li>
+		                                            <li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li>
+		                                            <li>- 파일형식 : jpg, png (최대 500kb)</li>
+		                                            <li>- 이미지 첨부시 메시지 내용은 최대 400자까지 입력할 수 있습니다.</li>
+		                                        </ul>
+		                                    </div>
+		                                    <div class="img_add_info_wrap wide_img_add_wrap">
+		                                        <p class="info_title_text"><span class="c_e40000">*</span> 와이드 이미지 첨부 안내</p>
+		                                        <ul class="info_text">
+		                                            <li>- 권장사이즈 : 800px * 600px</li>
+		                                            <!-- <li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li> -->
+		                                            <li>- 파일형식 : jpg, png (최대 2mb)</li>
+		                                            <li>- 와이드 이미지 첨부시 메시지 내용은 최대 76자, 버튼 1개까지 입력할 수 있습니다.</li>
+		                                        </ul>
+		                                    </div>
+	                                    </div>
+	                                    <div class="img_file_add_wrap">
+	                                        <ul class="img_file_info_wrap">
+	                                            <li>
+	                                                <p>이미지 제목</p>
+	                                                <input type="text" id="imgTitle" name="imgTitle" value="<c:out value='${resultTemplateVO.imgTitle}'/>" class="img_url" maxLength="50">
+	                                            </li>
+	                                            <li>
+	                                                <p>이미지 클릭시 이동할 URL</p>
+	                                                <input type="text" id="imgLink" name="imgLink" value="<c:out value='${resultTemplateVO.imgLink}'/>" placeholder="http://" class="img_url" maxLength="1000">
+	                                            </li>
+	                                            <li>
+	                                                <p class="file_name"  id="imgNm" name="imgNm">첨부파일 이미지</p>
+	                                                <input type="file" id="imgFile"  accept=".jpg, .jpeg, .png" onchange="imgResizeInfo(event); return false;" style="display:none"/>
+	                                                <!-- <button type="button" class="btn_del btnImgDel" onclick="buttonTypeDel(this);">
+	                                                	<img src="/publish/images/btn_delete.png" id="imgDel" alt="이미지 삭제" onclick="fnImageDel();">
+	                                               	</button> -->
+	                                            </li>
+	                                        </ul>
+	                                        <!-- <button type="button" class="btnType btnType8 btn_img_upload" title="이미지 불러오기" onclick="javascript:upImgClick(); return false;">이미지 불러오기</button> -->
+                                        </div>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>광고포함 여부</th>
+	                                <td>
+	                                    <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label>
+	                                    <%-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N" <c:if test="${resultTemplateVO.adFlag eq 'N'}">checked</c:if> ><label for="ad_N">포함 안함</label> --%>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>내용</th>
+	                                <td class="kakao_template_text">
+	                                    <div class="put_left short">
+	                                        <!-- <input type="text" class="template_name"> -->
+	                                        <div class="put_text_wrap">
+	                                            <div class="ad_txt">
+	                                                <p><span id="adFlagFront">(광고)</span> <span id="yellowIdCon" >채널ID</span></p>
+	                                            </div>
+	                                            <label for="inputTemplateContent" class="label"></label>
+	                                            <textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."><c:out value="${resultTemplateVO.templateContent}"/></textarea>
+	                                            <div class="text_length">
+	                                                <div>
+	                                                    <p class="adFlagAfter">수신거부 : 홈 > 채널차단</p>
+	                                                </div>
+	                                                <div>
+	                                                    <p><span class="fwMd nowChar">0 /</span><span class="c_002c9a fwMd totChar">1000</span>자</p>
+	                                                </div>
+	                                            </div>
+	                                        </div>
+	                                    </div>
+	                                    <div class="put_right">
+	                                        <div class="btn_popup_wrap">
+	                                            <button type="button" class="btnType btnType7"
+	                                                onclick="miniPopup(this)">특수문자</button>
+	                                            <div class="send_miniPop spc_character">
+	                                                <div class="tab_character">
+	                                                    <a href="#none" class="on">특수문자</a>
+	                                                    <a href="#none">웃음</a>
+	                                                    <a href="#none">슬픔</a>
+	                                                    <a href="#none">분노</a>
+	                                                    <a href="#none">사랑</a>
+	                                                    <a href="#none">그외</a>
+	                                                </div>
+	                                                <!-- 특수문자 -->
+	                                                <div class="cnt_character on">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'D'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}"><c:out value="${symbolList.symbol}"/></a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //특수문자 -->
+	
+	                                                <!-- 웃음 -->
+	                                                <div class="cnt_character emt_character">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'S'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //웃음 -->
+	
+	                                                <!-- 슬픔 -->
+	                                                <div class="cnt_character emt_character">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'C'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //슬픔 -->
+	
+	                                                <!-- 분노 -->
+	                                                <div class="cnt_character emt_character">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'A'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //분노 -->
+	
+	                                                <!-- 사랑 -->
+	                                                <div class="cnt_character emt_character">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'L'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //사랑 -->
+	
+	                                                <!-- 그외 -->
+	                                                <div class="cnt_character emt_character emt_etc ">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'E'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //그외 -->
+	                                                <button type="button" class="btn_close"
+	                                                    onclick="miniPopup(this)">닫기</button>
+	                                            </div>
+	                                        </div>
+	                                        <div class="btn_popup_wrap convers_wrap">
+	                                            <button type="button" class="btnType btnType7"
+	                                                onclick="miniPopup(this)">특정문구 일괄변환<i
+	                                                    class="qmMark"></i></button>
+	                                            <div class="send_miniPop convers">
+	                                                <div>
+	                                                    <div class="convers_top">
+	                                                        <span>특정문구 일괄변환이란?</span>
+	                                                        <p>주소록, 엑셀에 입력된 내용을 이용해 수신자마다 다른 내용의 메시지를 발송하는 기능</p>
+	                                                    </div>
+	                                                    <div class="convers_middle">
+	                                                    	<a href="javascript:void(0)" class="changeWord" value="\#{이름}"><c:out value="\#{이름}"/></a>
+                                                    	</div>
+	                                                    <div class="convers_bottom">
+	                                                        <a href="javascript:void(0)" class="changeWord" value="\#{1}"><c:out value="\#{1}"/></a>
+	                                                        <a href="javascript:void(0)" class="changeWord" value="\#{2}"><c:out value="\#{2}"/></a>
+	                                                        <a href="javascript:void(0)" class="changeWord" value="\#{3}"><c:out value="\#{3}"/></a>
+	                                                        <a href="javascript:void(0)" class="changeWord" value="\#{4}"><c:out value="\#{4}"/></a>
+	                                                    </div>
+	                                                </div>
+	                                                <button type="button" class="btn_close"
+	                                                    onclick="miniPopup(this)">닫기</button>
+	                                            </div>
+	                                        </div>
+	                                        <div class="btn_popup_wrap spc_wrap">
+	                                            <button type="button" class="btnType btnType7"
+	                                                onclick="miniPopup(this)">이모티콘</button>
+	                                            <div class="send_miniPop spc_character kakao_emoticon">
+	                                                <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
+	                                                <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
+	                                            </div>
+	                                        </div>
+	                                        <div class="btn_popup_wrap template_call_wrap">
+	                                            <!-- <button type="button" class="btnType btnType8">템플릿 불러오기</button> -->
+	                                        </div>
+	                                        <div class="send_btnWrap">
+	                                            <!-- <button type="button" class="btnType btn_text_save">내용 저장하기</button> -->
+	                                            <!-- <button type="button" class="btnType btnType9" onclick="javascript:fnContentsReset();">초기화</button> -->
+	                                        </div>
+	                                    </div>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>버튼</th>
+	                                <td class="template_button">
+	                                    <%-- <select name="" id="" class="select_gray_type template_button_select">
+	                                        <option value="button_type_0">버튼타입 선택</option>
+	                                        <option value="button_type_1">배송조회</option>
+	                                        <option value="button_type_2">웹링크</option>
+	                                        <option value="button_type_3">앱링크</option>
+	                                        <option value="button_type_5">메시지전달</option>
+	                                        <option value="button_type_4">봇키워드</option>
+	                                        <option value="button_type_6">상담톡전환</option>
+	                                        <option value="button_type_7">챗봇전환</option>
+	                                    </select>
+	                                    <button type="button" class="btnType btnType6" onclick="friendTemplateButtonAdd();">추가</button> --%>
+	                                    <div class="button_add_wrap">
+	                                    	<c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
+	                                    		<c:if test="${buttonList.linkType eq 'DS'}">
+	                                    			<!-- 배송조회 버튼  -->
+			                                    	<dl class="button_type_wrap type1">
+				                                    	<dt>배송조회</dt>
+				                                    	<dd class="button_type_input">
+				                                    		<input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/>
+				                                    		<input type="text" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+				                                    		<p class="cf_text">*이용가능 택배사 : KG로지스, 우체국택배,일양로지스, GTX로지스, FedEx, 경동택배, 합동택배, 롯데택배</p>
+				                                    	</dd>
+				                                    	<dd>
+				                                    		<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+				                                    	</dd>
+			                                    	</dl>
+	                                    		</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'WL'}">
+			                                    	<!-- 웹링크 버튼 -->
+			                                    	<dl class="button_type_wrap type2">
+			                                    		<dt>웹링크</dt>
+			                                    		<dd class="button_type_input">
+			                                    			<ul>
+			                                    				<li>
+			                                    					<input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/>
+			                                    					<input type="text" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>" placeholder="모바일 링크 입력">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>" placeholder="PC 링크 입력">
+			                                    				</li>
+			                                    			</ul>
+			                                    		</dd>
+			                                    		<dd>
+			                                    			<!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> -->
+			                                    		</dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'AL'}">
+			                                    	<!-- 앱링크 버튼 -->
+			                                    	<dl class="button_type_wrap type3">
+			                                    		<dt>앱링크</dt>
+			                                    		<dd class="button_type_input">
+			                                    			<ul>
+			                                    				<li>
+			                                    					<input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/>
+			                                    					<input type="text" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>" placeholder="Android 링크 입력">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>" placeholder="IOS 링크 입력">
+			                                    				</li>
+			                                    			</ul>
+			                                    		</dd>
+			                                    		<dd>
+			                                    			<!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button> -->
+			                                    		</dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'BK'}">
+			                                    	<!-- 봇키워드 -->
+			                                    	<dl class="button_type_wrap type4">
+			                                    		<dt>봇키워드</dt>
+		                                    			<dd class="button_type_input">
+		                                    				<input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/>
+		                                    				<input type="text" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+		                                    			</dd>
+		                                    			<dd>
+			                                    			<!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+			                                    				<img src="/publish/images/btn_delete.png" alt="">
+			                                    			</button> -->
+		                                    			</dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'MD'}">
+			                                    	<!-- 메시지 전달 -->
+			                                    	<dl class="button_type_wrap type5">
+													   <dt>메시지전달</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" />
+													      <input type="text" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button> -->
+													   </dd>
+													</dl>
+												</c:if>	                                    	
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'BC'}">
+			                                    	<!-- 상담톡 전환 -->
+													<dl class="button_type_wrap type6">
+													   <dt>상담톡전환</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" />
+													      <input type="text" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button> -->
+													   </dd>
+													</dl>
+												</c:if>
+												
+												<c:if test="${buttonList.linkType eq 'BT'}">
+													<!-- 챗봇전환 -->
+													<dl class="button_type_wrap type7">
+													   <dt>챗봇전환</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" />
+													      <input type="text" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <!-- <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button> -->
+													   </dd>
+													</dl>
+												</c:if>
+											</c:forEach>
+	                                    </div>
+	                                </td>
+	                            </tr>
+	                        </tbody>
+	                    </table>
+	                </div>
+	                <div class="send_right">
+	                    <div class="phone">
+	                        <div class="phoneIn">
+	                            <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt="">
+	                            	<span id="spnYellowid">@채널ID</span>
+	                            </p>
+	                            <!-- 텍스트 미리보기 -->
+	                            <div class="text_preview">
+	                                <p class="friend_talk_title"><span class="adFlag">(광고)</span> <span id="spnYellowidAt">채널ID</span></p>
+	                                <div class="allimtalk_content">
+	                                    <div class="kakao_image"  style="display:none;">
+	                                    	<img src="" id="kakaoImg" alt="">
+	                                    </div>
+	                                    <p class="template_text">내용 미리보기</p>
+	                                    <div class="btnViewArea">
+	                                    	<c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
+	                                    		<button type="button" class="btn_kakao_type"  style="display:block;"><c:out value="${buttonList.name}"/></button>
+	                                    	</c:forEach>
+	                                	</div>
+	                                </div>
+	                                <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p>
+	                                
+	                            </div>
+	                            <!-- //텍스트 미리보기 -->
+	                        </div>
+	                        <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p>
+                            <div class="phone_bottom">
+                                <div class="send_btn">
+                                    <button type="button" class="btnType btnType11" onclick="self.close();">닫기</button>
+                                    <!-- <button type="button" class="btnType btnType10"onclick="location.href='/web/mjon/kakao/template/selectKakaoFriendsTemplateList.do';">취소</button> -->
+                                </div>
+                            </div>
+	                    </div>
+	                </div>
+	            </div>
+            </form>
+        </div>
+    </div>
+</div>
+<!--// send top -->
+</div>
+</body>
+</html>(No newline at end of file)
 
src/main/webapp/WEB-INF/jsp/uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateListPop.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/uss/ion/kakaoft/popup/KakaoFTChannelIDTemplateListPop.jsp
@@ -0,0 +1,190 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<% pageContext.setAttribute("newLineChar", "\r\n"); %>
+<% pageContext.setAttribute("newLineChar2", "\n"); %>
+
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+<title>친구톡 템플릿 목록</title>
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+        <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&amp;display=swap"
+        rel="stylesheet">
+    <link rel="stylesheet" href="/publish/css/reset.css">
+    <link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css">
+    <link rel="stylesheet" href="/publish/css/common.css">
+    <link rel="stylesheet" href="/publish/css/button.css">
+    <link rel="stylesheet" href="/publish/css/content.css?date=202301160001">
+    <link rel="stylesheet" href="/publish/css/mem.css">
+    <link rel="stylesheet" href="/publish/css/font.css">
+    <link rel="stylesheet" href="/publish/css/popupLayer.css">
+
+    <script src="/publish/js/jquery-3.5.0.js"></script>
+    <script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
+    <script src="/publish/js/common.js"></script>
+    <script src="/publish/js/content.js?date=202211070003"></script>
+    <script src="/publish/js/popupLayer.js"></script>
+
+<script>
+
+function linkPage(page){
+	
+	form = document.listForm;
+	
+	form.pageIndex.value=page;
+	form.action="<c:url value='/uss/ion/kakaoft/KakaoFTChannelIDTemplateListPopupAjax.do'/>";
+	form.submit();
+	
+}
+
+function fnSearch(){
+	
+	var templateStatus = $("select[name=selectTemplateStatus]").val();
+	var searchKeyword = $("input[name=inputSearchKeyword]").val();
+
+	if(searchKeyword != ''){
+		
+		if(searchKeyword.length < 2 || searchKeyword.length > 50){
+			
+			alert("검색어는  최소 2자 이상 50자 이내로 입력해야 합니다.");
+			return false;
+			
+		}
+		
+	}
+	
+	var form = document.listForm;
+	
+	form.searchKeyword.value = searchKeyword;
+	form.templateStatus.value = templateStatus;
+	
+	linkPage(1);
+	
+}
+
+function fnTemplateDetail(friendId){
+	
+	var form = document.templateForm;
+	
+	form.templateCode.value = friendId;
+    
+    window.open("about:blank", 'popupTemplateDetail', 'width=1240, height=1080, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbar=no');
+    form.action = "<c:url value='/uss/ion/kakaoft/KakaoFTChannelIDTemplateDetailPopupAjax.do'/>";
+    form.target = "popupTemplateDetail";
+    form.submit();
+
+}
+
+</script>
+
+</head>
+<body>
+<div class="loading_layer">
+	<div class="loading_container">
+		<div class="bar"></div>
+		<div class="text">Loading</div>
+	</div>
+</div>
+<div class="top_content kakaotalkset_cont current pay_tab_wrap">
+			<form id="templateForm" name="templateForm" method="post">
+				<input type="hidden" name="SenderKey" value="<c:out value="${kakaoVO.senderKey }"/>">				
+				<input type="hidden" id="templateCode" name="templateCode" value="">
+				<input type="hidden" id="tmpUserId" name="userId" value="<c:out value="${kakaoVO.userId}"/>">
+			</form>
+			<form id="listForm" name="listForm" method="post">
+				<input type="hidden" name="SenderKey" value="<c:out value="${kakaoVO.senderKey }"/>">
+				<input type="hidden" name="yellowId" value="<c:out value="${kakaoVO.yellowId }"/>">
+				<input type="hidden" id="page" name="page" value="">
+				<input type="hidden" id="pageIndex" name="pageIndex" value="">
+				<input type="hidden" id="searchKeyword" name="searchKeyword" value="">
+				<input type="hidden" id="templateStatus" name="templateStatus" value="">
+				<input type="hidden" id="templateCode" name="templateCode" value="">
+				<input type="hidden" id="listUserId" name="userId" value="<c:out value="${kakaoVO.userId}"/>">
+			</form>
+		    <div class="info_popup ad_layer template_choice_popup adpopup01" style="width:930px; margin-left:45px;">
+			    <div class="top_content kakaotalkset_cont current pay_tab_wrap" style="width:930px;">
+			        <div class="popup_heading">
+			            <p>친구톡 템플릿 선택</p>
+			        </div>
+					<div class="layer_in">
+			            <div class="popup_search_wrap type2 grayborder grayfill">
+			                <input type="text" name="inputSearchKeyword" id="inputSearchKeyword" placeholder="템플릿명을 입력해주세요." class="inputType template_name" value="<c:out value='${kakaoVO.keyword}'/>">
+			                <button type="button" class="popup_button_type bluefill" onclick="fnSearch(); return false;">검색</button>
+			            </div>
+						<div class="template_list">
+			            <ul class="kakao_template_list thumbnail_list">
+			            	<c:choose>
+			            		<c:when test="${not empty kakaoTemplateInfoList}">
+			            			<c:forEach var="templatInfoList" items="${kakaoTemplateInfoList}" varStatus="status">
+						                <li>
+						                    <div class="kakao_template_wrap">
+						                        <div class="template_cont">
+						                            <div class="title">
+						                                <div class="check">
+						                                </div>
+						                                <p title="친구톡 템플릿 내용" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;">
+								                           	<c:if test="${templatInfoList.adFlag eq 'Y'}">(광고)</c:if>
+								                           	<c:out value="${fn:replace(templatInfoList.yellowId, '@', '')}"/>
+							                           	</p>
+						                            </div>
+						                            <div class="allimtalk_content" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;">
+						                            	<!-- 템플릿에 이미지가 있는경우 이미지 표시 -->
+							                        	<c:if test="${not empty templatInfoList.imageType}">
+							                        		<div class="img_box">
+								                                <img src="<c:url value='${templatInfoList.templateImageUrl}'/>" alt="">
+								                            </div>
+							                        	</c:if>
+							                        
+							                            <p class="template_text"><c:out value="${fn:replace(fn:replace(templatInfoList.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/></p>
+							                            <!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
+							                            <c:forEach var="templatInfoButtonList" items="${templatInfoList.buttonVOList}" varStatus="status">
+							                            	<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
+							                            </c:forEach>
+						                            </div>
+						                        </div>
+						                        <c:if test="${templatInfoList.adFlag eq 'Y'}">
+							                    	<p class="cf_text">수신거부 | 홈 > 채널차단</p>
+							                    </c:if>
+						                    </div>
+						                    <div class="kakao_template_info">
+						                        <dl>
+						                            <dt>템플릿명</dt>
+						                            <dd>
+							                            <c:out value="${templatInfoList.templateName}"/>
+							                        </dd>
+						                        </dl>
+							                    <dl>
+							                        <dt>등록일</dt>
+							                        <dd><c:out value="${templatInfoList.frstRegistPnttm}"/>
+							                            <%-- <div class="btn_wrap">
+							                                <button type="button" class="btn_template_edit" title="템플릿 수정"  onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;"><img src="/publish/images/content/btn_template_edit.png" alt=""></button>
+							                                <button type="button" class="btn_template_delete" title="템플릿 삭제"  onclick="javascript:fnTemplateDelBtn('<c:out value="${templatInfoList.friendId}"/>'); return false;"><img src="/publish/images/content/btn_template_delete.png" alt=""></button>
+							                            </div> --%>
+							                        </dd>
+							                    </dl>
+						                    </div>
+						                </li>
+					                </c:forEach>
+			            		</c:when>
+			            		<c:otherwise>
+			            			<li class="template_none">등록된 템플릿이 없습니다.</li>
+			            		</c:otherwise>
+			            	</c:choose>
+			            </ul>
+						</div>
+					<!-- pagination -->
+						<c:if test="${not empty kakaoTemplateInfoList}">
+						    <ul class="pagination">
+								<ui:pagination paginationInfo = "${paginationInfo}"  type="imageWeb" jsFunction="linkPage" />
+							</ul><!-- //pageWrap -->
+						</c:if>
+					</div>
+				</div>
+			</div>
+	</div>
+</body>
+</html>(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkSubMenuTap.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkSubMenuTap.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkSubMenuTap.jsp
@@ -1,4 +1,6 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
 
 <script type="text/javascript">
 
@@ -88,5 +90,8 @@
     	<li id="tabStep" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabStep');">사용안내</button></li>
         <li id="tabProfile" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabProfile');">채널ID 등록/관리</button></li>
         <li id="tabTemplate" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabTemplate');">알림톡 템플릿 등록/관리</button></li>
-<!--         <li id="tabSubFt" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabSubFt');">친구톡 템플릿 등록/관리</button></li> -->
+        <c:if test="${loginVO.id eq 'rosewiper'}">
+	        <li id="tabSubFt" class="tab subTab"><button type="button" onclick="javascript:fnLinkPageTab('tabSubFt');">친구톡 템플릿 등록/관리</button></li>
+        </c:if>
+        
     </ul>
(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp
@@ -1,4 +1,6 @@
 <%@ page language="java" contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
 
 <script type="text/javascript">
 
@@ -27,6 +29,11 @@
 	}else if(menuTopTab == 'tabAlim'){
 		$(".topTab").removeClass("active");
 		$("#tabAt").addClass("active");
+		
+	}else if(menuTopTab == 'tabFriend'){
+		$(".topTab").removeClass("active");
+		$("#tabFt").addClass("active");
+	
 	}else if(menuTopTab == 'tabIntro'){
 		$(".topTab").removeClass("active");
 		$("#tabIntro").addClass("active");
@@ -51,16 +58,18 @@
 		
 	}else if(tabInfo == 'tabFriend'){
 		
-		alert("친구톡 메뉴는 현재 개발이 진행 중입니다.");
-		return false
+		url = "<c:url value='/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do'/>";
+		
 	}else if(tabInfo == 'tabAlimtalkIntrd'){
 		
 		url = "<c:url value='/web/mjon/kakao/alimtalk/kakaoAlimtalkIntrdView.do'/>";
 		
 	}
 	
-	form.action =url;
-	form.submit();
+	//form.action =url;
+	//form.submit();
+	//메뉴 선택시 폼 데이터로 인한 오류 발생하여 location으로 변경 - 20240117 우영두
+	location.href=url;
 	
 }
 
@@ -133,6 +142,11 @@
 
 	<ul class="tabType4">
         <li id="tabAt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlim');">알림톡</button></li>
+        <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') 
+        || fn:contains(pageContext.request.requestURL , '192.168.0.33')
+        || fn:contains(pageContext.request.requestURL , '119.193.215.98')}">
+	        <li id="tabFt" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabFriend');">친구톡</button></li>
+        </c:if>
         <li id="tabConf" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabConf');">카카오톡 설정</button></li>
         <li id="tabIntro" class="tab topTab"><button type="button" onclick="javascript:fnLinkPageTopTab('tabAlimtalkIntrd');">알림톡 소개</button></li>
     </ul>
(No newline at end of file)
 
src/main/webapp/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp
@@ -0,0 +1,122 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" %>
+
+<div class="cnt_character">
+	<div class="box_character">
+		<a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
+		<a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
+	</div>
+</div>(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataTestPop.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataTestPop.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataTestPop.jsp
@@ -135,7 +135,7 @@
 				<!-- 텍스트 미리보기 -->
 				<div class="text_preview">
 					<div class="allimtalk_title">
-						<img src="/publish/images/content/icon_allimtalk.png" alt="">친구톡 수정
+						<img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착
 					</div>
 					<div class="allimtalk_content" id="alimtalkTemplate">
 <!-- 						<p class="emphasis_side_text">템플릿을 선택해 주세요</p> -->
@@ -196,10 +196,10 @@
 				<!-- 텍스트 미리보기 -->
 				
 				<!-- //텍스트 미리보기 -->
-				<div class="template_info_wrap">
+				<!-- <div class="template_info_wrap">
 					<div class="template_byte">
 					</div>
-				</div>
+				</div> -->
 			</div>
 			<p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p>
 		</div>
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView.jsp
@@ -1188,11 +1188,11 @@
 		<!-- 문자발송 성공 레이어팝업 -->
 		<div class="popup-com pop_msg_success">
 			<div class="popup_heading">
-				<p>알람톡 전송 결과</p>
+				<p>알림톡 전송 결과</p>
 				<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
 			</div>
 			<div class="layer_in">
-				<div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div>
+				<div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>알림톡이 발송 되었습니다.</div>
 			</div>
 			<div class="popup_btn">
 				<button type="button" onclick="msgResultLink(); return false;">알림톡 발송결과 바로가기</button>
@@ -1249,7 +1249,7 @@
 									<tr>
 										<th>채널ID</th>
 										<td>
-											<label for="" class="채널ID 선택"></label>
+											<label for="selectKakaoProfileList" class="채널ID 선택"></label>
 											<select class="select_gray_type" id="selectKakaoProfileList" name="selectKakaoProfileList">
 												<option value="">채널ID 선택</option>
 												<c:forEach var="kakaoProfileInfo" items="${kakaoProfileList}" varStatus="status">
@@ -1285,7 +1285,7 @@
 										<td class="putText">
 											<div class="clearfix receipt_num receiver_wrap01">
 												<div class="receipt_num_top">
-													<label for="" class="label">받는 번호입력</label>
+													<label for="callTo" class="label">받는 번호입력</label>
 													<input type="text" id="callTo" name="callTo" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');"  placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;">
 													<button type="button" class="btnType btnType6 addCallToF">번호추가</button>
 													</br>
@@ -1301,7 +1301,7 @@
 													<div class="listType list01" >
 														<div class="list_table list_head">
 															<div class="cb_wrap">
-																<label for="" class="label"></label>
+																<label for="select_all" class="label"></label>
 																<input type="checkbox" id="select_all">
 															</div>
 															<div class="list_table_num">
@@ -1416,7 +1416,7 @@
 														<tr>
 															<th>발신번호</th>
 															<td class="put_num">
-																<label for="callFrom" class="label"></label>
+																<label for="callFromList" class="label"></label>
 																<select id="callFromList" name="callFromList" class="sel_number">
 																	<c:choose>
 																		<c:when test="${not empty resultPhonList}">
@@ -1522,7 +1522,7 @@
 											<div class="calendar_wrap">
 												<input type="text" class="startDate2 inp resDate calendar picker__input picker__input--active" title="검색 시작일" id="startDate2" name="startDate2" value="" data-datecontrol="true" readonly="" aria-haspopup="true" aria-expanded="true" aria-readonly="false" aria-owns="startDate2_root">
 											</div>
-											<label for="" class="label">시 선택</label>
+											<label for="msgResHour" class="label">시 선택</label>
 											<div class="selBox">
 												<select class="selType1" id="msgResHour" name="msgResHour">
 													<c:forEach  var="hour"  begin="0" end="23" step="1" varStatus="status">
@@ -1536,7 +1536,7 @@
 														</c:choose>
 													</c:forEach>
 												</select>
-												<label for="" class="label">분 선택</label>
+												<label for="msgResMin" class="label">분 선택</label>
 												<select class="selType1" id="msgResMin" name="msgResMin">
 													<c:forEach var="min" begin="0" end="55" step="5">
 														<c:choose>
@@ -1553,9 +1553,9 @@
 										</div>
 										<div class="rev_bottom">
 											<input type="checkbox" id="inputDivideChk" name="inputDivideChk">
-											<label for="">분할전송</label>
+											<label for="inputDivideChk">분할전송</label>
 											<input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/>
-     		            					<label for="divideCnt">건씩</label>
+     		            					<label for="frmDivideCnt">건씩</label>
 											<select class="selType1" id="divideTime" name="divideTime">
 						 						<option value="5">05분</option>
 						 						<option value="10">10분</option>
@@ -1596,7 +1596,7 @@
 					<input type="hidden" name="searchCondition" id="searchCondition" value="0" />
 					<div class="adr_pop_left">
 						<div class="adr_left_search">
-							<label for="searchKeyword" class="label">그룹명 검색</label>
+							<label for="searchGrpKeyword" class="label">그룹명 검색</label>
 							<input type="text" name="searchGrpKeyword" id="searchGrpKeyword"  placeholder="그룹명 검색" onfocus="this.placeholder=''" onblur="this.placeholder='그룹명 검색'" class="inputLight">
 							<button type="button" onClick="javascrit:fnAddrGrpSearch(); return false;"><img src="/publish/images/popup/search.png" alt="검색"></button>
 						</div>
@@ -1737,7 +1737,7 @@
 						<button type="button" class="excel_btn" onclick="location.href='/download/msg/알림톡_엑셀주소록_등록양식.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button>
 					</div>
 					<div class="attachedFile">
-						<label for="" class="attachedFile_label">첨부파일</label>
+						<label for="excelNm01" class="attachedFile_label">첨부파일</label>
 						<input type="text" id="excelNm01" value="" readonly>
 						<input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExportAjax(event); return false;" style="display:none"/>
 						<!-- <input type="file" id="excelFile01" accept=".xls, .xlsx" onchange="excelExport01(event); return false;" style="display:none"/> -->
 
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataTestPop.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataTestPop.jsp
@@ -0,0 +1,221 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
+<%@ taglib prefix="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"%>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+<% pageContext.setAttribute("newLineChar", "\r\n"); %>
+<% pageContext.setAttribute("newLineChar2", "\n"); %>
+
+<script>
+
+	function fn_testSendMsgData(){
+		
+		var callNum = $("#callTo").val();				// 받는 전화번호
+		var userMoney = $('#oriUserMoney').val();		// 사용자 금액
+		var kakaoFtPrice = $('#kakaoFtPrice').val();	// 카카오전송 금액
+		var resutlPrice = parseFloat(userMoney)-parseFloat(kakaoFtPrice); // 금액 확인
+		
+		// 음수면 -1 값
+		if(Math.sign(resutlPrice) < 0){
+			alert("발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
+			return false;
+		}
+		
+		$('#bizForm #callToList').val(callNum);
+		
+		var data = new FormData(document.bizForm);
+		$.ajax({
+			type: "POST"
+			, url: "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"
+			, data: data
+			, dataType: 'json'
+			, async: true
+			, processData: false
+			, contentType: false
+			, cache: false
+			, success: function (returnData, status) {
+				if(status == 'success'){
+					if("loginFail" == returnData.result){
+						
+						alert(returnData.message);
+						return false;
+						
+					}else  if('fail' == returnData.result){
+						
+						alert(returnData.message);
+						return false;
+						
+					} else if(status == 'success'){
+						alert("테스트 친구톡 전송이 완료 되었습니다.")
+						window.close();
+					}
+				}
+			}
+			,beforeSend : function(xmlHttpRequest) {
+				//로딩창 show
+				$('.loading_layer').addClass('active');
+			}
+			,complete : function(xhr, textStatus) {
+				//로딩창 hide
+				$('.loading_layer').removeClass('active');
+			}
+			,error: function (e) {
+				console.log("ERROR : ", e);
+				alert("카카오 친구톡 전송에 실패하였습니다.");
+			}
+		});
+	}
+</script>
+
+
+<form id="bizForm" name="bizForm" method="post">
+	<input type="hidden" id="senderKey" name="senderKey" value="<c:out value='${kakaoVO.senderKey}'/>">									<!-- 카카오 보내는 사람 Key -->
+	<input type="hidden" id="templateContent" name="templateContent" value="<c:out value='${kakaoVO.templateContent }'/>">		<!-- 카카오 전송 templat내용 -->
+	<input type="hidden" id="callToList" name="callToList" value="">									<!-- 카카오 전송 전화번호 -->
+	<input type="hidden" id="txtReplYn" name="txtReplYn" value="N">					<!-- 치환문자 여부 - -->
+	
+	
+	<input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N">								<!-- 대체문자 전송여부 -->
+	<input type="hidden" id="reserveYn" name="reserveYn" value="N">										<!-- 예약문자 여부 -->
+	<input type="hidden" id="divideChk" name="divideChk" value="N">										<!--분할발성 체크 여부-->
+	<input type="hidden" id="reqDate" name="reqDate" value="">											<!--전송일자-->
+	
+	<input type="hidden" id="bizJsonYn" name="bizJsonYn" value="<c:out value='${kakaoVO.bizJsonYn}' />">					<!-- JSON 생성 여부 -->
+	
+	<input type="hidden" id="imageType" name="imageType" value="<c:out value='${kakaoVO.imageType}'/>"/>				<!-- 이미지 종류 -->
+	<input type="hidden" id="imageFileName" name="imageFileName" value="<c:out value='${kakaoVO.imageFileName}'/>">		<!-- 이미지 파일 이름 -->
+	<input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${kakaoVO.templateImageUrl}'/>"> <!-- 이미지 경로 -->
+	<input type="hidden" id="imgTitle" name="imgTitle" value="<c:out value='${kakaoVO.imgTitle}'/>">					<!-- 이미지 타이틀 -->
+	<input type="hidden" id="imgLink" name="imgLink" value="<c:out value='${kakaoVO.imgLink}'/>">						<!-- 이미지 링크정보 -->
+	<input type="hidden" id="adFlag" name="adFlag" value="<c:out value='${kakaoVO.adFlag}'/>"/>							<!-- 광고여부  -->
+	
+	<input type="hidden" id="spamStatus" name="spamStatus" value="N"/>
+	<input type="hidden" id="atSmishingYn" name="atSmishingYn" value="N"/>
+	
+	<input type="hidden" id="kakaoFtPrice" value="<c:out value='${kakaoFtPrice}' />">
+	<input type="hidden" id="eachPrice" name="eachPrice" value="<c:out value='${kakaoFtPrice}' />"/>
+	<input type="hidden" id="totPrice" name="totalPrice" value="<c:out value='${kakaoFtPrice}' />"/>
+	<input type="hidden" id="varValList" name="varValList" value="<c:out value='${kakaoVO.varValList}' />"/>
+	<!-- 버튼 정보 처리 -->
+	<c:forEach var="buttonList" items="${kakaoVO.buttonVOList}" varStatus="status">
+	                                    	
+   		<c:if test="${buttonList.linkType eq 'DS'}">
+   			<!-- 배송조회 버튼  -->
+      		<input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/>
+      		<input type="hidden" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
+   		</c:if>
+    	
+    	<c:if test="${buttonList.linkType eq 'WL'}">
+	     	<!-- 웹링크 버튼 -->
+			<input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/>
+			<input type="hidden" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
+			<input type="hidden" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>">
+			<input type="hidden" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>">
+    	</c:if>
+    	
+    	<c:if test="${buttonList.linkType eq 'AL'}">
+	     	<!-- 앱링크 버튼 -->
+	     	<input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/>
+			<input type="hidden" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
+			<input type="hidden" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>">
+			<input type="hidden" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>">
+    	</c:if>
+    	
+    	<c:if test="${buttonList.linkType eq 'BK'}">
+	     	<!-- 봇키워드 -->
+	     	<input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/>
+			<input type="hidden" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
+    	</c:if>
+    	
+    	<c:if test="${buttonList.linkType eq 'MD'}">
+	     	<!-- 메시지 전달 -->
+	     	<input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" />
+			<input type="hidden" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
+		</c:if>	                                    	
+    	
+    	<c:if test="${buttonList.linkType eq 'BC'}">
+	     	<!-- 상담톡 전환 -->
+	     	<input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" />
+			<input type="hidden" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
+		</c:if>
+
+		<c:if test="${buttonList.linkType eq 'BT'}">
+			<!-- 챗봇전환 -->
+			<input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" />
+			<input type="hidden" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>">
+		</c:if>
+	</c:forEach>
+	
+</form>
+
+<!-- 유저 보유잔액 -->
+<input type="hidden" id="oriUserMoney" value="<c:out value='${userMoney}' />">
+
+<div class="test_sendpop kakao_rev_popup" style="width: 770px;">
+	<div class="info_popup">
+		<div class="popup_heading">
+			<p>테스트 발송</p>
+		</div>
+		<div class="layer_in">
+			<ul class="info_list">
+				<li>테스트 발송은 친구톡을 본인에게 발송하여 친구톡 내용을 미리 확인하는 서비스 입니다.</li>
+			</ul>
+		</div>
+	</div>
+	<div class="test_wrap kakao_wrap">
+		<div class="number">
+			<dl>
+				<dt>수신번호</dt>
+				<dd>
+					<input type="text" id="callTo" name="callTo" maxlength="11" oninput="this.value = this.value.replace(/[^0-9]/g, '').replace(/(\..*)\./g, '$1');"  placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'">
+				</dd>
+			</dl>
+			<dl class="price">
+				<dt>발송금액</dt>
+				<dd><span>${kakaoFtPrice}</span>원</dd>
+			</dl>
+			<p class="text">발송하시겠습니까?<span>※ 친구톡 발송과 동일하게 요금이 차감됩니다.</span></p>
+			<button type="button" class="btnType btnType10" onclick="fn_testSendMsgData(); return false;">테스트발송</button>
+		</div>
+		<div class="phone">
+			<div class="phoneIn">
+				<p class="prev_p" id="prev_p_top">
+					${kakaoVO.yellowId}
+				</p>
+				<!-- 텍스트 미리보기 -->
+				<div class="text_preview">
+					<div class="allimtalk_title">
+						<img src="/publish/images/content/icon_allimtalk.png" alt="">친구톡
+					</div>
+					<div class="allimtalk_content" id="alimtalkTemplate">
+<!-- 						<p class="emphasis_side_text">템플릿을 선택해 주세요</p> -->
+							<c:if test="${kakaoVO.imageType eq 'I' || kakaoVO.imageType eq 'W'}">
+								<div class="kakao_image">
+									<img src="<c:url value='${kakaoVO.templateImageUrl}'/>" alt="">
+								</div>
+							</c:if>
+						<!-- 알림톡 내용 표시 -->
+						<p class="template_text">
+							<c:out value="${fn:replace(fn:replace(kakaoVO.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>							
+						</p>
+						
+						<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
+						<c:forEach var="templatInfoButtonList" items="${kakaoVO.buttonVOList}" varStatus="status">
+							<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>	
+						</c:forEach>
+					</div>
+				</div>
+				<!-- 텍스트 미리보기 -->
+				
+				<!-- //텍스트 미리보기 -->
+				<!-- <div class="template_info_wrap">
+					<div class="template_byte">
+					</div>
+				</div> -->
+			</div>
+			<p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p>
+		</div>
+	</div>
+</div>(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
@@ -2,34 +2,33 @@
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
 <%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
-
+<%@ page import="itn.com.cmm.LoginVO" %>
 <script src="/js/kakao/templateComm.js"></script>
+
+<script type="text/javascript" src="<c:out value='/js/MJUtill.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/ftPriceClclt.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/ftTabulator.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/txtSpecialReplace.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/at/addr.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/common/popup.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/ft/friendstalkExcel.js' />"></script>
 
 
 <script type="text/javascript">
+
+var loginVO = '${loginVO}';
 /* 파일등록 */
 var _fileIdx = 0;
 var _fileForm2 = new Array();
 var fileExt = ""; // 첨부파일 확장자
+var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변수
 
 $(document).ready(function (){
 	
-	//광고성 정보 포함 선택에 따른 텍스트 표시 부분 처리
-	$(".inputAdFlag").change(function(){
-		var adFlagVal = $(this).val();
-		if(adFlagVal == 'N'){//광고 표시 숨김처리
-			$('.adFlag').hide();
-			$('.kakao_block_text').hide();
-			$('#adFlagFront').hide();
-			$('.adFlagAfter').hide();
-		}else{
-			$('.adFlag').show();
-			$('.kakao_block_text').show();
-			$('#adFlagFront').show();
-			$('.adFlagAfter').show();
-		}
-	});
+	//화면 초기 로딩시 화면 처리해주기 - 템플릿 불러오기 했을 경우를 위함
+	initFormChk();
 	
 	//이모티콘 삽입 기능 처리
 	$(".symbolButton, .changeWord").on('click', function(){
@@ -48,15 +47,184 @@
 		$('#bizForm #reserveYn').val($(this).val());
 	});
 	
+	//예약 발송 라디오 버튼 선택시 숨김 해제처리
+	$("#reserYnY").on('click', function(){
+		$('.rev_selected').show();
+		$('.send_rev .send_content').css('padding-bottom','0');
+		$('.send_btn .btnType:first-child').html('예약하기');
+		$('#bizForm #reserveYn').val($(this).val());
+	});
+	
 	//템플릿 내용 입력 글자수 체크 해주기
 	$("#inputTemplateContent").keyup(function(e){
 		
 		var contents = $('#inputTemplateContent').val();
-		console.log(contents);
 		setContentsLengForFriends(contents);
 		
 	});
+	
+	$("#excelAdd").click(function(){
+		
+		if(excelAddr.length > 0){
+			
+			//첨부파일로 불러온 데이터를 받는사람 목록에 추가해 준다.
+			addPhoneInfo(excelAddr);
+			
+			 //첨부파일 초기화 시켜주기
+		    $("#excelFile").val("");
+		    $("#excelNm").val("");
+			
+		}else{
+			
+			alert("추가 엑셀 데이터가 없습니다.");
+			return false;
+			
+		}
+		
+	});
+	
+	
+	$("#send_fail_check").change(function(){
+		if($("#send_fail_check").is(":checked")){
+
+			
+			if(loginVO == "" || loginVO == null){
+				alert("로그인 후 사용 가능한 기능입니다.");
+				location.href="<c:url value='/web/user/login/login.do'/>";
+				return false;
+				
+				$("#send_fail_check").prop("checked", false);
+			}
+			
+			if($('#callFromList').val() === ''){
+				
+				if(confirm('대체문자 전송을 위한 발신번호가 등록되지 않았습니다. \n대체문자 발신번호를 지금 등록하시겠습니까?')){
+					window.location="<c:out value='/web/user/sendNumberManage.do' />";
+				}
+				$("#send_fail_check").prop("checked", false);
+				
+			}else{
+				// 에러버튼 체크 초기화
+				fn_insertErrorYN('N');
+				
+				$('#smsTxtArea').val('');
+// 				// 미리보기 텍스트를 가져와 줄바꿈 처리 후 대체문자 내용으로 입력
+				$('#smsTxtArea').val(
+					$('.template_text').html().trim().replace(/(<br>|<br\/>|<br \/>)/g, '\r\n')
+				);
+
+// 				//문자 내용 입력시 바이트수 계산하기
+				
+				$(".replace_send_wrap").slideDown(400);
+				thisFnByteString($('#smsTxtArea').val());
+			}
+		}else{
+			$(".replace_send_wrap").slideUp(400);
+			// 초기화 버튼 클릭
+			$('#failCheckInit').click();
+			$('.send_top .send_right .phone').css({'top': '0','transition': 'top .4s linear'});
+		}
+
+		// 금액 계산 fn 호출
+		totalFtPriceSum(tableL.getRows().length);
+		//fn_priceClclt();
+	});
+	
+	// 대체문자 내용 수정
+	$('#smsTxtArea').keyup(function(){
+		// 금액 계산 fn 호출
+		totalFtPriceSum(tableL.getRows().length);
+		//fn_priceClclt();
+		// 문자 바이트수 체크
+		thisFnByteString($('#smsTxtArea').val());
+		// 에러버튼 체크 초기화
+		fn_insertErrorYN('N');
+		
+	});
+	
+	
+	//대체문자 초기화 버튼 선택 처리
+	$("#failCheckInit").click(function(){
+		
+		$('#smsTxtArea').val("");
+		
+		// 금액 계산 fn 호출
+		totalFtPriceSum(tableL.getRows().length);
+		//fn_priceClclt();
+		// 문자 바이트수 체크
+		thisFnByteString($('#smsTxtArea').val());
+		// 에러버튼 체크 초기화
+		fn_insertErrorYN('N');
+		
+	});
+	
+	
 });
+
+function initFormChk(){
+	
+	//첫로딩시 우측 미리보기 화면 숨김처리
+	$('.emphasis_title_text').hide();	//강조유형 타이틀
+	$('.emphasis_side_text').hide();	//강조유형 보조문구
+	//$('.template_text').hide();			//내용 미리보기
+	$('.side_info_text').hide();		//부가정보 내용
+	$('.channel_info_text').hide();		//채널추가 텍스트 내용
+	$('.btnAd').hide();					//샘플 채널추가 버튼
+	//$('.btnEmpty').hide();				//샘플 버튼
+	
+	//채널ID 정보 미리보기에 표시해주기
+	fnAgentCodeChg();
+	
+	//템플릿 등록 이미지가 있는 경우 이미지 정보 표시해 주기
+	var imgType = $("input[name=img_file_add]:checked").val();
+	
+	if(!imgType == ''){
+		
+		if($("input[name='img_file_add']:checked").attr("id")=="img_file_1"){
+			$(".basic_img_add_wrap").show().siblings(".img_add_info_wrap").hide();
+			$(".img_file_add_wrap").show();
+		}else if($("input[name='img_file_add']:checked").attr("id")=="img_file_2"){
+			$(".wide_img_add_wrap").show().siblings(".img_add_info_wrap").hide();
+			$(".img_file_add_wrap").show();
+		} else{
+			$(".img_add_info_wrap, .img_file_add_wrap").hide();
+		}
+		
+	}else{
+		
+		$("#img_file_0").prop('checked',true);
+		
+	}
+	var imageFileName = '${resultTemplateVO.imageFileName}';
+	$("#imgNm").text(imageFileName);
+	
+	//미리보기에 이미지 표시해주기
+	var imgUrl = '${resultTemplateVO.templateImageUrl}';
+	
+	if(imgUrl != ''){
+		$('.kakao_image').css("display", "block");
+		$("#kakaoImg").attr("src", imgUrl);
+	}
+	
+	//초기 템플릿 내용 글자수 처리해주기
+	var tmpContents = $('#inputTemplateContent').val();
+	setContentsLengForFriends(tmpContents);
+	
+	//초기 광고포함 여부 처리
+	var adFlagVal = $("input[name=ad_flag]:checked").val();
+	advTextChange(adFlagVal);
+	
+	var reserYn = $("input[name=reserYn]:checked").val();
+	if(reserYn == 'N'){
+		
+		$('.rev_selected').hide();
+		$('.send_rev .send_content').css('padding-bottom','108px');
+		$('.send_btn .btnType:first-child').html('발송하기');
+		$('#bizForm #reserveYn').val('N');
+		
+	}
+	
+}
 
 //우측 미리보기 화면 채널 아이디 정보 변경해 주기
 function fnAgentCodeChg(){
@@ -219,6 +387,7 @@
 				
 					$('.kakao_image').css("display", "block");
 					$("#kakaoImg").attr("src", imgUrl);
+					$("#imageFileName").val(fileName);
 					
 				}else if(code == "2002"){//일반 이미지 가로 세로 크기 오류 발생
 					
@@ -287,6 +456,16 @@
 		
 	}
 	
+	var tmpFriendId = $("#tmpFriendId").val();
+	
+	if(tmpFriendId != ''){
+		
+		if(!confirm("불러온 템플릿의 이미지도 함께 삭제 됩니다. 계속하시겠습니까?")){
+			return false;
+		}
+		
+	}
+	
 	var data = new FormData(bizForm);
 	
 	if(confirm("등록된 이미지를 삭제하시겠습니까?")){
@@ -319,6 +498,8 @@
 						$("#templateImageUrl").val("");
 						$('.kakao_image').css("display", "none");
 						$("#kakaoImg").attr("src", "");
+						$("#imageFileName").val("");	//이미지 파일명 삭제
+						$("#img_file_0").click();		//이미지 첨부 안함 선택
 						return false;
 						
 					}else{
@@ -345,6 +526,1165 @@
 	$('.nowChar').text("0 /");
 }
 
+//저장 템플릿 불러오기 선택시 
+function myTemplateSelect(ftId){
+	
+	var form = document.templateForm;
+	
+	form.friendId.value = ftId;
+	
+	form.action="/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgDataView.do";
+	form.submit();
+	
+	
+}
+
+//광고성 정보 포함 선택에 따른 텍스트 표시 부분 처리
+$(document).on('change', '.inputAdFlag', function(){
+	
+	var adFlagVal = $(this).val();
+	advTextChange(adFlagVal);
+	
+});
+
+function advTextChange(adFlagVal){
+	
+	if(typeof adFlagVal == "undefined" || adFlagVal == null || adFlagVal == ""){
+		
+		$("#ad_Y").prop('checked',true);
+		
+	}else if(adFlagVal == 'N'){//광고 표시 숨김처리
+		
+		$('.adFlag').hide();
+		$('.kakao_block_text').hide();
+		$('#adFlagFront').hide();
+		$('.adFlagAfter').hide();
+		
+	}else{
+		$('.adFlag').show();
+		$('.kakao_block_text').show();
+		$('#adFlagFront').show();
+		$('.adFlagAfter').show();
+	}
+	
+}
+
+
+//친구톡 내용 템플릿으로 저장하기 - 내용 저장하기
+function myTemplateSave(){
+
+	var selectAgentCode = $("select[name='selectAgentCode']").val();	// 선택 채널ID
+	var yellowId = $("select[name='selectAgentCode'] option:selected").text().replaceAll('@','');			// 선택 채널명
+	var inputTemplateName = $("#inputTemplateName").val();				// 입력 템플릿 이름
+	var imageType = $("input[name=img_file_add]:checked").val();		// 첨부 이미지 종류(없음, 일반, 와이드 이미지)
+	var imageTitle = $("#imgTitle").val();								//첨부이미지 제목
+	var imageLink = $("#imgLink").val();								//첨부이미지 클릭시 이동 링크 주소
+	var inputTemplateAd = $("input[name=ad_flag]:checked").val();	// 광고성메시지 선택 여부
+	var inputTemplateContent = $("#inputTemplateContent").val();		// 템플릿 내용
+	
+	var inputTemplateImageName = $("#templateImageName").val();	// 템플릿 이미지 파일명
+	var inputTemplateImageUrl = $("#templateImageUrl").val();		// 템플릿 이미지 링크
+	
+	// 공통 유효성 검사 조회
+	if(selectAgentCode == null || selectAgentCode == ""){
+		alert("채널ID를 선택해 주세요");
+		return;
+	};
+	
+	if(inputTemplateName == null || inputTemplateName == ""){
+		alert("템플릿 명을 입력해 주세요");
+		$("#inputTemplateName").focus();
+		return;
+	};
+	
+	if(imageType == 'I' || imageType == 'W'){
+		
+		if(imageTitle == ''){
+			
+			alert("이미지 제목을 입력해 주세요.");
+			return false;
+			
+		}
+		
+		if(imageLink == ''){
+			
+			alert("이미지 클릭시 이동할 URL을 입력해 주세요.");
+			return false;
+			
+		}else{
+			
+			if(imageLink.search("http://") == -1 && imageLink.search("https://") == -1){
+				
+				alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다.");
+				return false;
+				
+			}
+			
+		}
+		
+		if(inputTemplateImageUrl == ''){
+			
+			alert("이미지를 선택해 주세요.");
+			return false;
+			
+		}
+		
+	}
+	
+	
+	if(inputTemplateContent == null || inputTemplateContent == ""){
+		alert("템플릿 내용을 입력해 주세요.");
+		return;
+	};
+	
+	var bizForm = document.bizForm;
+	bizForm.senderKey.value = selectAgentCode;
+	//bizForm.yellowId.value = yellowId;
+	bizForm.templateName.value = inputTemplateName;
+	//bizForm.imageType.value = imageType;
+	//bizForm.imgTitle.value = imageTitle;
+	//bizForm.imgLink.value = imageLink;
+	bizForm.adFlag.value = inputTemplateAd;
+	bizForm.templateContent.value = inputTemplateContent;
+	
+	var data = new FormData(bizForm);
+	
+	if(confirm("템플릿을 저장하시겠습니까?")){
+		
+		$.ajax({
+			type: "POST"
+			, url: "/web/mjon/kakao/template/insertKakaoFriendsTemplateDataAjax.do"
+			, data: data
+			, dataType: 'json'
+			, async: false
+			, processData: false
+			, contentType: false
+			, cache: false
+			, success: function (returnData, status) {
+				
+				var result = returnData.result;
+				
+				if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
+					alert("로그인후 진행이 가능합니다.");
+				}else if(returnData.result == "success") {
+					alert("템플릿 저장이 완료되었습니다.");
+					return false;
+				}else{
+					
+					alert("템플릿 저장에 오류가 발생하였습니다.");
+					return false;
+					
+				}
+			}
+			,error: function (e) {
+				console.log("ERROR : ", e);
+				alert("템플릿 저장에 오류가 발생하였습니다.");
+			}
+		});
+		
+	}
+	
+}
+
+//주소록 불러오기 버튼 클릭시
+$('.popupAddr').click(function(){
+	
+	if(loginVO == "" || loginVO == null){
+		alert("주소록 불러오기 서비스는 로그인 후 이용 가능합니다.");
+		location.href="<c:url value='/web/user/login/login.do'/>";
+		return false;
+	}
+	
+	$("#addrGroupLoad").load("/web/mjon/msgdata/selectAddrGroupListAjax.do", "" ,function(response, status, xhr){
+		//리스트 스크롤 처리해주기
+		$(".adr_pop_list").mCustomScrollbar({
+			axis: 'y',
+			scrollbarPosition: "outside",
+			theme: "dark",
+			autoHideScrollbar: false
+		});
+	});
+	
+});
+
+function fnEmptyId(){
+	
+	alert("로그인 후 이용이 가능합니다.");
+	return false;
+	
+}
+
+//분할전송 건수 데이터 체크
+function checkNumber(event) {
+	var divideCnt = $('#frmDivideCnt').val();
+	if(!(event.key >= 0 && event.key <= 9)) {
+		return false;
+	}
+	
+	var totCnt = divideCnt + "" + event.key;
+	if(Number(totCnt) > 5000){
+		alert("분할전송 건수는 5,000건을 초과할 수 없습니다.");
+		$('#frmDivideCnt').val("20");
+		return false;
+	}
+  
+  return true;
+}
+
+function fnSelectMinChk(){
+	
+	var resHour = $("#msgResHour option:selected").val();
+	var resMin = $("#msgResMin option:selected").val();
+	
+	if(resHour == '20'){
+		
+		if(resMin >= 50 && resMin <= 59){
+			
+			alert("친구톡은 20:50 ~ 익일 08:00까지 발송할 수 없습니다.");
+			$("#msgResMin").val("40").prop("selected", true);
+			
+		}
+		
+	}
+	
+}
+
+
+//친구톡 발송 금지 시간 처리
+function fn_noTimeSend(){
+	
+	var id = '${loginVO.id}';
+
+	if(id == ""){
+		
+		alert("로그인 후 이용이 가능합니다.");
+		return false;
+		
+	}
+	
+	alert("친구톡은 20:50 ~ 익일 08:00까지 발송할 수 없습니다.");
+	return false;
+	
+}
+
+//친구톡 데이터 전송 처리
+function fn_sendMsgData(){
+	
+	var senderKey = $("#selectAgentCode option:checked").val();
+	
+	if(senderKey == ''){
+		
+		alert("채널ID를 선택해 주세요.");
+		return false;
+		
+	}else{
+		
+		$("#inputSenderKey").val(senderKey);
+		
+	}
+	
+	//이미지 첨부 체크	
+	var imgChk = $("input[name=img_file_add]:checked").val();
+	if(!getFtImageType(imgChk)){
+		return false;
+	}
+	
+	//템플릿 버튼 갯수 체크 
+	var buttonCnt = $(".btn_kakao_type").length;
+
+	if(buttonCnt > 0){
+		//json 파일 필요 유무 셋팅
+		$("#bizJsonYn").val("Y");
+	}
+	
+	//친구톡 내용 체크
+	var tmpContents = $('#inputTemplateContent').val();
+
+	if(tmpContents == ""){
+		
+		alert("친구톡 내용을 입력해 주세요.");
+		return false;
+		
+	}
+	
+	var rtnStr = strChinJpnCheck(tmpContents);
+	
+	//문자내용에 이모지가 있는지 체크
+	if(!emojiCheck(tmpContents)) return false;
+	
+	if(rtnStr.length > 0){
+		
+		alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다.");
+		
+	}
+	
+
+	//수신번호 리스트 체크하기
+	var numCnt = 0;
+	var nameList = [];		//치환문자 이름
+	var phoneNum = [];	//받는사람
+	var rep1List = [];		//치환문자1
+	var rep2List = [];		//치환문자2
+	var rep3List = [];		//치환문자3
+	var rep4List = [];		//치환문자4
+	
+	var varValList = [];		//치환문자 연결시킬 변수 셋팅
+	
+	var selectedData = tableL.getRows();
+	
+	var varValStatus = true; //치환분자 데이터 체크용
+	
+	if(selectedData == "" || selectedData == null){
+		
+		alert("받는사람 주소를 한 건 이상 입력해주세요.");
+		return false;
+	
+	}else{ // 선택한 Row '-' 문자 삭제하기
+		
+		var txtReplYn = $("#txtReplYn").val();
+		
+		if(txtReplYn == 'Y'){//치환문자가 있는 경우 변수 치환 처리
+		
+			for(var i=0; i < selectedData.length; i++){
+				
+				var nmStatus = false;
+				var rep1Status = false;
+				var rep2Status = false;
+				var rep3Status = false;
+				var rep4Status = false;
+				
+				
+				if(tmpContents.indexOf("\#{이름}")  > -1){
+					
+					nmStatus = true;
+				}
+				
+				if(tmpContents.indexOf("\#{1}")  > -1){
+					
+					rep1Status = true;
+				}
+				
+				if(tmpContents.indexOf("\#{2}")  > -1){
+					
+					rep2Status = true;
+				}
+				
+				if(tmpContents.indexOf("\#{3}")  > -1){
+					
+					rep3Status = true;
+				}
+				
+				if(tmpContents.indexOf("\#{4}")  > -1){
+					
+					rep4Status = true;
+				}
+				
+				//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
+				var name = tableL.getRows()[i].getData().name;
+				var phone = removeDash(tableL.getRows()[i].getData().phone);
+				var rep1 = tableL.getRows()[i].getData().rep1;
+				var rep2 = tableL.getRows()[i].getData().rep2;
+				var rep3 = tableL.getRows()[i].getData().rep3;
+				var rep4 = tableL.getRows()[i].getData().rep4;
+				var varValStr = "";	//¶ 구분자
+				
+				if(phone == ""){
+					
+					alert("수신 목록에 핸드폰 번호가 없는 항목이 있습니다.");
+					return false;
+					
+				}else if(!checkHpNum(phone)){
+					
+					alert("수신 목록에 잘 못된 핸드폰 번호가 있습니다. 핸드폰 번호 : " + phone + " 입니다.");
+					return false;
+					
+				}else{
+					
+					if(typeof(name) != 'undefined' && name != null && name !=""){
+						if(!emojiCheck(name)){//이모지 체크 해주기
+							return false;
+						}
+						
+						//이름 치환변수가 있으면 저장
+						if(nmStatus){
+							//nameList[i] = name.replaceAll(",","§");
+							if(varValStr == ''){
+								
+								varValStr = name.replaceAll(",","§");
+							}else{
+								
+								varValStr = varValStr + "¶" +  name.replaceAll(",","§");
+								
+							}
+						}
+					}else{
+						if(nmStatus){
+							varValStatus = false;
+						}
+					}
+
+					
+					if(phone != '' && phone != null){
+						//연락처 변수 저장하기
+						phoneNum[i] = phone;
+						if(varValStr == ''){
+							varValStr = phone;	
+						}else{
+							varValStr = varValStr + "¶" +  phone;
+						}
+					}else{
+						varValStatus = false;
+					}
+					
+					if(typeof(rep1) != 'undefined' && rep1 != null && rep1 !=""){
+						if(!emojiCheck(rep1)){//이모지 체크 해주기
+							return false;
+						}
+						
+						if(rep1Status){
+							
+							if(varValStr == ''){
+								//rep1List[i] = rep1.replaceAll(",","§");
+								varValStr = rep1.replaceAll(",","§");
+							}else{
+								//rep1List[i] = rep1.replaceAll(",","§");
+								varValStr = varValStr + "¶" +  rep1.replaceAll(",","§");
+							}
+						}
+					}else{
+						if(rep1Status){
+							varValStatus = false;
+						}
+					}
+					
+					if(typeof(rep2) != 'undefined' && rep2 != null && rep2 !=""){
+						if(!emojiCheck(rep2)){//이모지 체크 해주기
+							return false;
+						}
+						
+						if(rep2Status){
+							
+							if(varValStr == ''){
+								varValStr = rep2.replaceAll(",","§");
+							}else{
+								//rep2List[i] = rep2.replaceAll(",","§");
+								varValStr = varValStr + "¶" +  rep2.replaceAll(",","§");
+							}
+						}
+					}else{
+						if(rep2Status){
+							varValStatus = false;
+						}
+					}
+					
+					
+					if(typeof(rep3) != 'undefined' && rep3 != null && rep3 !=""){
+						if(!emojiCheck(rep3)){//이모지 체크 해주기
+							return false;
+						}
+						
+						if(rep3Status){
+							
+							if(varValStr == ''){
+								varValStr = rep3.replaceAll(",","§");
+							}else{
+								//rep3List[i] = rep3.replaceAll(",","§");
+								varValStr = varValStr + "¶" +  rep3.replaceAll(",","§");
+							}
+						}
+					}else{
+						if(rep3Status){
+							varValStatus = false;
+						}
+					}
+					
+					
+					if(typeof(rep4) != 'undefined' && rep4 != null && rep4 !=""){
+						if(!emojiCheck(rep4)){//이모지 체크 해주기
+							return false;
+						}
+						
+						if(rep4Status){
+							
+							if(varValStr == ''){
+								varValStr = rep4.replaceAll(",","§");
+							}else{
+								//rep4List[i] = rep4.replaceAll(",","§");
+								varValStr = varValStr + "¶" +  rep4.replaceAll(",","§");
+							}
+						}
+					}else{
+						if(rep4Status){
+							varValStatus = false;
+						}
+					}
+					
+				}
+				
+				varValList[i] = varValStr;
+				
+			}
+		
+		}else{//치환문자가 없는 경우 휴대폰 번호만 입력
+			
+			for(var i=0; i < selectedData.length; i++){
+				
+				//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
+				var phone = removeDash(tableL.getRows()[i].getData().phone);
+				
+				if(phone == ""){
+					
+					alert("수신 목록에 핸드폰 번호가 없는 항목이 있습니다.");
+					return false;
+					
+				}else if(!checkHpNum(phone)){
+					
+					alert("수신 목록에 잘 못된 핸드폰 번호가 있습니다. 핸드폰 번호 : " + phone + " 입니다.");
+					return false;
+					
+				}else{
+					
+					phoneNum[i] = phone;
+					
+				}
+				
+			}
+		
+		}
+	
+	}
+	
+	//예약문자 시간 체크
+	var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
+	
+	if(reserYn == 'Y'){
+		
+		var date = $(".resDate").val();//form.msgResDate.value;
+		var hour = $("#msgResHour option:selected").val();
+		var min = $("#msgResMin option:selected").val();
+		
+		if(date == ""){
+			
+			alert("예약전송 날짜를 선택해 주세요.");
+			return false;
+			
+		}else{
+			
+			var now = new Date();
+			var reqDate = date + " " + hour + ":" + min + ":00";
+			var gapDate = getGapDayTime(date, hour, min);
+			
+			if(gapDate < 0){ // 음수이면 이전날짜, 크면 이후 날짜.
+				alert("예약 날짜는 현재 시간 이후의 날짜 및 시간을 선택해 주세요.");
+				return false;
+			}else{
+				$("#reqDate").val(reqDate);	//예약일자 파라미터 저장
+			}
+		}
+
+	}else{
+		
+		$("#reqDate").val("");	//예약일자 파라미터 저장
+		
+	}
+	
+	
+	//대체문자 선택 및 내용 체크
+	var subMsgSendYn = "N";
+	
+	if($("#send_fail_check").is(":checked")){
+		
+		subMsgSendYn = "Y";
+		$("#subMsgSendYn").val("Y");
+		
+		//대체문자 체크사항 함수 호출
+		if(!fn_subMsgCheck()){ 
+			
+			/* $("#send_fail_check").prop("checked", false);
+			$(".replace_send_wrap").slideUp(400);
+			// 초기화 버튼 클릭
+			$('#failCheckInit').click();
+			$('.send_top .send_right .phone').css({'top': '0','transition': 'top .4s linear'}); */
+			return false;
+		
+		}
+		
+	}else{
+		
+		subMsgSendYn = "N";
+		$("#subMsgSendYn").val("N");
+		
+	}
+	
+	//수신전화번호 목록
+	$("#callToList").val(phoneNum);
+	
+	//치환변수 데이터 정보 목록(수신번호 포함, tabulator 정보 모두 )
+	$("#varValList").val(varValList);
+
+	//템플릿 내용 입력
+	$("#templateContent").val(tmpContents);
+	
+	//광고포함 여부
+	var adFlag = $("input[name=ad_flag]:checked").val();
+	$("#adFlag").val(adFlag);
+	
+	//치환문자에 대한 데이터 누락 체크
+	if(!varValStatus){
+		
+		alert("특정문구 일괄변환에 대한 일부 데이터가 누락된 부분이 있습니다. 데이터를 확인해 주세요.");
+		return false;
+		
+	}
+	
+	if(!confirm("친구톡을 발송하시겠습니까?")){
+		
+		return false;
+		
+	}
+	
+	var spamChk = true;
+	
+	var spmData = new FormData(document.bizForm);
+	$.ajax({
+		type: "POST"
+		, url: "/web/mjon/kakao/friendstalk/selectSpamKakaoFriendsTalkMsgChkAjax.do"
+		, data: spmData
+		, dataType:'json'
+		, async: false
+		, processData: false
+		, contentType: false
+		, cache: false
+		, success: function (returnData, status) {
+			if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
+				
+				if("fail" == returnData.result){
+					alert(returnData.message);
+					spamChk = false;
+					return false;
+				}else if("loginFail" == returnData.result){
+					alert(returnData.message);
+					spamChk = false;
+					return false;
+				}else if("spams" == returnData.result){
+					//alert("전송 내용에  스팸문구가 포함되어 있습니다.")
+					$("#spamStatus").val("Y");
+					return false;
+				}else{
+					spamChk = true;
+					return false;
+				}
+				
+			} else if(status== 'fail'){
+				alert(returnData.message);
+				return false;
+			}
+		}
+		, error: function (e) {
+			alert("문자 발송에 실패하였습니다.");
+			console.log("ERROR : ", e);
+			return false;
+		}
+	});
+	
+	if(spamChk){
+		var data = new FormData(document.bizForm);
+		$.ajax({
+			type: "POST"
+			, url: "/web/mjon/kakao/friendstalk/kakaoFriendsTalkMsgSendAjax.do"
+			, data: data
+			, dataType: 'json'
+			, async: true
+			, processData: false
+			, contentType: false
+			, cache: false
+			, success: function (returnData, status) {
+				if(status == 'success'){
+					if("loginFail" == returnData.result){
+						
+						alert(returnData.message);
+						return false;
+						
+					}else  if('fail' == returnData.result){
+						
+						alert(returnData.message);
+						return false;
+						
+					}else if('authFail' == returnData.result){
+						
+						alert(returnData.message);
+						location.reload();
+						
+					} else if(status == 'success'){
+						
+						var kakaoSendCnt = returnData.resultSts;
+						
+						$('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
+						
+						//예약발송 건의 경우 결과 팝업 문구 변경
+						if(reserYn == 'Y'){
+							$('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>친구톡이 예약 되었습니다.");
+						}else{
+							$('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ kakaoSendCnt + "</strong>건의<br>친구톡이 발송 되었습니다.");
+						}
+						
+						$('.mask').addClass('on');
+					}
+				}
+			}
+			,beforeSend : function(xmlHttpRequest) {
+				//로딩창 show
+				$('.loading_layer').addClass('active');
+			}
+			,complete : function(xhr, textStatus) {
+				//로딩창 hide
+				$('.loading_layer').removeClass('active');
+			}
+			,error: function (e) {
+				console.log("ERROR : ", e);
+				alert("카카오 친구톡 전송에 실패하였습니다.");
+			}
+		}); 
+	}
+	
+}
+
+
+/**
+ * @description 대체문자 오류체크 funciton
+ */
+function fn_errorChk(){
+
+	// 대체문자가 없을 시 return false;
+	if($('#txtReplYn').val() === 'N')
+	{
+		alert('오류가 없습니다.');
+		return false;
+	}
+
+	// 치환 부분 변수명만 추출 = 배열
+	var varList = $("#inputTemplateContent").val().match(/#\{([^}]+)\}/g);
+	
+	var smsTxt = $('#smsTxtArea').val();
+	for(var i=0; i < varList.length; i++){
+		if(smsTxt.indexOf(varList[i]) < 0){
+			if(confirm(varList[i] + '값이 없습니다. 치환문자 없이 진행하시겠습니까?')){
+				fn_insertErrorYN('Y');
+			};
+			return false;
+		}
+		smsTxt = smsTxt.replace(varList[i], '');
+	};
+	alert('오류가 없습니다.');
+	fn_insertErrorYN('Y');
+}
+
+
+function fn_insertErrorYN(val){
+	$('#errorChk').val(val);
+}
+
+/*
+ *대체문자 필수 항목 체크 
+ *
+ **/
+ 
+function fn_subMsgCheck(){
+
+	if($('#callFromList').val() === ''){
+		
+		if(confirm('대체문자 전송을 위한 발신번호가 등록되지 않았습니다. \n대체문자 발신번호를 지금 등록하시겠습니까?')){
+			window.location="<c:out value='/web/user/sendNumberManage.do' />";
+		}
+		$("#send_fail_check").prop("checked", false);
+		
+		return false;
+		
+	}else{
+	
+		//발신번호 입력 처리
+		$("#callFrom").val(removeDash($('#callFromList').val()));
+		
+	}
+	
+	if($("#smsTxtArea").val() === ''){
+		
+		alert("대체문자 내용을 입력해 주세요.");
+		return false;
+		
+	}else{//대체문자에 치환문자 여부 체크
+		
+		var smsTxtArea = $("#smsTxtArea").val();
+		var replStatus = false;
+	
+		if(smsTxtArea.indexOf("\#{이름}")  > -1){
+			replStatus = true;
+		}
+		
+		if(smsTxtArea.indexOf("\#{1}")  > -1){
+			replStatus = true;
+		}
+		
+		if(smsTxtArea.indexOf("\#{2}")  > -1){
+			replStatus = true;
+		}
+		
+		if(smsTxtArea.indexOf("\#{3}")  > -1){
+			replStatus = true;
+		}
+		
+		if(smsTxtArea.indexOf("\#{4}")  > -1){
+			replStatus = true;
+		}
+		
+		if(replStatus){
+			$("#subMsgTxtReplYn").val("Y");
+		}else{
+			$("#subMsgTxtReplYn").val("N");
+		}
+		
+		$("#subMsgTxt").val(smsTxtArea);
+		
+	}
+	
+	
+	
+	return true;
+	
+}
+
+//문자 바이트수 계산하기 함수
+function thisFnByteString(contents){
+	var totalByte = 0; 
+	//var content = contents;
+	var adverYn = $("input[name='send_adYn']:checked").val();
+	var adTxtLeng = 0;
+	var denyTxtLeng = 0;
+
+	$('#msgLeng').html("");
+	$('#limitLeng').html("");
+	var conLeng = conByteLeng(contents); // 내용 문자 입력 바이트 수 계산하기
+	
+		
+	$('#msgLeng').text(conLeng);
+	
+	//문자 길이 변수에 저장해주기
+	$('#smsLen').val(conLeng);
+	
+	
+	if(conLeng > 90){
+		
+		$('#msgLeng').html(conLeng + " / ");
+		$('#limitLeng').html("2000");
+		$('.msg_com').html("장문");
+		$('#msgType').val("6"); // 메세지 타입 설정
+		
+		$('.msg_com').removeClass("msg_short"); //단문 클래스 삭제하고
+		$('.put_left').removeClass("short"); //내용 입력 박스 클래스 삭제
+		$('.msg_com').addClass("msg_long"); // 장문 클래스 삽입
+		$("#subMsgType").val("LMS");
+		
+	}else{
+		
+		$('#msgLeng').html(conLeng + " / ");
+		$('#limitLeng').html("90");
+		$('.msg_com').html("단문");
+		$('#msgType').val("4"); // 메세지 타입 설정
+		$('.msg_com').removeClass("msg_long"); //단문 클래스 삭제하고
+		$('.put_left').removeClass("long"); //내용 입력 박스 클래스 삭제
+		$('.msg_com').addClass("msg_short"); // 장문 클래스 삽입
+		$("#subMsgType").val("SMS");
+		
+	}
+		
+}
+
+function msgSuccessClose(obj){
+	$(obj).closest('.pop_msg_success').attr('style','');
+	location.reload(true);
+	$('html').scrollTop(0);
+}
+
+function getFtImageType(imgChk){
+	
+	if(imgChk == 'I' || imgChk == 'W'){
+		
+		var imgTitle = $("#imgTitle").val();
+		var imgLink = $("#imgLink").val();
+		var imgFileName = $("#imageFileName").val();
+		
+		if(imgTitle == ''){
+			
+			alert("친구톡 이미지 제목정보를 입력해 주세요.");
+			return false;
+			
+		}
+		
+		if(imgLink == ''){
+			
+			alert("친구톡 이미지 선택시 이동할 링크 주소를 입력해 주세요.");
+			return false;
+			
+		}
+		
+		if(imgFileName == ''){
+			
+			alert("친구톡 이미지를 등록해 주세요.");
+			return false;
+			
+		}
+		
+		$("#imageType").val(imgChk);
+		
+		//json 파일 필요 유무 셋팅
+		$("#bizJsonYn").val("Y");
+	}
+	
+	return true;
+	
+}
+
+
+function goToKakaoTestPopUp(){
+	
+	if(loginVO == "" || loginVO == null){
+		alert("테스트 발송 서비스는 로그인 후 이용 가능합니다.");
+		location.href="<c:url value='/web/user/login/login.do'/>";
+		return false;
+	}
+	
+	//기업회원 체크
+	if(!usrDeptChk()){
+		return false;
+	}
+	
+	var form = document.bizForm;
+	var senderKey = $("#selectAgentCode option:checked").val();
+	var yellowId = $("#selectAgentCode option:checked").text();
+	
+	if(senderKey == ''){
+		alert("채널ID를 선택해 주세요.");
+		return false;
+	}else{
+		$("#inputSenderKey").val(senderKey);
+		$("#yellowId").val(yellowId);
+	}
+	
+	var imgChk = $("input[name=img_file_add]:checked").val();
+	if(!getFtImageType(imgChk)){
+		return false;
+	}
+	
+	//템플릿 버튼 갯수 체크 
+	var buttonCnt = $(".btn_kakao_type").length;
+
+	if(buttonCnt > 0){
+		//json 파일 필요 유무 셋팅
+		$("#bizJsonYn").val("Y");
+	}
+	
+	//친구톡 내용 체크
+	var tmpContents = $('#inputTemplateContent').val();
+
+	if(tmpContents == ""){
+		
+		alert("친구톡 내용을 입력해 주세요.");
+		return false;
+		
+	}else{
+		
+		//템플릿 내용 입력
+		$("#templateContent").val(tmpContents);
+		
+	}
+	
+	var rtnStr = strChinJpnCheck(tmpContents);
+	
+	//문자내용에 이모지가 있는지 체크
+	if(!emojiCheck(tmpContents)) return false;
+	
+	if(rtnStr.length > 0){
+		
+		alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다.");
+		
+	}
+	
+	
+	var selectedData = tableL.getRows();
+	
+	if(selectedData == "" || selectedData == null){
+		
+		alert("받는사람 주소를 한 건 이상 입력해주세요.");
+		return false;
+	
+	}else{
+		
+		//치환문구 변환 
+		var txtReplYn = $("#txtReplYn").val();
+		
+		if(txtReplYn == 'Y'){
+			
+			var name = tableL.getRows()[0].getData().name;
+			var phone = removeDash(tableL.getRows()[0].getData().phone);
+			var rep1 = tableL.getRows()[0].getData().rep1;
+			var rep2 = tableL.getRows()[0].getData().rep2;
+			var rep3 = tableL.getRows()[0].getData().rep3;
+			var rep4 = tableL.getRows()[0].getData().rep4;
+			
+			var varValList = [];		//치환문자 연결시킬 변수 셋팅
+			
+			
+			var nmStatus = false;
+			var rep1Status = false;
+			var rep2Status = false;
+			var rep3Status = false;
+			var rep4Status = false;
+			
+			var varValStr = "";
+			var varValStatus = true;
+
+			
+			if(tmpContents.indexOf("\#{이름}")  > -1){
+				nmStatus = true;
+			}
+			
+			if(tmpContents.indexOf("\#{1}")  > -1){
+				rep1Status = true;
+			}
+			
+			if(tmpContents.indexOf("\#{2}")  > -1){
+				rep2Status = true;
+			}
+			
+			if(tmpContents.indexOf("\#{3}")  > -1){
+				rep3Status = true;
+			}
+			
+			if(tmpContents.indexOf("\#{4}")  > -1){
+				rep4Status = true;
+			}
+			
+	
+			if(nmStatus && (typeof(name) != 'undefined' && name != null && name !="")){
+				
+				if(varValStr == ''){
+					varValStr = name.replaceAll(",","§");
+				}else{
+					varValStr = varValStr + "¶" +  name.replaceAll(",","§");
+				}
+				
+			}else{
+				
+				if(nmStatus){
+					varValStatus = false;
+				}
+				
+			}
+			
+			if(varValStr == ''){
+				varValStr = phone;
+			}else{
+				varValStr = varValStr + "¶" +  phone;
+			}
+
+			if(rep1Status && (typeof(rep1) != 'undefined' && rep1 != null && rep1 !="")){
+				
+				if(varValStr == ''){
+					varValStr = rep1.replaceAll(",","§");
+				}else{
+					varValStr = varValStr + "¶" +  rep1.replaceAll(",","§");
+				}
+				
+			}else{
+				
+				if(rep1Status){
+					varValStatus = false;
+				}
+				
+			}
+			
+			
+			if(rep2Status && (typeof(rep2) != 'undefined' && rep2 != null && rep2 !="")){
+			
+				if(varValStr == ''){
+					varValStr = rep2.replaceAll(",","§");
+				}else{
+					varValStr = varValStr + "¶" +  rep2.replaceAll(",","§");
+				}
+				
+			}else{
+				
+				if(rep2Status){
+					varValStatus = false;
+				}
+				
+			}
+			
+			if(rep3Status && (typeof(rep3) != 'undefined' && rep3 != null && rep3 !="")){
+				
+				if(varValStr == ''){
+					varValStr = rep3.replaceAll(",","§");
+				}else{
+					varValStr = varValStr + "¶" +  rep3.replaceAll(",","§");
+				}
+				
+			}else{
+				
+				if(rep3Status){
+					varValStatus = false;
+				}
+				
+			}
+			
+			if(rep4Status && (typeof(rep4) != 'undefined' && rep4 != null && rep4 !="")){
+				
+				if(varValStr == ''){
+					varValStr = rep4.replaceAll(",","§");
+				}else{
+					varValStr = varValStr + "¶" +  rep4.replaceAll(",","§");
+				}
+			
+			}else{
+				
+				if(rep4Status){
+					varValStatus = false;
+				}
+				
+			}
+			
+			if(!varValStatus){
+				
+				alert("특정문구 일괄변환에 대한 일부 데이터가 누락된 부분이 있습니다. 데이터를 확인해 주세요.");
+				return false;
+				
+			}
+			
+			varValList[0] = varValStr;
+			
+			$("#varValList").val(varValList);
+		}
+		
+	}
+
+	form.method = "post"; 
+	window.open("about:blank", 'testSendPop', 'width=770, height=850, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
+	form.target = "testSendPop";
+	form.action = "/web/mjon/kakao/friendstalk/selectKakaoFriendsTalkTestSendPopup.do";
+	form.submit();
+}
+
+
+function msgResultLink(){
+	var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
+	if(reserYn == 'Y'){
+		
+		location.href="/web/mjon/reservmsg/selectReservKaKaoView.do";
+		
+	}else{
+		location.href="/web/kakao/sent/selectKakaoSentView.do";
+	}
+}
+
 </script>
 
 <!-- 로딩바 -->
@@ -365,11 +1705,62 @@
 				<h2>친구톡 전송</h2>
 				<button type="button" class="button info">친구톡 사용방법</button>
 			</div>
+			
+			<!-- 유저 보유잔액 -->
+			<input type="hidden" id="oriUserMoney" value="<c:out value='${userMoney}' />">
+			
+			<!-- 각 금액 단가  -->
+			<input type="hidden" id="kakaoFtPrice" value="<c:out value='${sendPrice.kakaoFtPrice}' />"> <!-- 친구톡 단가  -->
+			<input type="hidden" id="longPrice" value="<c:out value='${sendPrice.longPrice}' />"> <!-- mms 단가  -->
+			<input type="hidden" id="shortPrice" value="<c:out value='${sendPrice.shortPrice}' />"> <!-- sms 단가  -->
+			
 			<form id="bizForm" name="bizForm" method="multipart/form-data">
-				<input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf">
-				<input type="hidden" id="imageType" name="imageType" value=""/>
-				<input type="hidden" id="inputSenderKey" name="senderKey" value=""/>
-				<input type="hidden" id="templateImageUrl" name="templateImageUrl" value="">
+				<input type="hidden" id="menuTopTab" name="menuTopTab" value="tabFriend">
+				<input type="hidden" id="imageType" name="imageType" value="<c:out value='${resultTemplateVO.imageType}'/>"/>
+				<input type="hidden" id="inputSenderKey" name="senderKey" value="<c:out value='${resultTemplateVO.senderKey}'/>"/>
+				<input type="hidden" id="imageFileName" name="imageFileName" value="<c:out value='${resultTemplateVO.imageFileName}'/>">
+				<input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${resultTemplateVO.templateImageUrl}'/>">
+				<input type="hidden" id="tmpFriendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>">
+				<input type="hidden" id="templateName" name="templateName" value=""/>
+				<input type="hidden" id="adFlag" name="adFlag" value="N"/>
+				<input type="hidden" id="templateContent" name="templateContent" value=""/>
+				
+				<!-- 예약발송 여부 -->
+				<input type="hidden" id="reserveYn" name="reserveYn" value="N"/>
+				<input type="hidden" id="reqDate" name="reqDate" value=""/>
+				
+				<!-- 변환문자 유무 -->
+				<input type="hidden" id="txtReplYn" name="txtReplYn" value="N"/>
+				<input type="hidden" id="varValList" name="varValList" value=""/>
+				
+				<!-- 수신목록 -->
+				<input type="hidden" id="callToList" name="callToList" value=""/>
+				
+				<!-- 스팸 문구 유무 -->
+				<input type="hidden" id="spamStatus" name="spamStatus" value="N"/>
+				<input type="hidden" id="atSmishingYn" name="atSmishingYn" value="<c:out value='${atSmishingYn}' />"/>
+				
+				<!-- 오류 체크 -->
+				<input type="hidden" id="errorChk" name="errorChk" value="N"/>
+				
+				<!-- 대체문자 여부 -->
+				<input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N"/>
+				<input type="hidden" id="subMsgType" name="subMsgType" value="SMS"/>
+				<input type="hidden" id="subMsgTxtReplYn" name="subMsgTxtReplYn" value="N"/>
+				<input type="hidden" id="subMsgTxt" name="subMsgTxt" value=""/>
+				
+				<!-- 발신번호정보 -->
+				<input type="hidden" id="callFrom" name="callFrom" value=""/>
+				
+				<!-- 친구톡 발송 단가 정보 -->
+				<input type="hidden" id="kakaoFtPrice" name="kakaoFtPrice" value="<c:out value='${sendPrice.kakaoFtPrice}' />"/>
+				<input type="hidden" id="eachPrice" name="eachPrice" value="0"/>
+				<input type="hidden" id="totPrice" name="totalPrice" value="0"/>
+				
+				<!-- 친구톡 발송 json 파일 필요 유무 -->
+				<input type="hidden" id="bizJsonYn" name="bizJsonYn" value="N"/>
+				
+				<input type="hidden" id="yellowId" name="yellowId" value=""/>
 				
 				
 				<div class="send_general friend_talk_wrap kakao_wrap">
@@ -383,22 +1774,29 @@
 								<tr>
 									<th>채널ID</th>
 									<td>
-										<label for="" class="채널ID 선택"></label>
+										<label for="selectAgentCode" class="채널ID 선택"></label>
 										<select class="select_gray_type" name="selectAgentCode" id="selectAgentCode" onchange="javascript:fnAgentCodeChg();">
 											<option value="">채널ID 선택</option>
 											<c:forEach var="kakaoProfileInfo" items="${resultProfileList}" varStatus="status">
-												<option value="${kakaoProfileInfo.senderKey}"><c:out value='${kakaoProfileInfo.yellowId}'/></option>
+												<option value="${kakaoProfileInfo.senderKey}" <c:if test="${kakaoProfileInfo.senderKey eq resultTemplateVO.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option>
 											</c:forEach>
 										</select>
 									</td>
 								</tr>
 								<tr>
+	                                <th>템플릿명</th>
+	                                <td>
+	                                    <input type="text" class="template_name" id="inputTemplateName" name="inputTemplateName" value="<c:out value='${resultTemplateVO.templateName}'/>" placeholder="템플릿명을 입력해주세요. (최대 50자)">
+	                                    <p class="template_name_cf">최대 50자, 템플릿 관리용</p>
+	                                </td>
+	                            </tr>
+								<tr>
 									<th>이미지 첨부</th>
 									<td>
 										<div class="img_sort_wrap">
-											<input type="radio" name="img_file_add" id="img_file_0" value="" checked> <label for="img_file_0">첨부안함</label>
-											<input type="radio" name="img_file_add" id="img_file_1" value="I"> <label for="img_file_1">이미지 첨부</label>
-											<input type="radio" name="img_file_add" id="img_file_2" value="W"> <label for="img_file_2">와이드 이미지 첨부</label>
+											<input type="radio" name="img_file_add" id="img_file_0" value="" <c:if test="${resultTemplateVO.imageType eq ''}">checked</c:if> > <label for="img_file_0">첨부안함</label>
+											<input type="radio" name="img_file_add" id="img_file_1" value="I" <c:if test="${resultTemplateVO.imageType eq 'I'}">checked</c:if> > <label for="img_file_1">이미지 첨부</label>
+											<input type="radio" name="img_file_add" id="img_file_2" value="W" <c:if test="${resultTemplateVO.imageType eq 'W'}">checked</c:if> > <label for="img_file_2">와이드 이미지 첨부</label>
 											<div class="img_add_info_wrap basic_img_add_wrap">
 												<p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p>
 												<ul class="info_text">
@@ -422,11 +1820,11 @@
 											<ul class="img_file_info_wrap">
 												<li>
 													<p>이미지 제목</p>
-													<input type="text" id="imgTitle" name="imgTitle" class="img_url" maxLength="50">
+													<input type="text" id="imgTitle" name="imgTitle" value="<c:out value='${resultTemplateVO.imgTitle}'/>" class="img_url" maxLength="50">
 												</li>
 												<li>
 													<p>이미지 클릭시 이동할 URL</p>
-													<input type="text" id="imgLink" name="imgLink" placeholder="http://" class="img_url" maxLength="1000">
+													<input type="text" id="imgLink" name="imgLink" value="<c:out value='${resultTemplateVO.imgLink}'/>" placeholder="http://" class="img_url" maxLength="1000">
 												</li>
 												<li>
 													<p class="file_name"  id="imgNm" name="imgNm">첨부파일 이미지</p>
@@ -443,21 +1841,20 @@
 								<tr>
 									<th>광고포함 여부</th>
 									<td>
-										<input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" checked><label for="ad_Y">광고성 정보 포함</label>
-										<input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N"><label for="ad_N">포함 안함</label>
+										<input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label>
+										<%-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N" <c:if test="${resultTemplateVO.adFlag eq 'N'}">checked</c:if> ><label for="ad_N">포함 안함</label> --%>
 									</td>
 								</tr>
 								<tr>
 									<th>내용</th>
 									<td class="kakao_template_text">
 										<div class="put_left short">
-											<input type="text" class="template_name" placeholder="템플릿명을 입력해주세요. (최대 50자)">
 											<div class="put_text_wrap">
 												<div class="ad_txt">
 													<p><span id="adFlagFront">(광고)</span> <span id="yellowIdCon" >채널ID</span></p>
 												</div>
 												<label for="inputTemplateContent" class="label"></label>
-												<textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."></textarea>
+												<textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."><c:out value="${resultTemplateVO.templateContent}"/></textarea>
 												<div class="text_length">
 													<div>
 														<p class="adFlagAfter">수신거부 : 홈 > 채널차단</p>
@@ -563,7 +1960,7 @@
 															<p>주소록, 엑셀에 입력된 내용을 이용해 수신자마다 다른 내용의 메시지를 발송하는 기능</p>
 														</div>
 														<div class="convers_middle">
-															<a href="#"><c:out value="\#{이름}"/></a>
+															<a href="javascript:void(0)" class="changeWord" value="\#{이름}"><c:out value="\#{이름}"/></a>
 														</div>
 														<div class="convers_bottom">
 															<a href="javascript:void(0)" class="changeWord" value="\#{1}"><c:out value="\#{1}"/></a>
@@ -578,134 +1975,30 @@
 											<div class="btn_popup_wrap spc_wrap">
 												<button type="button" class="btnType btnType7" onclick="miniPopup(this)">이모티콘</button>
 												<div class="send_miniPop spc_character kakao_emoticon">
-													<div class="cnt_character">
-														<div class="box_character">
-															<a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
-															<a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
-														</div>
-													</div>
+													<%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
 													<button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
 												</div>
 											</div>
 											<div class="btn_popup_wrap template_call_wrap">
-												<button type="button" class="btnType btnType8">템플릿 불러오기</button>
+												<c:choose>
+													<c:when test="${not empty loginVO.id}">
+														<button type="button" class="btnType btnType8" onclick="window.open('/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do','_blank','width=930, height=780, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')">템플릿 불러오기</button>
+													</c:when>
+													<c:otherwise>
+														<button type="button" class="btnType btnType8" onclick="javascript:fnEmptyId();">템플릿 불러오기</button>
+													</c:otherwise>
+												</c:choose>
 											</div>
 											<div class="send_btnWrap">
-												<button type="button" class="btnType btn_text_save">내용 저장하기</button>
+												<c:choose>
+													<c:when test="${not empty loginVO.id}">
+														<button type="button" class="btnType btn_text_save" onclick="javascript:myTemplateSave();">내용 저장하기</button>
+													</c:when>
+													<c:otherwise>
+														<button type="button" class="btnType btn_text_save" onclick="javascript:fnEmptyId();">내용 저장하기</button>
+													</c:otherwise>
+												</c:choose>
+												
 												<button type="button" class="btnType btnType9" onclick="javascript:fnContentsReset();">초기화</button>
 											</div>
 										</div>
@@ -714,7 +2007,7 @@
 								<tr>
 									<th>버튼</th>
 									<td class="template_button">
-										<select name="" id="" class="select_gray_type template_button_select">
+										<select name="tmpBtnSelect" id="tmpBtnSelect" class="select_gray_type template_button_select">
 											<option value="button_type_0">버튼타입 선택</option>
 											<option value="button_type_1">배송조회</option>
 											<option value="button_type_2">웹링크</option>
@@ -726,7 +2019,132 @@
 											<span class="c_e40000 fwBold">*</span> 버튼 타입중 <span class="c_e40000">봇키워드, 메시지전달</span>은 <span class="c_222">카카오톡 채널 관리자센터(https://center-pf.kakao.com)</span>에서 설정을 직접 한 후 이용하셔야 동작합니다. (최대 5개까지 등록가능)
 										</p>
 										<div class="button_add_wrap">
-										</div>
+	                                    	<c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
+	                                    	
+	                                    		<c:if test="${buttonList.linkType eq 'DS'}">
+	                                    			<!-- 배송조회 버튼  -->
+			                                    	<dl class="button_type_wrap type1">
+				                                    	<dt>배송조회</dt>
+				                                    	<dd class="button_type_input">
+				                                    		<input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/>
+				                                    		<input type="text" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+				                                    		<p class="cf_text">*이용가능 택배사 : KG로지스, 우체국택배,일양로지스, GTX로지스, FedEx, 경동택배, 합동택배, 롯데택배</p>
+				                                    	</dd>
+				                                    	<dd>
+				                                    		<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+				                                    	</dd>
+			                                    	</dl>
+	                                    		</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'WL'}">
+			                                    	<!-- 웹링크 버튼 -->
+			                                    	<dl class="button_type_wrap type2">
+			                                    		<dt>웹링크</dt>
+			                                    		<dd class="button_type_input">
+			                                    			<ul>
+			                                    				<li>
+			                                    					<input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/>
+			                                    					<input type="text" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>" placeholder="모바일 링크 입력">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>" placeholder="PC 링크 입력">
+			                                    				</li>
+			                                    			</ul>
+			                                    		</dd>
+			                                    		<dd>
+			                                    			<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+			                                    		</dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'AL'}">
+			                                    	<!-- 앱링크 버튼 -->
+			                                    	<dl class="button_type_wrap type3">
+			                                    		<dt>앱링크</dt>
+			                                    		<dd class="button_type_input">
+			                                    			<ul>
+			                                    				<li>
+			                                    					<input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/>
+			                                    					<input type="text" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>" placeholder="Android 링크 입력">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>" placeholder="IOS 링크 입력">
+			                                    				</li>
+			                                    			</ul>
+			                                    		</dd>
+			                                    		<dd>
+			                                    			<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+			                                    		</dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'BK'}">
+			                                    	<!-- 봇키워드 -->
+			                                    	<dl class="button_type_wrap type4">
+			                                    		<dt>봇키워드</dt>
+		                                    			<dd class="button_type_input">
+		                                    				<input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/>
+		                                    				<input type="text" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+		                                    			</dd>
+		                                    			<dd><button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button></dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'MD'}">
+			                                    	<!-- 메시지 전달 -->
+			                                    	<dl class="button_type_wrap type5">
+													   <dt>메시지전달</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" />
+													      <input type="text" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button>
+													   </dd>
+													</dl>
+												</c:if>	                                    	
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'BC'}">
+			                                    	<!-- 상담톡 전환 -->
+													<dl class="button_type_wrap type6">
+													   <dt>상담톡전환</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" />
+													      <input type="text" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button>
+													   </dd>
+													</dl>
+												</c:if>
+												
+												<c:if test="${buttonList.linkType eq 'BT'}">
+													<!-- 챗봇전환 -->
+													<dl class="button_type_wrap type7">
+													   <dt>챗봇전환</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" />
+													      <input type="text" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button>
+													   </dd>
+													</dl>
+												</c:if>
+											</c:forEach>
+	                                    </div>
 									</td>
 								</tr>
 								<tr>
@@ -734,35 +2152,35 @@
 									<td class="putText">
 										<div class="clearfix receipt_num">
 											<div class="receipt_num_top">
-												<label for="" class="label">받는 번호입력</label>
-												<input type="text" placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;">
-												<button type="button" class="btnType btnType6">번호추가</button>
+												<label for="callTo" class="label">받는 번호입력</label>
+												<input type="text" placeholder="번호를 입력하세요" id="callTo" name="callTo" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;">
+												<button type="button" class="btnType btnType6 addCallToF">번호추가</button>
 												<span><span class="vMiddle">*</span> 중복번호는 한번만 발송됩니다.</span>
 											</div>
 											<div class="receipt_num_midde">
-												<div class="listType list01">
+												<div class="listType list01 callList_box"  id="callList_box">
 													<div class="list_table list_head">
 														<div class="cb_wrap">
-															<label for="" class="label"></label>
+															<label for="select_all" class="label"></label>
 															<input type="checkbox" id="select_all">
 														</div>
 														<div class="list_table_num">
 															<p>휴대폰</p>
-															<!-- <img src="/publish/images/sortUp.png">
-															<img src="/publish/images/sortDown.png"> -->
+															<img src="/publish/images/sortUp.png">
+															<img src="/publish/images/sortDown.png">
 														</div>
-														<!-- <div class="list_table_name">
+														<div class="list_table_name">
 															<p>이름</p>
 															<img src="/publish/images/sortUp.png">
 															<img src="/publish/images/sortDown.png">
-														</div> -->
+														</div>
 													</div>
 													<div class="list_body_wrap" id="wrap01_body">
 													</div>
 												</div>
 												<div class="put_right">
 													<div class="btn_popup_wrap spc_wrap">
-														<button type="button" data-tooltip="popup06" class="btnType btnType7">주소록 불러오기</button>
+														<button type="button" data-tooltip="popup06" class="btnType btnType7 popupAddr">주소록 불러오기</button>
 													</div>
 													<div class="btn_popup_wrap">
 														<button type="button" data-tooltip="popup02" class="btnType btnType7">엑셀 불러오기</button>
@@ -774,18 +2192,18 @@
 														<button type="button" data-tooltip="popup03" class="btnType btnType7 tab2">자주보내는 번호</button>
 													</div>
 													<div class="btn_popup_wrap check_validity_wrap">
-														<button type="button" class="btnType btnType7">오류 검사<i class="qmMark error_qm"></i></button>
+														<button type="button" class="btnType btnType7 check_validity">오류 검사<i class="qmMark error_qm"></i></button>
 														<div class="error_hover_cont send_hover_cont">
-															<p>등록하신 전화번호(형식 등)가 정확하게 입력되었는지 오류여부를 자동으로 검사할 수 있습니다.</p>
-															<span>(예시) 010-1234-0001(O),<br> 010-123-0001(X)</span>
+															<p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p>
+															<span>(예시) 010-1234-0001(O) / 010-12345-0001(X)</span>
 														</div>
 													</div>
 												</div>
 											</div>
 											<div class="list_bottom clearfix">
 												<div class="remove_btnWrap">
-													<button type="button" class="btnType15" id="all_del"><i class="remove_img"></i>전체삭제</button>
-													<button type="button" class="btnType15" id="select_del"><i class="remove_img"></i>선택삭제</button>
+													<button type="button" class="btnType15 all_del"><i class="remove_img"></i>전체삭제</button>
+													<button type="button" class="btnType15 select_del"><i class="remove_img"></i>선택삭제</button>
 												</div>
 												<div class="list_bottom_right">
 													<p>총 <span class="c_e40000" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a" id="rowDupCnt">0</span>건</p>
@@ -814,7 +2232,8 @@
 													<input type="radio" id="radio_bill_1" name="radio_bill" checked="checked">
 													<label for="radio_bill_1">보유잔액</label>
 													<label for="userMoney" class="label">보유잔액</label>
-													<input type="text" id="userMoney" name="userMoney" value="0" readonly="">
+													<fmt:formatNumber type="number" maxFractionDigits="3" value="${sendPrice.userMoney}" var="commaPrice" />
+													<input type="text" id="userMoney" name="userMoney" value="<c:out value='${commaPrice}'/>" readonly="">
 													<span class="won">원</span>
 													<button type="button" class="btnType btnType21" onclick="location.href='/web/member/pay/PayView.do'">충전</button>
 												</div>
@@ -826,7 +2245,8 @@
 								<tr>
 									<th colspan="2" class="replace_send_th">
 										<div class="title_th"><p>대체문자</p> 
-											<input type="checkbox" id="send_fail_check" class="send_fail_check"><label for="send_fail_check">친구톡 전송 실패 시 문자 전송</label>
+											<input type="checkbox" id="send_fail_check" name="send_fail_check" class="send_fail_check">
+											<label for="send_fail_check">친구톡 전송 실패 시 문자 전송</label>
 										</div>
 										<div class="replace_send_wrap">
 											<table class="tType1">
@@ -838,7 +2258,7 @@
 													<tr>
 														<th>발신번호</th>
 														<td>
-															<label for="callFrom" class="label"></label>
+															<label for="callFromList" class="label"></label>
 															<select id="callFromList" name="callFromList" class="sel_number">
 																<c:choose>
 																	<c:when test="${not empty resultPhonList}">
@@ -870,7 +2290,7 @@
 																				<span class="fwMd" id="msgLeng">0 /</span>
 																				<span class="c_002c9a fwMd" id="limitLeng">90</span>byte
 																			</p>
-																			<spanclass="msg_com msg_short">단문</span>
+																			<span class="msg_com msg_short">단문</span>
 																		</div>
 																	</div>
 																</div>
@@ -879,7 +2299,6 @@
 																	<button type="button" class="btnType btnType7" onclick="javascript:fn_errorChk(); return false;">오류검사<i class="qmMark"></i></button>
 																</div>
 															</div>
-															<p>* 현재 [<span id="nowMsgType">단문</span>] <span class="c_e40000 fwBold nowMsgCnt">0</span>건 발송 가능합니다.</p>
 														</td>
 													</tr>
 												</tbody>
@@ -891,7 +2310,7 @@
 						</table>
 					</div>
 					<div class="send_right">
-						<div class="phone">
+						<div class="phone" style="top: 201px;">
 							<div class="phoneIn">
 								<p class="prev_p">
 									<img src="/publish/images/content/kakao_prev_icon.png" alt="">
@@ -909,7 +2328,9 @@
 										</div>
 										<p class="template_text">내용 미리보기</p>
 										<div class="btnViewArea">
-											<button type="button" class="btn_kakao_type"  style="display:none;">문자온 바로가기</button>
+											<c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
+	                                    		<button type="button" class="btn_kakao_type btnEmpty"  style="display:block;"><c:out value="${buttonList.name}"/></button>
+	                                    	</c:forEach>
 										</div>
 									</div>
 									<p class="kakao_block_text">수신거부 : 홈 > 채널차단</p>
@@ -932,20 +2353,28 @@
 										</ul>
 									</div>
 									<div class="send_btn">
-										<button type="button" class="btnType btnType11" onclick="javascript:fn_sendMsgData(); return false;">발송하기</button>
-										<button type="button" class="btnType btnType10" onclick="javascript:fnTestSend(); return false;">테스트발송</button>
+									<%-- 친구톡 발송시간 체크 하기 - 20:50 ~ 익일 08:00 사이에는 발송 금지 --%>
+										<c:choose>
+											<c:when test="${sendStatus eq 'true'}">
+												<button type="button" class="btnType btnType11" onclick="javascript:fn_sendMsgData(); return false;">발송하기</button>
+											</c:when>
+											<c:otherwise>
+												<button type="button" class="btnType btnType11" onclick="javascript:fn_noTimeSend(); return false;">발송하기</button>
+											</c:otherwise>
+										</c:choose>
+										<button type="button" class="btnType btnType10"  onclick="javascript:goToKakaoTestPopUp(); return false;">테스트발송</button>
 									</div>
 								</div>
-								<div class="rev_selected">
+								<div class="rev_selected" >
 									<div class="rev_top">
 										<span>날짜 :</span>
 										<div class="calendar_wrap">
 											<input type="text" class="startDate2 inp resDate calendar picker__input picker__input--active" title="검색 시작일" id="startDate2" name="startDate2" value="" data-datecontrol="true" readonly="" aria-haspopup="true" aria-expanded="true" aria-readonly="false" aria-owns="startDate2_root">
 										</div>
 										<div class="selBox">
-											<label for="" class="label">시 선택</label>
+											<label for="msgResHour" class="label">시 선택</label>
 											<select class="selType1" id="msgResHour" name="msgResHour">
-												<c:forEach  var="hour"  begin="0" end="23" step="1" varStatus="status">
+												<c:forEach  var="hour"  begin="8" end="20" step="1" varStatus="status">
 													<c:choose>
 														<c:when test="${hour < 10}">
 															<option value="0${hour}">0${hour}시</option>
@@ -956,9 +2385,9 @@
 													</c:choose>
 												</c:forEach>
 											</select>
-											<label for="" class="label">분 선택</label>
-											<select class="selType1" id="msgResMin" name="msgResMin">
-												<c:forEach var="min" begin="0" end="55" step="5">
+											<label for="msgResMin" class="label">분 선택</label>
+											<select class="selType1" id="msgResMin" name="msgResMin" onChange="fnSelectMinChk();">
+												<c:forEach var="min" begin="0" end="59" step="1">
 													<c:choose>
 														<c:when test="${min < 10}">
 															<option value="0${min}">0${min}분</option>
@@ -971,15 +2400,10 @@
 											</select>
 										</div>
 									</div>
-									<div class="rev_bottom">
+									<%-- <div class="rev_bottom">
 										<input type="checkbox" id="inputDivideChk" name="inputDivideChk">
-										<label for="">분할전송</label>
-										<select class="selType1" id="divideCnt" name="divideCnt">
-					 						<option value="2">2</option>
-					 						<option value="10">10</option>
-					 						<option value="20">20</option>
-					 						<option value="30">30</option>
-					 					</select>
+										<label for="inputDivideChk">분할전송</label>
+										<input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/>
 										<label for="divideCnt">건</label>
 										<select class="selType1" id="divideTime" name="divideTime">
 					 						<option value="5">05분</option>
@@ -989,7 +2413,7 @@
 					 						<option value="30">30분</option>
 					 					</select>
 					 					<label for="divideTime">간격</label>
-									</div>
+									</div> --%>
 								</div>
 							</div>
 						</div>
@@ -998,4 +2422,128 @@
 			</form>
 		</div>
 	</div>
-</div>
(No newline at end of file)
+</div>
+
+<!-- 문자발송 성공 레이어팝업 -->
+<div class="tooltip-wrap">
+	<div class="popup-com pop_msg_success">
+		<div class="popup_heading">
+			<p>친구톡 전송 결과</p>
+			<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+		</div>
+		<div class="layer_in">
+			<div class="msg_text">발송 성공 : <strong>1</strong> 건,수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div>
+		</div>
+		<div class="popup_btn">
+			<button type="button" onclick="msgResultLink(); return false;">친구톡 발송결과 바로가기</button>
+			<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);">확인</button>
+		</div>
+	</div>
+</div>
+
+<!-- 주소록 불러오기 -->
+<div class="tooltip-wrap">
+	<div class="popup-com import_layer popup06" tabindex="0" data-tooltip-con="popup06" data-focus="popup06" data-focus-prev="popup06-close" style="width: 1000px">
+		<div class="popup_heading">
+			<p><span>주소록 불러오기</p>
+			<button type="button" onClick="javascript:addrClose(); return false;">
+			<img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+		</div>
+		<div class="layer_in">
+			<div class="titBox titBox_pad">
+				<p>- 주소록 수정 및 변경은 <span>[주소록 관리]</span>에서만 가능합니다.</p>
+				<button type="button" class="adr_admin" onClick="location.href='/web/mjon/addr/selectAddrList.do'">주소록 관리</button>
+			</div>
+			<div class="adr_wrap">
+				<form id="searchAddrGrpForm" name="searchAddrGrpForm" method="post" style="display: flex; justify-content: space-between;">
+					<input type="hidden" id="searchAddrGrpId" name="searchAddrGrpId" value=""/>
+					<input type="hidden" id="type" name="type" value="all"/>
+					<input type="hidden" id="searchKeyword" name="searchKeyword" value=""/>
+					<input type="hidden" name="searchCondition" id="searchCondition" value="0" />
+					<div class="adr_pop_left">
+						<div class="adr_left_search">
+							<label for="searchGrpKeyword" class="label">그룹명 검색</label>
+							<input type="text" name="searchGrpKeyword" id="searchGrpKeyword"  placeholder="그룹명 검색" onfocus="this.placeholder=''" onblur="this.placeholder='그룹명 검색'" class="inputLight">
+							<button type="button" onClick="javascrit:fnAddrGrpSearch(); return false;"><img src="/publish/images/popup/search.png" alt="검색"></button>
+						</div>
+						<div class="adr_pop_box">
+							<div id="addrGroupLoad">
+							</div>
+						</div>
+						<!-- <div class="popup_btn">
+							<button type="button" class="btnType" onClick="javascript:fnSelectAddrGrpList(); return false;">선택 그룹 추가</button>
+						</div> -->
+					</div>
+					<div class="adr_pop_right">
+						<div class="clearfix">
+							<div class="btnWrap_last">
+								<label for="searchAddrCondition" class="label">카테고리 선택</label>
+								<select id="searchAddrCondition" name="searchAddrCondition" class="selType2">
+									<option value='0'>전체</option>
+									<option value='1'>그룹명</option>
+									<option value='2'>이름</option>
+									<option value='3'>핸드폰번호</option>
+								</select>
+								<label for="searchAddrKeyword" class="label">검색어 입력</label>
+								<input type="text" id="searchAddrKeyword" name="searchAddrKeyword" placeholder="검색어를 입력하세요"  onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요'" >
+								<button type="button" class="btnType btnType17"  onClick="javascrit:fnAddrSearch(); return false;">검색</button>
+							</div>
+							<!-- table -->
+							<div class="adr_excel adr_pop_list2 callAddr_box">
+							</div>
+							<!--// table -->
+						</div>
+						<div class="popup_btn_wrap2">
+							<button type="button" onClick="javascript:addrToList(); return false;">추가</button>
+							<button type="button" onClick="javascript:addrClose(); return false;">닫기</button>
+						</div>
+						<%-- 주소록 레이어 팝업 닫기 실행 코드 --%>
+						<input type="hidden" name="btnAddrClose" id="btnAddrClose" class="tooltip-close closeAddr" data-focus="popup06-close" />         
+					</div>
+				</form>
+			</div>
+		</div>
+	</div>
+</div>
+<!--// 주소록 불러오기 -->
+
+<!-- 엑셀 불러오기 -->
+<form id="excelToolTipForm" name="excelToolTipForm" method="post">
+	<div class="tooltip-wrap">
+		<div class="popup-com import_layer popup02" tabindex="0" data-tooltip-con="popup02" data-focus="popup02" data-focus-prev="popup02-close">
+			<div class="popup_heading">
+				<p><span>엑셀</span> 불러오기</p>
+				<button type="button" class="tooltip-close" data-focus="popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in">
+				<!-- 엑셀파일 불러오기 -->
+				<div class="hascont">
+					<div class="titBox">
+						<p>- 최대 2만 건까지 등록할 수 있습니다.</p>
+						<p>- [엑셀 불러오기]시 문서의 A, B열을 불러옵니다.(지원하는 파일 형식 : xls, xlsx)</p>
+						<p>- 휴대폰 항목은 숫자, 하이픈(-)만 인식하며, 번호 앞에 0이 생략되어도 정상 등록됩니다.
+						</p>
+						<!-- <button type="button" class="excel_btn" onclick="location.href='/cmm/fms/FileDown.do?atchFileId=FILE_000000000011651&fileSn=1'"><i></i>샘플파일 다운로드</button> -->
+						<button type="button" class="excel_btn" onclick="location.href='/download/msg/엑셀주소록_등록양식.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button>
+					</div>
+					<div class="attachedFile">
+						<label for="excelNm" class="attachedFile_label">첨부파일</label>
+						<input type="text" id="excelNm" value="" readonly>
+						<input type="file" id="excelFile" accept=".xls, .xlsx" onchange="excelExport(event); return false;" style="display:none"/>
+						<button type="button" class="btnType btnType6 c1">찾아보기</button>
+<!-- 						<p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p> -->
+						<p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p>
+					</div>
+				</div><!--// 엑셀파일 불러오기 -->
+				<div class="popup_btn_wrap2">
+					<button type="button" class="tooltip-close" data-focus="popup02-close"  data-focus-next="popup02" id="excelAdd">추가</button>
+					<button type="button" class="tooltip-close" data-focus="popup02-close"  data-focus-next="popup02">닫기</button>                      
+				</div>
+			</div>
+		</div>
+	</div><!--// 엑셀 불러오기 -->
+</form>
+
+<form id="templateForm" name="templateForm" method="post">
+	<input type="hidden" id="friendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>"/>
+</form>
(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp
@@ -19,12 +19,33 @@
 					<div class="rev_pop_in">
 						<div class="rev_pop_middle clearfix">
 							<span><c:out value="${resultMsgDetail.reqDate }" /></span>
-							<span class="msg_com msg_allimtalk">알림톡</span>
+							<span class="msg_com msg_allimtalk">
+								<c:choose>
+									<c:when test="${msgType eq '8'}">
+										알림톡
+									</c:when>
+									<c:when test="${msgType eq '9'}">
+										친구톡
+									</c:when>
+									<c:otherwise>
+									</c:otherwise>
+								</c:choose>
+							</span>
 						</div>
 						<div class="rev_pop_txt">
 							<div class="text_preview">
 								<div class="allimtalk_title">
-									<img src="/publish/images/content/icon_allimtalk.png" alt="">알림톡 도착
+									<img src="/publish/images/content/icon_allimtalk.png" alt="">
+									<c:choose>
+										<c:when test="${msgType eq '8'}">
+											알림톡 도착
+										</c:when>
+										<c:when test="${msgType eq '9'}">
+											친구톡 도착
+										</c:when>
+										<c:otherwise>
+										</c:otherwise>
+									</c:choose>
 								</div>
 								<div class="allimtalk_content">
 										<!-- 강조 텍스트 --> 
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView.jsp
@@ -27,7 +27,7 @@
 	//이전달 첫날/마지막날 조회
 	if(date.getMonth()+1 == 1){
 		lastfulstday = date.getFullYear()-1 +  "/12" + "/01";
-		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
+		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+"";
 	}else{
 		lastfulstday = date.getFullYear() + "/" ; 
 		lastfulstday += date.getMonth() < 10  ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
@@ -946,7 +946,11 @@
 					<ul class="list_tab">
 						<li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
 						<li class="tab"><button type="button" onclick="fnTabLoad('at', 1); return false;">알림톡</button></li>
-						<!-- <li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li> -->
+						<c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') 
+				        || fn:contains(pageContext.request.requestURL , '192.168.0.33')
+				        || fn:contains(pageContext.request.requestURL , '119.193.215.98')}">
+							<li class="tab"><button type="button" onclick="fnTabLoad('ft', 2); return false;">친구톡</button></li>
+				        </c:if>
 					</ul><!--// tab button -->
 				</div>
 				<!-- 예약관리 > 전체 -->
src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateDetail.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateDetail.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateDetail.jsp
@@ -972,128 +972,8 @@
 	                                            <button type="button" class="btnType btnType7"
 	                                                onclick="miniPopup(this)">카카오 이모티콘</button>
 	                                            <div class="send_miniPop spc_character kakao_emoticon">
-	                                                <div class="cnt_character">
-	                                                    <div class="box_character">
-	                                                        <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
-	                                                    </div>
-	                                                </div>
-	                                                <button type="button" class="btn_close"
-	                                                    onclick="miniPopup(this)">닫기</button>
+	                                                <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
+	                                                <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
 	                                            </div>
 	                                        </div>
 	                                        <div class="send_btnWrap">
src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateRegist.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateRegist.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateRegist.jsp
@@ -886,128 +886,8 @@
 	                                            <button type="button" class="btnType btnType7"
 	                                                onclick="miniPopup(this)">카카오 이모티콘</button>
 	                                            <div class="send_miniPop spc_character kakao_emoticon">
-	                                                <div class="cnt_character">
-	                                                    <div class="box_character">
-	                                                        <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
-	                                                    </div>
-	                                                </div>
-	                                                <button type="button" class="btn_close"
-	                                                    onclick="miniPopup(this)">닫기</button>
+	                                                <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
+	                                                <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
 	                                            </div>
 	                                        </div>
 	                                        <div class="send_btnWrap">
src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateSampleToRegist.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateSampleToRegist.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/at/KakaoAlimtalkTemplateSampleToRegist.jsp
@@ -895,128 +895,8 @@
 	                                            <button type="button" class="btnType btnType7"
 	                                                onclick="miniPopup(this)">이모티콘</button>
 	                                            <div class="send_miniPop spc_character kakao_emoticon">
-	                                                <div class="cnt_character">
-	                                                    <div class="box_character">
-	                                                        <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
-								                                <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
-	                                                    </div>
-	                                                </div>
-	                                                <button type="button" class="btn_close"
-	                                                    onclick="miniPopup(this)">닫기</button>
+	                                                <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
+	                                                <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
 	                                            </div>
 	                                        </div>
 	                                        <div class="send_btnWrap">
 
src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateDetail.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateDetail.jsp
@@ -0,0 +1,1063 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
+<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+<script src="/js/MJUtill.js"></script>
+<script src="/js/kakao/templateComm.js"></script>
+<script type="text/javascript">
+
+/* 파일등록 */
+var _fileIdx = 0;
+var _fileForm2 = new Array();
+var fileExt = ""; // 첨부파일 확장자
+
+$(document).ready(function (){
+	
+	//화면 초기 로딩시 화면 처리해주기
+	initFormChk();
+
+	
+	//템플릿명 입력 글자수 체크 해주기
+	$("#inputTemplateName").keyup(function(e){
+		
+		var contents = $('#inputTemplateName').val();
+		var conLeng = strMaxCharacterCnt(contents);
+		
+		if(conLeng > 100){
+			
+			alert("템플릿명은 100자를 넘을 수 없습니다.");
+			var splicecon = strMaxLengthSubstring(contents, 99);
+			 $('#inputTemplateName').val(splicecon);
+			return false;
+			
+		}
+		
+	});
+	
+	//템플릿 내용 입력 글자수 체크 해주기
+	$("#inputTemplateContent").keyup(function(e){
+		
+		var contents = $('#inputTemplateContent').val();
+		setContentsLengForFriends(contents);
+		
+	});
+	
+	
+});
+
+
+function initFormChk(){
+	
+	//첫로딩시 우측 미리보기 화면 숨김처리
+	$('.emphasis_title_text').hide();	//강조유형 타이틀
+	$('.emphasis_side_text').hide();	//강조유형 보조문구
+	//$('.template_text').hide();			//내용 미리보기
+	$('.side_info_text').hide();		//부가정보 내용
+	$('.channel_info_text').hide();		//채널추가 텍스트 내용
+	$('.btnAd').hide();					//샘플 채널추가 버튼
+	$('.btnEmpty').hide();				//샘플 버튼
+	
+	//채널ID 정보 미리보기에 표시해주기
+	fnAgentCodeChg();
+	
+	//템플릿 등록 이미지가 있는 경우 이미지 정보 표시해 주기
+	var imgType = $("input[name=img_file_add]:checked").val();
+	
+	if(!imgType == ''){
+		
+		if($("input[name='img_file_add']:checked").attr("id")=="img_file_1"){
+			$(".basic_img_add_wrap").show().siblings(".img_add_info_wrap").hide();
+			$(".img_file_add_wrap").show();
+		}else if($("input[name='img_file_add']:checked").attr("id")=="img_file_2"){
+			$(".wide_img_add_wrap").show().siblings(".img_add_info_wrap").hide();
+			$(".img_file_add_wrap").show();
+		} else{
+			$(".img_add_info_wrap, .img_file_add_wrap").hide();
+		}
+		
+	}
+	var imageFileName = '${resultTemplateVO.imageFileName}';
+	$("#imgNm").text(imageFileName);
+	
+	//미리보기에 이미지 표시해주기
+	var imgUrl = '${resultTemplateVO.templateImageUrl}';
+	$('.kakao_image').css("display", "block");
+	$("#kakaoImg").attr("src", imgUrl);
+	
+	
+	//초기 템플릿 내용 글자수 처리해주기
+	var tmpContents = $('#inputTemplateContent').val();
+	setContentsLengForFriends(tmpContents);
+	
+	//초기 광고포함 여부 처리
+	var adFlagVal = $("input[name=ad_flag]:checked").val();
+	advTextChange(adFlagVal);
+	
+}
+
+//--------------첨부파일 처리 함수 시작--------------------------
+
+/* 파일사이즈 가져오기 */
+function getStrFileSize(filesize){
+	var sizeStr="";
+	var sizeKB = filesize/1024;
+	if(parseInt(sizeKB) > 1024){
+	    var sizeMB = sizeKB/1024;
+	    sizeStr = sizeMB.toFixed(2)+" MB";
+	}else{
+	    sizeStr = sizeKB.toFixed(2)+" KB";
+	}
+	return sizeStr;
+}
+
+//첨부 이미지 정보 확인 처리 해주기(이미지 리사이징 전단계)
+function imgResizeInfo(event){
+	
+	var fileValue = $("#imgFile").val().split("\\");
+	var fileName = fileValue[fileValue.length-1];
+	
+	var fileExt = fileName.split('.').pop().toLowerCase();
+
+	if(fileExt.length > 0){
+		if($.inArray(fileExt, ['jpg','jpeg','png']) == -1) {
+			alert('jpg, jpeg, png 파일만 업로드 할수 있습니다.');
+			return false;
+	   	}
+	   
+		$("#imgNm").text(fileName); 
+	}
+	
+	//알림톡 이미지 등록 요청하기
+	getTemplateImagUrl();
+}
+
+//파일첨부 버튼 클릭시 파일 첨부 실행
+function upImgClick(){
+	
+	var selectChennelID = $("select[name='selectAgentCode']").val();	//채널ID 정보
+	var imageType = $("input[name=img_file_add]:checked").val();		//이미지 종류 정보(일반, 와이드)
+	var title = $("#imgTitle").val();
+	var link = $("#imgLink").val();
+	
+	if(selectChennelID == ''){
+		
+		$("#imgNm").text("");
+		$("#imgFile").val("");
+		alert("채널ID를 선택해 주세요.");
+		return false;
+		
+	}
+	
+	if(imageType != ''){
+		
+		bizForm.imageType.value = imageType;
+		
+	}else{
+		
+		$("#imgNm").text("");
+		$("#imgFile").val("");
+		alert("이미지 종류를 선택해 주세요.");
+		return false;
+		
+	}
+	
+	if(title == ''){
+		
+		$("#imgNm").text("");
+		$("#imgFile").val("");
+		alert("이미지 제목을 입력해 주세요.");
+		return false;
+		
+	}
+	
+	//이미지 선택시 링크 정보 및 url 패턴 검사
+	if(link == ''){
+		
+		$("#imgNm").text("");
+		$("#imgFile").val("");
+		alert("이미지 클릭시 이동할 URL 주소를 http:// 또는 https:// 포함하여 입력해 주세요.");
+		return false;
+		
+	}else{
+		
+		if(link.search("http://") == -1 && link.search("https://") == -1){
+			
+			$("#imgNm").text("");
+			$("#imgFile").val("");
+			alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다.");
+			return false;
+			
+		}
+		
+	}
+	
+	//첨부파일 선택 팝업 호출해주기
+	$("#imgFile").click();
+	
+}
+
+//카카오 친구톡 이미지 등록 요청 API 호출해주기
+function getTemplateImagUrl(){
+	
+	var bizForm = document.bizForm;
+	
+	var data = new FormData(bizForm);
+	var atchFileSts = true;	//첨부파일 갯수 상태 값1
+	
+	data.append("file0", $('#imgFile').prop('files')[0]);
+	
+	var fileValue = $("#imgFile").val().split("\\");
+	var fileName = fileValue[fileValue.length-1];
+	
+	var fileExt = fileName.split('.').pop().toLowerCase();
+	
+	if($.inArray(fileExt, ['jpg','jpeg', 'png']) == -1) {
+
+		alert('jpg, jpeg 파일만 업로드 할수 있습니다.');
+		return false;
+
+   	}
+	
+	var url = "";
+	
+	if(fileExt == "jpg" || fileExt == "jpeg" || fileExt == "png"){
+		
+		url = "/web/mjon/kakao/template/sendKakaoFriendsTemplateImageUploadAjax.do";
+		
+	}else{
+		
+		alert('jpg, jpeg 파일만 업로드 할수 있습니다.');
+		return;
+		
+	}
+	
+	$.ajax({
+		type : 'POST'
+		, enctype : 'multipart/form-data'
+		, url : url
+		, data : data
+		, dataType:'json'
+		, async:true
+		, processData: false
+		, contentType: false
+		, cache : false
+		, success : function(returnData, status){
+			if(returnData.result == "success") {
+				
+				var code = returnData.code;
+				var msg = returnData.msg;
+				var imgUrl = returnData.imgUrl;
+				
+				if(code == "200"){//등록 성공시 메시지 및 이미지 표시 처리
+					alert("이미지 등록이 완료 되었습니다.");
+					$("#templateImageName").val(fileName);
+					$("#templateImageUrl").val(imgUrl);
+				
+					$('.kakao_image').css("display", "block");
+					$("#kakaoImg").attr("src", imgUrl);
+					$("#imageFileName").val(fileName);
+					
+				}else if(code == "2002"){//일반 이미지 가로 세로 크기 오류 발생
+					
+					alert("권장 이미지 사이즈는  가로 720px 세로 720px(가로:세로 비율이 2:1 아닐 경우, 가로 500px, 세로 250px 이하일 경우 업로드 불가), 최대용량 500KB 입니다.");
+					
+					//첨부파일 정보를 지워준다.
+					$("#imgFile").val("");
+				    $("#imgNm").text("");  
+					return false;
+					
+				}else if(code == "405"){
+					
+					alert("권장 이미지 사이즈는  가로 800px 세로 600px(가로:세로 비율이 2:1 아닐 경우, 가로 500px, 세로 250px 이하일 경우 업로드 불가), 최대용량 2MB 입니다.");
+					
+					//첨부파일 정보를 지워준다.
+					$("#imgFile").val("");
+				    $("#imgNm").text("");  
+					return false;
+					
+				}else{
+					
+					alert(msg);
+					
+					//첨부파일 정보를 지워준다.
+					$("#imgFile").val("");
+				    $("#imgNm").text(""); 
+					return false;
+				}
+				
+			}else if(returnData.result == "loginFail"){
+				location.href="/web/user/login/login.do";
+			}else{
+				alert("이미지 등록 중 오류가 발생하였습니다.!!!");
+				return false;
+			}
+		},
+		beforeSend : function(xmlHttpRequest) {
+        	//로딩창 show
+        	$('.loading_layer').addClass('active');				
+		},	        	        
+        complete : function(xhr, textStatus) {
+        	//로딩창 hide
+        	$('.loading_layer').removeClass('active');
+		},
+		error : function(request , status, error){
+			alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
+		}
+	});
+	
+	//첨부파일 이름 및 데이터 지워주기 - 완료 후 팝업이 자동으로 닫힘.
+	$("#imgFile").val("");
+    //$("#imgNm").val(""); 
+	
+}
+
+
+//발신 템플릿 등록
+function updateTemplate(){
+	
+	var selectAgentCode = $("select[name='selectAgentCode']").val();	// 선택 채널ID
+	var yellowId = $("select[name='selectAgentCode'] option:selected").text().replaceAll('@','');			// 선택 채널명
+	var inputTemplateName = $("#inputTemplateName").val();				// 입력 템플릿 이름
+	var imageType = $("input[name=img_file_add]:checked").val();		// 첨부 이미지 종류(없음, 일반, 와이드 이미지)
+	var imageTitle = $("#imgTitle").val();								//첨부이미지 제목
+	var imageLink = $("#imgLink").val();								//첨부이미지 클릭시 이동 링크 주소
+	var inputTemplateAd = $("input[name=ad_flag]:checked").val();	// 광고성메시지 선택 여부
+	var inputTemplateContent = $("#inputTemplateContent").val();		// 템플릿 내용
+	
+	var inputTemplateImageName = $("#templateImageName").val();	// 템플릿 이미지 파일명
+	var inputTemplateImageUrl = $("#templateImageUrl").val();		// 템플릿 이미지 링크
+	
+	// 공통 유효성 검사 조회
+	if(selectAgentCode == null || selectAgentCode == ""){
+		alert("채널ID를 선택해 주세요");
+		return;
+	};
+	
+	if(inputTemplateName == null || inputTemplateName == ""){
+		alert("템플릿 명을 입력해 주세요");
+		$("#inputTemplateName").focus();
+		return;
+	};
+	
+	if(imageType == 'I' || imageType == 'W'){
+		
+		if(imageTitle == ''){
+			
+			alert("이미지 제목을 입력해 주세요.");
+			return false;
+			
+		}
+		
+		if(imageLink == ''){
+			
+			alert("이미지 클릭시 이동할 URL을 입력해 주세요.");
+			return false;
+			
+		}else{
+			
+			if(imageLink.search("http://") == -1 && imageLink.search("https://") == -1){
+				
+				alert("이미지 URL 주소에는 http:// 또는 https://를 포함하여 입력해야 합니다.");
+				return false;
+				
+			}
+			
+		}
+		
+		if(inputTemplateImageUrl == ''){
+			
+			alert("이미지를 선택해 주세요.");
+			return false;
+			
+		}
+		
+	}
+	
+	
+	if(inputTemplateContent == null || inputTemplateContent == ""){
+		alert("템플릿 내용을 입력해 주세요.");
+		return;
+	};
+	
+	
+	
+	var bizForm = document.bizForm;
+	bizForm.senderKey.value = selectAgentCode;
+	bizForm.yellowId.value = yellowId;
+	bizForm.templateName.value = inputTemplateName;
+	bizForm.imageType.value = imageType;
+	bizForm.imgTitle.value = imageTitle
+	bizForm.imgLink.value = imageLink
+	bizForm.adFlag.value = inputTemplateAd;
+	bizForm.templateContent.value = inputTemplateContent;
+	
+	var data = new FormData(bizForm);
+	
+	if(confirm("템플릿을 수정하시겠습니까?")){
+		
+		$.ajax({
+			type: "POST"
+			, url: "/web/mjon/kakao/template/updateKakaoFriendsTemplateDataAjax.do"
+			, data: data
+			, dataType: 'json'
+			, async: false
+			, processData: false
+			, contentType: false
+			, cache: false
+			, success: function (returnData, status) {
+				
+				var result = returnData.result;
+				
+				if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
+					alert("로그인후 진행이 가능합니다.");
+				}else if(returnData.result == "success") {
+					alert("템플릿 수정이 완료되었습니다.");
+					//location.href="/web/mjon/kakao/template/selectKakaoFriendsTemplateList.do";
+					//return false;
+					location.reload();
+				}else{
+					
+					alert("템플릿 수정에 오류가 발생하였습니다.");
+					return false;
+					
+				}
+			}
+			,error: function (e) {
+				console.log("ERROR : ", e);
+				alert("템플릿 수정에 오류가 발생하였습니다.");
+			}
+		});
+		
+	}
+	
+}
+
+function fnImageDel(){
+	
+	var selectAgentCode = $("select[name='selectAgentCode']").val();	// 선택 채널ID
+	var imageUrl = $("#templateImageUrl").val();
+	var bizForm = document.bizForm;
+	
+	bizForm.senderKey.value = selectAgentCode;
+	
+	if(imageUrl == ''){
+		
+		alert("등록된 이미지가 없습니다.");
+		return false;
+		
+	}
+	
+	var data = new FormData(bizForm);
+	
+	if(confirm("등록된 이미지를 삭제하시겠습니까?")){
+		
+		$.ajax({
+			type: "POST"
+			, url: "/web/mjon/kakao/template/deleteKakaoFriendsImageDataAjax.do"
+			, data: data
+			, dataType: 'json'
+			, async: false
+			, processData: false
+			, contentType: false
+			, cache: false
+			, success: function (returnData, status) {
+				
+				var result = returnData.result;
+				var code = returnData.code;
+				var msg = returnData.msg;
+				
+				if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
+					alert("로그인후 진행이 가능합니다.");
+				}else if(returnData.result == "success") {
+					
+					if(code == "200"){
+						
+						alert("등록된 이미지가 삭제되었습니다.");
+						$("#imgTitle").val("");
+						$("#imgLink").val("");
+						$("#imgFile").val("");
+						$("#imgNm").text("첨부파일 이미지");
+						$("#templateImageUrl").val("");
+						$('.kakao_image').css("display", "none");
+						$("#kakaoImg").attr("src", "");
+						$("#imageFileName").val("");
+						$("#img_file_0").click();	//이미지첨부 안함 라이오 선택해주기
+						return false;
+						
+					}else{
+						
+						alert(msg);
+						return false;
+					}
+					
+					
+				}else{
+					
+					alert("이미지 삭제에 오류가 발생하였습니다.");
+					return false;
+					
+				}
+			}
+			,error: function (e) {
+				console.log("ERROR : ", e);
+				alert("이미지 삭제에 오류가 발생하였습니다.");
+			}
+		});
+		
+	}
+	
+}
+
+
+//알림톡 내용 초기화 해주기
+function fnContentsReset(){
+
+	$("#inputTemplateContent").val("");
+	$(".template_text").text("내용 미리보기");
+	
+	$('.nowChar').text("0 /");
+	
+}
+
+//우측 미리보기 화면 채널 아이디 정보 변경해 주기
+function fnAgentCodeChg(){
+	
+	var yellowIdVal = $("#selectAgentCode option:checked").val();
+	var yellowId = $("#selectAgentCode option:checked").text();
+	var yellowIdAt = yellowId.replaceAll('@','');
+	if(yellowIdVal != ''){
+		
+		$('#spnYellowid').text(yellowId);			//미리보기화면 채널ID
+		$('#spnYellowidAt').text(yellowIdAt);		//미리보기화면 채널ID @제거
+		$('#yellowIdCon').text(yellowIdAt);			//내용 입력 부분 채널ID 
+		
+		
+	}else{
+		
+		$('#spnYellowid').text("채널ID");		//미리보기화면 채널ID
+		$('#spnYellowidAt').text("채널ID");	//미리보기화면 채널ID @제거
+		$('#yellowIdCon').text("채널ID");		//내용 입력 부분 채널ID 
+	}
+	
+}
+
+$(document).on('change', 'input[name=img_file_add]', function(){
+	
+	var contents = $('#inputTemplateContent').val();
+	if(contents != ''){
+		setContentsLengForFriends(contents);
+	}
+	
+	$("#imgTitle").val("");
+	$("#imgLink").val("");
+	$("#imgFile").val("");
+	$("#imgNm").text("첨부파일 이미지");
+	$("#templateImageUrl").val("");
+	
+	
+})
+
+
+
+//광고성 정보 포함 선택에 따른 텍스트 표시 부분 처리
+$(document).on('change', '.inputAdFlag', function(){
+	
+	var adFlagVal = $(this).val();
+	advTextChange(adFlagVal);
+	
+});
+
+function advTextChange(adFlagVal){
+	
+	if(adFlagVal == 'N'){//광고 표시 숨김처리
+		
+		$('.adFlag').hide();
+		$('.kakao_block_text').hide();
+		$('#adFlagFront').hide();
+		$('.adFlagAfter').hide();
+		
+	}else{
+		$('.adFlag').show();
+		$('.kakao_block_text').show();
+		$('#adFlagFront').show();
+		$('.adFlagAfter').show();
+	}
+	
+}
+
+//이모티콘 삽입 기능 처리
+$(document).on('click', '.symbolButton, .changeWord', function (){
+	//var templateContents = $('#inputTemplateContent').val();
+	//$('#inputTemplateContent').val(templateContents + $(this).attr("value"));
+
+	// 커서 위치에 삽입
+	setCursorInsertText("inputTemplateContent", $(this).attr("value"));
+	
+	setContentsLeng($('#inputTemplateContent').val());
+});
+
+</script>
+
+<!-- 로딩바 -->
+<div class="loading_layer">
+	<div class="loading_container">
+		<div class="bar"></div>
+		<div class="text">Loading</div>
+	</div>
+</div>
+
+<!-- content 영역 -->
+<div class="inner">
+    <!-- send top -->
+    <div class="send_top">
+        <!-- tab button -->
+        <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkTopMenuTap.jsp" %>
+        <!--// tab button -->
+        <!-- 카카오톡 설정 - 알림톡 템플릿 등록/관리 - 내템플릿 -->
+        <div class="top_content kakaotalkset_cont current pay_tab_wrap">
+            <div class="heading">
+                <h2>카카오톡 설정</h2>
+                <button type="button" class="button info"
+                    onclick="window.open('popup_kakaoset_template.html','_blank','width=790, height=300, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=yes')">사용안내</button>
+            </div>
+            <div class="list_tab_wrap2 type2">
+                <!-- tab button -->
+                <%@include file="/WEB-INF/jsp/web/kakao/include/KaKaoAlimtalkSubMenuTap.jsp" %>
+                <!--// tab button -->
+            </div>
+            <form id="bizForm" name="bizForm" method="multipart/form-data">
+            <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf">
+				<input type="hidden" id="menuSubTab" name="menuSubTab" value="tabSubFt">
+            	<input type="hidden" id="inputSenderKey" name="senderKey" value=""/>
+            	<input type="hidden" id="friendId" name="friendId" value="<c:out value='${resultTemplateVO.friendId}'/>"/>
+            	<input type="hidden" id="yellowId" name="yellowId" value=""/>
+            	<input type="hidden" id="templateName" name="templateName" value=""/>
+            	<input type="hidden" id="imageFileName" name="imageFileName" value="<c:out value='${resultTemplateVO.imageFileName}'/>"/>
+            	<input type="hidden" id="imageType" name="imageType" value=""/>
+            	<input type="hidden" id="imageTitle" name="imageTitle" value="">
+            	<input type="hidden" id="imageLink" name="imageLink" value="">
+            	<input type="hidden" id="adFlag" name="adFlag" value="">
+            	<input type="hidden" id="templateImageUrl" name="templateImageUrl" value="<c:out value='${resultTemplateVO.templateImageUrl}'/>">
+            	<input type="hidden" id="templateContent" name="templateContent" value="">
+            	
+
+	            <div class="send_general friend_talk_wrap kakao_wrap">
+	                <div class="send_left">
+	                    <p class="tType1_title">친구톡 템플릿 상세</p>
+	                    <table class="tType1">
+	                        <colgroup>
+	                            <col style="width: 190px;">
+	                            <col style="width: auto;">
+	                        </colgroup>
+	                        <tbody>
+	                            <tr>
+	                                <th>채널ID</th>
+	                                <td>
+	                                    <select class="select_gray_type" name="selectAgentCode" id="selectAgentCode" onchange="javascript:fnAgentCodeChg();">
+	                                        <option value="">채널ID 선택</option>
+	                                        <c:forEach var="kakaoProfileInfo" items="${resultProfileList}" varStatus="status">
+												<option value="${kakaoProfileInfo.senderKey}" <c:if test="${kakaoProfileInfo.senderKey eq resultTemplateVO.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option>
+											</c:forEach>
+	                                    </select>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>템플릿명</th>
+	                                <td>
+	                                    <input type="text" class="template_name" id="inputTemplateName" name="inputTemplateName" value="<c:out value='${resultTemplateVO.templateName}'/>" placeholder="템플릿 명을 입력해주세요" maxLength="100">
+	                                    <p class="template_name_cf">최대 100자, 템플릿 관리용</p>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>이미지 첨부</th>
+	                                <td class="img_file_add_td">
+										<div class="img_sort_wrap">
+		                                    <input type="radio" name="img_file_add" id="img_file_0" value="" <c:if test="${resultTemplateVO.imageType eq ''}">checked</c:if> ><label for="img_file_0">첨부 안함</label>
+		                                    <input type="radio" name="img_file_add" id="img_file_1" value="I" <c:if test="${resultTemplateVO.imageType eq 'I'}">checked</c:if> ><label for="img_file_1">이미지 첨부</label>
+		                                    <input type="radio" name="img_file_add" id="img_file_2" value="W" <c:if test="${resultTemplateVO.imageType eq 'W'}">checked</c:if>><label for="img_file_2">와이드 이미지 첨부</label>
+		                                    <div class="img_add_info_wrap basic_img_add_wrap">
+		                                        <p class="info_title_text"><span class="c_e40000">*</span> 이미지 첨부 안내</p>
+		                                        <ul class="info_text">
+		                                            <li>- 권장사이즈 : 720px * 720px</li>
+		                                            <li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li>
+		                                            <li>- 파일형식 : jpg, png (최대 500kb)</li>
+		                                            <li>- 이미지 첨부시 메시지 내용은 최대 400자까지 입력할 수 있습니다.</li>
+		                                        </ul>
+		                                    </div>
+		                                    <div class="img_add_info_wrap wide_img_add_wrap">
+		                                        <p class="info_title_text"><span class="c_e40000">*</span> 와이드 이미지 첨부 안내</p>
+		                                        <ul class="info_text">
+		                                            <li>- 권장사이즈 : 800px * 600px</li>
+		                                            <!-- <li>- 제한사이즈 : 가로 500px 미만, 가로:세로 비율이 2:1 미만 또는 3:4 초과시 업로드 불가</li> -->
+		                                            <li>- 파일형식 : jpg, png (최대 2mb)</li>
+		                                            <li>- 와이드 이미지 첨부시 메시지 내용은 최대 76자, 버튼 1개까지 입력할 수 있습니다.</li>
+		                                        </ul>
+		                                    </div>
+	                                    </div>
+	                                    <div class="img_file_add_wrap">
+	                                        <ul class="img_file_info_wrap">
+	                                            <li>
+	                                                <p>이미지 제목</p>
+	                                                <input type="text" id="imgTitle" name="imgTitle" value="<c:out value='${resultTemplateVO.imgTitle}'/>" class="img_url" maxLength="50">
+	                                            </li>
+	                                            <li>
+	                                                <p>이미지 클릭시 이동할 URL</p>
+	                                                <input type="text" id="imgLink" name="imgLink" value="<c:out value='${resultTemplateVO.imgLink}'/>" placeholder="http://" class="img_url" maxLength="1000">
+	                                            </li>
+	                                            <li>
+	                                                <p class="file_name"  id="imgNm" name="imgNm">첨부파일 이미지</p>
+	                                                <input type="file" id="imgFile"  accept=".jpg, .jpeg, .png" onchange="imgResizeInfo(event); return false;" style="display:none"/>
+	                                                <button type="button" class="btn_del btnImgDel" onclick="buttonTypeDel(this);">
+	                                                	<img src="/publish/images/btn_delete.png" id="imgDel" alt="이미지 삭제" onclick="fnImageDel();">
+	                                               	</button>
+	                                            </li>
+	                                        </ul>
+	                                        <button type="button" class="btnType btnType8 btn_img_upload" title="이미지 불러오기" onclick="javascript:upImgClick(); return false;">이미지 불러오기</button>
+                                        </div>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>광고포함 여부</th>
+	                                <td>
+	                                    <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" <c:if test="${resultTemplateVO.adFlag eq 'Y'}">checked</c:if> ><label for="ad_Y">광고성 정보 포함</label>
+	                                    <%-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N" <c:if test="${resultTemplateVO.adFlag eq 'N'}">checked</c:if> ><label for="ad_N">포함 안함</label> --%>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>내용</th>
+	                                <td class="kakao_template_text">
+	                                    <div class="put_left short">
+	                                        <!-- <input type="text" class="template_name"> -->
+	                                        <div class="put_text_wrap">
+	                                            <div class="ad_txt">
+	                                                <p><span id="adFlagFront">(광고)</span> <span id="yellowIdCon" >채널ID</span></p>
+	                                            </div>
+	                                            <label for="inputTemplateContent" class="label"></label>
+	                                            <textarea id="inputTemplateContent" name="inputTemplateContent" class="put_text" placeholder="내용을 입력해주세요."><c:out value="${resultTemplateVO.templateContent}"/></textarea>
+	                                            <div class="text_length">
+	                                                <div>
+	                                                    <p class="adFlagAfter">수신거부 : 홈 > 채널차단</p>
+	                                                </div>
+	                                                <div>
+	                                                    <p><span class="fwMd nowChar">0 /</span><span class="c_002c9a fwMd totChar">1000</span>자</p>
+	                                                </div>
+	                                            </div>
+	                                        </div>
+	                                    </div>
+	                                    <div class="put_right">
+	                                        <div class="btn_popup_wrap">
+	                                            <button type="button" class="btnType btnType7"
+	                                                onclick="miniPopup(this)">특수문자</button>
+	                                            <div class="send_miniPop spc_character">
+	                                                <div class="tab_character">
+	                                                    <a href="#none" class="on">특수문자</a>
+	                                                    <a href="#none">웃음</a>
+	                                                    <a href="#none">슬픔</a>
+	                                                    <a href="#none">분노</a>
+	                                                    <a href="#none">사랑</a>
+	                                                    <a href="#none">그외</a>
+	                                                </div>
+	                                                <!-- 특수문자 -->
+	                                                <div class="cnt_character on">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'D'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}"><c:out value="${symbolList.symbol}"/></a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //특수문자 -->
+	
+	                                                <!-- 웃음 -->
+	                                                <div class="cnt_character emt_character">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'S'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //웃음 -->
+	
+	                                                <!-- 슬픔 -->
+	                                                <div class="cnt_character emt_character">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'C'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //슬픔 -->
+	
+	                                                <!-- 분노 -->
+	                                                <div class="cnt_character emt_character">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'A'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //분노 -->
+	
+	                                                <!-- 사랑 -->
+	                                                <div class="cnt_character emt_character">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'L'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //사랑 -->
+	
+	                                                <!-- 그외 -->
+	                                                <div class="cnt_character emt_character emt_etc ">
+	                                                    <div class="box_character">
+	                                                        <c:forEach var="symbolList" items="${symbolList}" varStatus="status">
+																<c:if test="${symbolList.symbolType == 'E'}">
+																	<a href="javascript:void(0)" class="symbolButton" value="${symbolList.symbol}">${symbolList.symbol}</a>
+																</c:if>
+															</c:forEach>
+	                                                    </div>
+	                                                </div>
+	                                                <!-- //그외 -->
+	                                                <button type="button" class="btn_close"
+	                                                    onclick="miniPopup(this)">닫기</button>
+	                                            </div>
+	                                        </div>
+	                                        <div class="btn_popup_wrap convers_wrap">
+	                                            <button type="button" class="btnType btnType7"
+	                                                onclick="miniPopup(this)">특정문구 일괄변환<i
+	                                                    class="qmMark"></i></button>
+	                                            <div class="send_miniPop convers">
+	                                                <div>
+	                                                    <div class="convers_top">
+	                                                        <span>특정문구 일괄변환이란?</span>
+	                                                        <p>주소록, 엑셀에 입력된 내용을 이용해 수신자마다 다른 내용의 메시지를 발송하는 기능</p>
+	                                                    </div>
+	                                                    <div class="convers_middle">
+	                                                    	<a href="javascript:void(0)" class="changeWord" value="\#{이름}"><c:out value="\#{이름}"/></a>
+                                                    	</div>
+	                                                    <div class="convers_bottom">
+	                                                        <a href="javascript:void(0)" class="changeWord" value="\#{1}"><c:out value="\#{1}"/></a>
+	                                                        <a href="javascript:void(0)" class="changeWord" value="\#{2}"><c:out value="\#{2}"/></a>
+	                                                        <a href="javascript:void(0)" class="changeWord" value="\#{3}"><c:out value="\#{3}"/></a>
+	                                                        <a href="javascript:void(0)" class="changeWord" value="\#{4}"><c:out value="\#{4}"/></a>
+	                                                    </div>
+	                                                </div>
+	                                                <button type="button" class="btn_close"
+	                                                    onclick="miniPopup(this)">닫기</button>
+	                                            </div>
+	                                        </div>
+	                                        <div class="btn_popup_wrap spc_wrap">
+	                                            <button type="button" class="btnType btnType7"
+	                                                onclick="miniPopup(this)">이모티콘</button>
+	                                            <div class="send_miniPop spc_character kakao_emoticon">
+	                                                <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
+	                                                <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
+	                                            </div>
+	                                        </div>
+	                                        <div class="btn_popup_wrap template_call_wrap">
+	                                            <button type="button" class="btnType btnType8">템플릿 불러오기</button>
+	                                        </div>
+	                                        <div class="send_btnWrap">
+	                                            <!-- <button type="button" class="btnType btn_text_save">내용 저장하기</button> -->
+	                                            <button type="button" class="btnType btnType9" onclick="javascript:fnContentsReset();">초기화</button>
+	                                        </div>
+	                                    </div>
+	                                </td>
+	                            </tr>
+	                            <tr>
+	                                <th>버튼</th>
+	                                <td class="template_button">
+	                                    <select name="" id="" class="select_gray_type template_button_select">
+	                                        <option value="button_type_0">버튼타입 선택</option>
+	                                        <option value="button_type_1">배송조회</option>
+	                                        <option value="button_type_2">웹링크</option>
+	                                        <option value="button_type_3">앱링크</option>
+	                                        <option value="button_type_5">메시지전달</option>
+	                                        <%-- <option value="button_type_4">봇키워드</option>
+	                                        <option value="button_type_6">상담톡전환</option>
+	                                        <option value="button_type_7">챗봇전환</option> --%>
+	                                    </select>
+	                                    <button type="button" class="btnType btnType6" onclick="friendTemplateButtonAdd();">추가</button>
+	                                    <div class="button_add_wrap">
+	                                    	<c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
+	                                    	
+	                                    		<c:if test="${buttonList.linkType eq 'DS'}">
+	                                    			<!-- 배송조회 버튼  -->
+			                                    	<dl class="button_type_wrap type1">
+				                                    	<dt>배송조회</dt>
+				                                    	<dd class="button_type_input">
+				                                    		<input type="hidden" id="buttonLikeTypeDeliv" name="buttonVOList[${status.index}].linkType" value="DS"/>
+				                                    		<input type="text" id="btnNmDeliv" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+				                                    		<p class="cf_text">*이용가능 택배사 : KG로지스, 우체국택배,일양로지스, GTX로지스, FedEx, 경동택배, 합동택배, 롯데택배</p>
+				                                    	</dd>
+				                                    	<dd>
+				                                    		<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+				                                    	</dd>
+			                                    	</dl>
+	                                    		</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'WL'}">
+			                                    	<!-- 웹링크 버튼 -->
+			                                    	<dl class="button_type_wrap type2">
+			                                    		<dt>웹링크</dt>
+			                                    		<dd class="button_type_input">
+			                                    			<ul>
+			                                    				<li>
+			                                    					<input type="hidden" id="buttonLikeTypeWeb" name="buttonVOList[${status.index}].linkType" value="WL"/>
+			                                    					<input type="text" id="btnNmWeb" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkMo" name="buttonVOList[${status.index}].linkMo" value="<c:out value='${buttonList.linkMo}'/>" placeholder="모바일 링크 입력">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkPc" name="buttonVOList[${status.index}].linkPc" value="<c:out value='${buttonList.linkPc}'/>" placeholder="PC 링크 입력">
+			                                    				</li>
+			                                    			</ul>
+			                                    		</dd>
+			                                    		<dd>
+			                                    			<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+			                                    		</dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'AL'}">
+			                                    	<!-- 앱링크 버튼 -->
+			                                    	<dl class="button_type_wrap type3">
+			                                    		<dt>앱링크</dt>
+			                                    		<dd class="button_type_input">
+			                                    			<ul>
+			                                    				<li>
+			                                    					<input type="hidden" id="buttonLikeTypeApp" name="buttonVOList[${status.index}].linkType" value="AL"/>
+			                                    					<input type="text" id="btnNmApp" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkAnd" name="buttonVOList[${status.index}].linkAnd" value="<c:out value='${buttonList.linkAnd}'/>" placeholder="Android 링크 입력">
+			                                    				</li>
+			                                    				<li>
+			                                    					<input type="text" id="buttonLinkIos" name="buttonVOList[${status.index}].linkIos" value="<c:out value='${buttonList.linkIos}'/>" placeholder="IOS 링크 입력">
+			                                    				</li>
+			                                    			</ul>
+			                                    		</dd>
+			                                    		<dd>
+			                                    			<button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button>
+			                                    		</dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'BK'}">
+			                                    	<!-- 봇키워드 -->
+			                                    	<dl class="button_type_wrap type4">
+			                                    		<dt>봇키워드</dt>
+		                                    			<dd class="button_type_input">
+		                                    				<input type="hidden" id="buttonLikeTypeBot" name="buttonVOList[${status.index}].linkType" value="BK"/>
+		                                    				<input type="text" id="btnNmBot" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+		                                    			</dd>
+		                                    			<dd><button type="button" class="btn_del" onclick="buttonTypeDel(this);"><img src="/publish/images/btn_delete.png" alt=""></button></dd>
+			                                    	</dl>
+		                                    	</c:if>
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'MD'}">
+			                                    	<!-- 메시지 전달 -->
+			                                    	<dl class="button_type_wrap type5">
+													   <dt>메시지전달</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeMsg" name="buttonVOList[${status.index}].linkType" value="MD" />
+													      <input type="text" id="btnNmMsg" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button>
+													   </dd>
+													</dl>
+												</c:if>	                                    	
+		                                    	
+		                                    	<c:if test="${buttonList.linkType eq 'BC'}">
+			                                    	<!-- 상담톡 전환 -->
+													<dl class="button_type_wrap type6">
+													   <dt>상담톡전환</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeCons" name="buttonVOList[${status.index}].linkType" value="BC" />
+													      <input type="text" id="btnNmCons" name="buttonVOList[${status.index}].name" value="<c:out value='${buttonList.name}'/>" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button>
+													   </dd>
+													</dl>
+												</c:if>
+												
+												<c:if test="${buttonList.linkType eq 'BT'}">
+													<!-- 챗봇전환 -->
+													<dl class="button_type_wrap type7">
+													   <dt>챗봇전환</dt>
+													   <dd class="button_type_input">
+													      <input type="hidden" id="buttonLikeTypeBotChg" name="buttonVOList[${status.index}].linkType" value="BT" />
+													      <input type="text" id="btnNmBotChg" name="buttonVOList[${status.index}].name" value="" placeholder="버튼명 입력(최대 14자)">
+													   </dd>
+													   <dd>
+													      <button type="button" class="btn_del" onclick="buttonTypeDel(this);">
+													         <img src="/publish/images/btn_delete.png" alt="">
+													      </button>
+													   </dd>
+													</dl>
+												</c:if>
+											</c:forEach>
+	                                    </div>
+	                                </td>
+	                            </tr>
+	                        </tbody>
+	                    </table>
+	                </div>
+	                <div class="send_right">
+	                    <div class="phone">
+	                        <div class="phoneIn">
+	                            <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt="">
+	                            	<span id="spnYellowid">@채널ID</span>
+	                            </p>
+	                            <!-- 텍스트 미리보기 -->
+	                            <div class="text_preview">
+	                                <p class="friend_talk_title"><span class="adFlag">(광고)</span> <span id="spnYellowidAt">채널ID</span></p>
+	                                <div class="allimtalk_content">
+	                                    <div class="kakao_image"  style="display:none;">
+	                                    	<img src="" id="kakaoImg" alt="">
+	                                    </div>
+	                                    <p class="template_text">내용 미리보기</p>
+	                                    <div class="btnViewArea">
+	                                    	<c:forEach var="buttonList" items="${resultTemplateVO.buttonVOList}" varStatus="status">
+	                                    		<button type="button" class="btn_kakao_type"  style="display:block;"><c:out value="${buttonList.name}"/></button>
+	                                    	</c:forEach>
+	                                	</div>
+	                                </div>
+	                                <p class="kakao_block_text">수신거부 : 홈 > 채널차단</p>
+	                                
+	                            </div>
+	                            <!-- //텍스트 미리보기 -->
+	                        </div>
+	                        <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다<p>
+                            <div class="phone_bottom">
+                                <div class="send_btn">
+                                    <button type="button" class="btnType btnType11" onclick="javascript:updateTemplate();">수정하기</button>
+                                    <button type="button" class="btnType btnType10"onclick="location.href='/web/mjon/kakao/template/selectKakaoFriendsTemplateList.do';">취소</button>
+                                </div>
+                            </div>
+	                    </div>
+	                </div>
+	            </div>
+            </form>
+        </div>
+    </div>
+</div>
+<!--// send top -->
src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateList.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateList.jsp
@@ -41,7 +41,7 @@
 	
 	//화면 로딩바 보여주기
 	$('.loading_layer').addClass('active');
-	$("#templateList").load("/web/mjon/kakao/template/selectKakaoFriendsTemplateListAjax.do", {"senderKey":selectAgentCode, "categoryCode" : selectTemplateSecondCatagory, "templateStatus" : selectTemplateStatus, "searchKeyword" : keyword, "page" : page, "yellowId" : yellowId, "formListType" : formListType} ,function(){
+	$("#templateList").load("/web/mjon/kakao/template/selectKakaoFriendsTemplateListAjax.do", {"senderKey":selectAgentCode, "categoryCode" : selectTemplateSecondCatagory, "templateStatus" : selectTemplateStatus, "searchKeyword" : keyword, "pageIndex" : page, "yellowId" : yellowId, "formListType" : formListType} ,function(){
 		
 		//썸네일 박스 스크롤 적용해주기
 		$(".kakao_template_wrap").mCustomScrollbar({
@@ -297,15 +297,15 @@
 }
 
 //알림톡 상세보기 화면 호출
-function fnTemplateDetail(templateCode){
+function fnTemplateDetail(friendId){
 	
 	var form = document.templateForm;
 	var selectAgentCode = $("select[name='selectAgentCode_select']").val();				// 선택 채널ID
 	
 	form.senderKey.value = selectAgentCode;
-	form.templateCode.value = templateCode;
+	form.friendId.value = friendId;
 	
-	form.action="/web/mjon/kakao/template/requestKakaoApiTemplateDetail.do";
+	form.action="/web/mjon/kakao/template/selectKakaoFriendsTemplateDataDetail.do";
 	form.submit();
 	
 }
@@ -359,7 +359,7 @@
 <form id="templateForm" name="templateForm" method="post">
 
 	<input type="hidden" id="inputSenderKey" name="senderKey" value=""/>
-	<input type="hidden" id="inputTemplateCode" name="templateCode" value=""/>
+	<input type="hidden" id="inputFriendId" name="friendId" value=""/>
 	<input type="hidden" id="arrTemplateCode" name="arrTemplateCode" value=""/>
 
 </form>
@@ -426,7 +426,7 @@
 								</c:forEach>
 	                        </select>
 	                        <div class="search">
-	                            <label for="id" class="label"></label>
+	                            <label for="inputSearchKeyword" class="label"></label>
 	                            <input type="text" class="search_input" id="inputSearchKeyword" name="inputSearchKeyword" value="<c:out value=""/>" placeholder="템플릿명을 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'">
 	                            <button type="button" class="btnType btnType2" onclick="selectTemplateListLoad('1');">검색</button>
 	                        </div>
src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateListAjax.jsp
@@ -102,6 +102,14 @@
 			                           	</p>
 			                        </div>
 			                        <div class="allimtalk_content" onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;">
+			                        	
+			                        	<!-- 템플릿에 이미지가 있는경우 이미지 표시 -->
+			                        	<c:if test="${not empty templatInfoList.imageType}">
+			                        		<div class="img_box">
+				                                <img src="<c:url value='${templatInfoList.templateImageUrl}'/>" alt="">
+				                            </div>
+			                        	</c:if>
+			                        
 			                            <p class="template_text"><c:out value="${fn:replace(fn:replace(templatInfoList.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/></p>
 			                            <!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
 			                            <c:forEach var="templatInfoButtonList" items="${templatInfoList.buttonVOList}" varStatus="status">
@@ -114,9 +122,15 @@
 			                    </c:if>
 			                </div>
 			                <div class="kakao_template_info">
+			                	<dl>
+		                            <dt>템플릿명</dt>
+		                            <dd>
+			                            <c:out value="${templatInfoList.templateName}"/>
+			                        </dd>
+		                        </dl>
 			                    <dl>
 			                        <dt>등록일</dt>
-			                        <dd><c:out value="${templatInfoList.lastUpdtPnttm}"/>
+			                        <dd><c:out value="${templatInfoList.frstRegistPnttm}"/>
 			                            <div class="btn_wrap">
 			                                <button type="button" class="btn_template_edit" title="템플릿 수정"  onclick="javascript:fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;"><img src="/publish/images/content/btn_template_edit.png" alt=""></button>
 			                                <button type="button" class="btn_template_delete" title="템플릿 삭제"  onclick="javascript:fnTemplateDelBtn('<c:out value="${templatInfoList.friendId}"/>'); return false;"><img src="/publish/images/content/btn_template_delete.png" alt=""></button>
@@ -176,7 +190,7 @@
 			                        		</c:otherwise>
 			                        	</c:choose>
 			                        </td>
-			                        <td><c:out value="${templatInfoList.lastUpdtPnttm}"/></td>
+			                        <td><c:out value="${templatInfoList.frstRegistPnttm}"/></td>
 			                    </tr>
 			                </c:forEach>	
                 		</c:when>
 
src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateListPopupAjax.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateListPopupAjax.jsp
@@ -0,0 +1,217 @@
+<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<% pageContext.setAttribute("newLineChar", "\r\n"); %>
+<% pageContext.setAttribute("newLineChar2", "\n"); %>
+<!DOCTYPE html>
+<html lang="ko">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <title>문자온 - 친구톡 템플릿 선택</title>
+
+    <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&amp;display=swap"
+        rel="stylesheet">
+    <link rel="stylesheet" href="/publish/css/reset.css">
+    <link rel="stylesheet" href="/publish/css/jquery.mCustomScrollbar.css">
+    <link rel="stylesheet" href="/publish/css/common.css">
+    <link rel="stylesheet" href="/publish/css/button.css">
+    <link rel="stylesheet" href="/publish/css/content.css?date=202301160001">
+    <link rel="stylesheet" href="/publish/css/mem.css">
+    <link rel="stylesheet" href="/publish/css/font.css">
+    <link rel="stylesheet" href="/publish/css/popupLayer.css">
+
+    <script src="/publish/js/jquery-3.5.0.js"></script>
+    <script src="/publish/js/jquery.mCustomScrollbar.concat.min.js"></script>
+    <script src="/publish/js/common.js"></script>
+    <script src="/publish/js/content.js?date=202211070003"></script>
+    <script src="/publish/js/popupLayer.js"></script>
+</head>
+
+<script>
+
+	//리스트 체크 박스 선택 스크립트
+	//체크박스 전체 선택 및 해제
+	var allChkSts = false;			//썸네일 타입 리스트 체크박스 상태
+	var allChkListSts = false;		//리스트 타입 리스트 체크박스 상태
+	
+	$("#btnAllChk").click(function(){
+				
+		if(!allChkSts){// 전체선택이 해제되어 있을 경우
+			
+			$("input[name=inputTemplateId]").prop("checked", true);
+			allChkSts = true;
+			
+			$("input:checkbox[name='inputTemplateId']:checked").each(function(index){
+				
+				var disabledChk = $(this).prop('disabled');
+				if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+					
+					$(this).prop("checked", false);
+					
+				}
+				
+			});
+			
+		}else{
+			
+			$("input[name=inputTemplateId]").prop("checked", false);
+			allChkSts = false;
+
+		}
+		
+		//리스트 타입 화면에 있는 체크박스 해제해 주기
+		$("input[name=inputTemplateIdList]").prop("checked", false);
+		$("input[name=allCheckList]").prop("checked", false);		//리스트 전체 선택 체크박스 해제해주기
+		
+		allChkListSts = false;
+	});
+	
+	
+	$("#allCheckList").click(function(){
+		
+		if(!allChkListSts){// 전체선택이 해제되어 있을 경우
+			
+			$("input[name=inputTemplateIdList]").prop("checked", true);
+			allChkListSts = true;
+			
+			$("input:checkbox[name='inputTemplateIdList']:checked").each(function(index){
+				
+				var disabledChk = $(this).prop('disabled');
+				if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+					
+					$(this).prop("checked", false);
+					
+				}
+				
+			});
+			
+		}else{
+			
+			$("input[name=inputTemplateIdList]").prop("checked", false);
+			allChkListSts = false;
+
+		}
+		
+		//썸네일 리스트에 있는 체크박스를 해제해준다.
+		$("input[name=inputTemplateId]").prop("checked", false);
+		allChkSts = false;
+		
+
+	});
+	
+	function selectTemplateListLoad(page){
+		
+		var form = document.listForm;
+		form.searchKeyword.value = $("#inputSearchKeyword").val();
+		form.senderKey.value = $("select[name='selectAgentCode_select']").val();
+		form.pageIndex.value = page;
+		form.action = "/web/mjon/kakao/template/selectKakaoFriendsTemplateListPopupAjax.do";
+		form.submit();
+		
+	}
+	
+	function fnTemplateDetail(ftId){
+		
+		opener.parent.myTemplateSelect(ftId);
+		self.close();
+		
+	}
+
+
+</script>
+<body>
+
+	<form id="listForm" name="listForm" method="post">
+		<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
+		<input type="hidden" id="searchKeyword" name="searchKeyword" value=""/>
+		<input type="hidden" id="senderKey" name="senderKey" value=""/>
+	</form>
+	<div class="info_popup ad_layer template_choice_popup adpopup01" style="width:930px;">
+        <div class="popup_heading">
+            <p>친구톡 템플릿 선택</p>
+        </div>
+        <div class="layer_in">
+            <div class="popup_search_wrap type2 grayborder grayfill">
+                <select name="selectAgentCode_select" id="selectAgentCode_select" class="selType2">
+                    <option value="">채널ID 선택</option>
+					<c:forEach var="kakaoProfileInfo" items="${resultProfileList}" varStatus="status">
+						<option value="${kakaoProfileInfo.senderKey}" <c:if test="${searchVO.senderKey eq kakaoProfileInfo.senderKey}">selected</c:if> ><c:out value='${kakaoProfileInfo.yellowId}'/></option>
+					</c:forEach>
+                </select>
+                <label for="searchKeyword" class="label"></label>
+                <input type="text" class="search_input" id="inputSearchKeyword" name="inputSearchKeyword" value="<c:out value="${searchVO.searchKeyword}"/>" placeholder="템플릿명을 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'">
+                <button type="button" class="btnType btnType2" onclick="selectTemplateListLoad('1');">검색</button>
+            </div>
+            <div class="template_list">
+                <ul class="kakao_template_list thumbnail_list">
+                	<c:choose>
+        				<c:when test="${not empty kakaoTemplateInfoList}">
+		                	<c:forEach var="templatInfoList" items="${kakaoTemplateInfoList}" varStatus="status">
+			                    <li onClick="fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;" style="cursor:pointer;">
+			                        <div class="kakao_template_wrap">
+			                            <div class="template_cont">
+			                                <div class="title">
+			                                    <%-- <div class="check">
+			                                        <input type="checkbox" name="inputTemplateId" id="inputTemplateId" value="<c:out value='${templatInfoList.friendId}'/>">
+			                                    </div> --%>
+			                                    <p title="친구톡 템플릿 내용">
+						                           	<c:if test="${templatInfoList.adFlag eq 'Y'}">(광고)</c:if>
+						                           	<c:out value="${fn:replace(templatInfoList.yellowId, '@', '')}"/>
+					                           	</p>
+			                                </div>
+			                                <!-- 템플릿에 이미지가 있는경우 이미지 표시 -->
+				                        	<c:if test="${not empty templatInfoList.imageType}">
+				                        		<div class="img_box">
+					                                <img src="<c:url value='${templatInfoList.templateImageUrl}'/>" alt="">
+					                            </div>
+				                        	</c:if>
+			                                <div class="text_box">
+			                                    <p><c:out value="${fn:replace(fn:replace(templatInfoList.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/></p>
+			                                    <!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
+					                            <c:forEach var="templatInfoButtonList" items="${templatInfoList.buttonVOList}" varStatus="status">
+					                            	<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
+					                            </c:forEach>
+			                                </div>
+			                            </div>
+			                            <c:if test="${templatInfoList.adFlag eq 'Y'}">
+					                    	<p class="cf_text">수신거부 | 홈 > 채널차단</p>
+					                    </c:if>
+			                        </div>
+			                        <%-- <div class="btn_wrap">
+			                            <button type="button" class="btnType btnType3 btn_template_use" onClick="fnTemplateDetail('<c:out value="${templatInfoList.friendId}"/>'); return false;">템플릿 사용하기</button>
+			                        </div> --%>
+			                        <div class="kakao_template_info">
+			                        	<dl>
+				                            <dt>템플릿명</dt>
+				                            <dd>
+					                            <c:out value="${templatInfoList.templateName}"/>
+					                        </dd>
+				                        </dl>
+			                            <dl>
+			                                <dt>등록일</dt>
+			                                <dd><c:out value="${templatInfoList.frstRegistPnttm}"/></dd>
+			                            </dl>
+			                        </div>
+			                    </li>
+		                    </c:forEach>
+	                	</c:when>
+	                <c:otherwise>
+	                	<li class="template_none">등록된 템플릿이 없습니다.</li>
+	                </c:otherwise>
+	                </c:choose>
+                </ul>
+            </div>
+            <!-- table 안 ul의 가운데 정렬을 위한 style 처리 -->
+			<!-- pagination -->
+		    <ul class="pagination">
+				<ui:pagination paginationInfo = "${paginationInfo}"  type="imageWeb" jsFunction="selectTemplateListLoad" />
+			</ul><!-- //pageWrap -->
+        </div>
+    </div>
+
+</body>
+</html>(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateRegist.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateRegist.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/template/ft/KakaoFriendstalkTemplateRegist.jsp
@@ -211,6 +211,7 @@
 				
 					$('.kakao_image').css("display", "block");
 					$("#kakaoImg").attr("src", imgUrl);
+					$("#imageFileName").val(fileName);
 					
 				}else if(code == "2002"){//일반 이미지 가로 세로 크기 오류 발생
 					
@@ -319,6 +320,13 @@
 			
 		}
 		
+		if(inputTemplateImageUrl == ''){
+			
+			alert("이미지를 선택해 주세요.");
+			return false;
+			
+		}
+		
 	}
 	
 	
@@ -356,7 +364,7 @@
 				
 				var result = returnData.result;
 				
-				if(result == "notLogin") {//차단 발신번호인 경우 등록 불가
+				if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
 					alert("로그인후 진행이 가능합니다.");
 				}else if(returnData.result == "success") {
 					alert("템플릿 저장이 완료되었습니다.");
@@ -413,7 +421,7 @@
 				var code = returnData.code;
 				var msg = returnData.msg;
 				
-				if(result == "notLogin") {//차단 발신번호인 경우 등록 불가
+				if(result == "loginFail") {//차단 발신번호인 경우 등록 불가
 					alert("로그인후 진행이 가능합니다.");
 				}else if(returnData.result == "success") {
 					
@@ -427,6 +435,7 @@
 						$("#templateImageUrl").val("");
 						$('.kakao_image').css("display", "none");
 						$("#kakaoImg").attr("src", "");
+						$("#img_file_0").click();	//이미지첨부 안함 라이오 선택해주기
 						return false;
 						
 					}else{
@@ -565,7 +574,7 @@
                 <!--// tab button -->
             </div>
             <form id="bizForm" name="bizForm" method="multipart/form-data">
-            <input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf">
+            	<input type="hidden" id="menuTopTab" name="menuTopTab" value="tabConf">
 				<input type="hidden" id="menuSubTab" name="menuSubTab" value="tabSubFt">
             	<input type="hidden" id="inputSenderKey" name="senderKey" value=""/>
             	<input type="hidden" id="yellowId" name="yellowId" value=""/>
@@ -576,7 +585,7 @@
             	<input type="hidden" id="adFlag" name="adFlag" value="">
             	<input type="hidden" id="templateImageUrl" name="templateImageUrl" value="">
             	<input type="hidden" id="templateContent" name="templateContent" value="">
-            	
+            	<input type="hidden" id="imageFileName" name="imageFileName" value=""/>
 
 	            <div class="send_general friend_talk_wrap kakao_wrap">
 	                <div class="send_left">
@@ -602,7 +611,7 @@
 	                                <th>템플릿명</th>
 	                                <td>
 	                                    <input type="text" class="template_name" id="inputTemplateName" name="inputTemplateName" placeholder="템플릿 명을 입력해주세요" maxLength="100">
-	                                    <p class="template_name_cf">최대 100자, 템플릿 관리용</p>
+	                                    <p class="template_name_cf">최대 50자, 템플릿 관리용</p>
 	                                </td>
 	                            </tr>
 	                            <tr>
@@ -656,9 +665,8 @@
 	                            <tr>
 	                                <th>광고포함 여부</th>
 	                                <td>
-	                                    <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" checked><label for="ad_Y">광고성 정보
-	                                        포함</label>
-	                                    <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N"><label for="ad_N">포함 안함</label>
+	                                    <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_Y" value="Y" checked><label for="ad_Y">광고성 정보  포함</label>
+	                                    <!-- <input type="radio" class="inputAdFlag" name="ad_flag" id="ad_N" value="N"><label for="ad_N">포함 안함</label> -->
 	                                </td>
 	                            </tr>
 	                            <tr>
@@ -798,128 +806,8 @@
 	                                            <button type="button" class="btnType btnType7"
 	                                                onclick="miniPopup(this)">이모티콘</button>
 	                                            <div class="send_miniPop spc_character kakao_emoticon">
-	                                                <div class="cnt_character">
-	                                                    <div class="box_character">
-	                                                        <a href="javascript:void(0)" class="changeWord" value="(미소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_001.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(윙크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_002.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(방긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_003.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(반함)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_004.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(눈물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_005.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(절규)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_006.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(크크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_007.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(메롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_008.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(잘자)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_009.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(잘난척)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_010.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(헤롱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_011.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(놀람)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_012.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(아픔)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_013.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(당황)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_014.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(풍선껌)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_015.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(버럭)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_016.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(부끄)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_017.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(궁금)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_018.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(흡족)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_019.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(깜찍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_020.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(으으)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_021.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(민망)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_022.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(곤란)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_023.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(잠)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_024.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(행복)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_025.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(안도)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_026.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(우웩)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_027.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(외계인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_028.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(외계인녀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_029.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(공포)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_030.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(근심)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_031.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(악마)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_032.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(썩소)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_033.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(쳇)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_034.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(야호)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_035.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(좌절)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_036.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(삐침)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_037.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(하트)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_038.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(실연)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_039.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(별)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_040.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(브이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_041.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(오케이)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_042.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(최고)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_043.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(최악)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_044.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(그만)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_045.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(땀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_046.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(알약)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_047.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(밥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_048.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(커피)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_049.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(맥주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_050.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(소주)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_051.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(와인)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_052.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(치킨)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_053.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(축하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_054.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(음표)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_055.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(선물)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_056.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(케이크)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_057.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(촛불)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_058.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(컵케이크a)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_059.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(컵케이크b)'"><img src="/publish/images/kakao_emoticon/kakao_emoticon_060.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(해)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_061.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(구름)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_062.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(비)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_063.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(눈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_064.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(똥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_065.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(근조)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_066.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(딸기)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_067.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(호박)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_068.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(입술)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_069.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(야옹)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_070.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(돈)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_071.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(담배)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_072.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(축구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_073.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(야구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_074.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(농구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_075.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(당구)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_076.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(골프)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_077.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(카톡)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_078.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(꽃)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_079.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(총)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_080.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(크리스마스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_081.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(콜)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_082.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(하트뿅)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1001.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1002.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(우와)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1003.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(심각)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1004.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(힘듦)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1005.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(흑흑)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1006.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(아잉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1007.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(찡긋)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1008.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(뿌듯)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1009.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(깜짝)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1010.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(빠직)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1011.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(짜증)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1012.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(제발)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1013.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(씨익)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1014.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(신나)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1015.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(헉)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1016.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(열받아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1017.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(흥)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1018.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(감동)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1019.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(뽀뽀)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1020.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(멘붕)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1021.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(정색)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1022.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(쑥스)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1023.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(꺄아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1024.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(좋아)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1025.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(굿)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1026.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(훌쩍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1027.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(허걱)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1028.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(부르르)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1029.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(푸하하)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1030.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(발그레)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1031.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(수줍)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1032.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(컴온)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1033.png" alt="" /></a>
-							                                <a href="javascript:void(0)" class="changeWord" value="(졸려)"><img src="/publish/images/kakao_emoticon/kakao_emoticon_1034.png" alt="" /></a>
-	                                                    </div>
-	                                                </div>
-	                                                <button type="button" class="btn_close"
-	                                                    onclick="miniPopup(this)">닫기</button>
+	                                                <%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentImoticonInfo.jsp" %>
+	                                                <button type="button" class="btn_close" onclick="miniPopup(this)">닫기</button>
 	                                            </div>
 	                                        </div>
 	                                        <div class="btn_popup_wrap template_call_wrap">
src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
@@ -773,9 +773,6 @@
 			fnByteString(contents);
 			
 		}
-
-		
-		
 		
 	});//문자 바이트수 계산하기 끝
 	
src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataView.jsp
@@ -1213,7 +1213,7 @@
 	 removeEmptyValues(formData);
 
 	// 선택된 데이터 추가
-	formData["mjonMsgTabulListVO"] = $selectedData;
+	formData["mjonMsgSendVOList"] = $selectedData;
 	
 	// JSON 데이터 확인
 	console.log("최종 formData:", JSON.stringify(formData));
src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentView.jsp
@@ -21,7 +21,7 @@
 	//이전달 첫날/마지막날 조회
 	if(date.getMonth()+1 == 1){
 		lastfulstday = date.getFullYear()-1 +  "/12" + "/01";
-		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
+		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+"";
 	}else{
 		lastfulstday = date.getFullYear() + "/" ; 
 		lastfulstday += date.getMonth() < 10  ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoCancelListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoCancelListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoCancelListAjax.jsp
@@ -53,6 +53,7 @@
 });
 
 </script>
+	<input type="button" id="tooltopClick" data-tooltip="rev_popup02" style="display:none;"/>
     <div class="list_info">
         <p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
         <div>
src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoView.jsp
--- src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedKakaoView.jsp
@@ -25,7 +25,7 @@
 	//이전달 첫날/마지막날 조회
 	if(date.getMonth()+1 == 1){
 		lastfulstday = date.getFullYear()-1 +  "/12" + "/01";
-		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
+		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+"";
 	}else{
 		lastfulstday = date.getFullYear() + "/" ; 
 		lastfulstday += date.getMonth() < 10  ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
@@ -394,6 +394,7 @@
 	
 		// 전송건별
 	$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
+		
 		// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
 		popupTab($('#atBtn'),'1');
 		$('#tooltopClick').trigger('click');
@@ -683,7 +684,11 @@
                     <ul class="list_tab">
                         <li class="tab active"><button type="button" onclick="fnTabLoad('',0); return false;">전체</button></li>
                         <li class="tab"><button type="button" onclick="fnTabLoad('at',1); return false;">알림톡</button></li>
-<!--                         <li class="tab"><button type="button" onclick="fnTabLoad('ft',2); return false;">친구톡</button></li> -->
+                        <c:if test="${fn:contains(pageContext.request.requestURL , 'localhost') 
+				        || fn:contains(pageContext.request.requestURL , '192.168.0.33')
+				        || fn:contains(pageContext.request.requestURL , '119.193.215.98')}">
+	                        <li class="tab"><button type="button" onclick="fnTabLoad('ft',2); return false;">친구톡</button></li>
+				        </c:if>
 <!--                         <li class="tab"><button type="button" onclick="fnTabLoad('M',3); return false;">그림(MMS)</button></li> -->
                     </ul><!--// tab button -->
                 </div>
src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedMsgView.jsp
--- src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedMsgView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/reservedmsg/ReservedMsgView.jsp
@@ -25,7 +25,7 @@
 	//이전달 첫날/마지막날 조회
 	if(date.getMonth()+1 == 1){
 		lastfulstday = date.getFullYear()-1 +  "/12" + "/01";
-		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0);
+		lastfuledday = date.getFullYear()-1 +  "/12" + "/"+new Date(date.getFullYear()-1, 12, 0).getDate()+"";
 	}else{
 		lastfulstday = date.getFullYear() + "/" ; 
 		lastfulstday += date.getMonth() < 10  ? "0"+ (date.getMonth()) : date.getMonth()+"" ;
 
src/main/webapp/js/kakao/ft/friendstalkExcel.js (added)
+++ src/main/webapp/js/kakao/ft/friendstalkExcel.js
@@ -0,0 +1,153 @@
+/**
+ * 
+ * @author 		: 우영두
+ * @fileName 	: friendstalkExcel.js
+ * @date 		: 2024.01.08
+ * @description : 친구톡 excel 관련된 fuction .js
+ * =========================================================== 
+ * DATE          AUTHOR   NOTE 
+ * ----------------------------------------------------------- *
+ * 2024.01.08    우영두          최초 생성
+ * 
+ * 
+ * 
+ */
+
+
+$(document).ready(function(){
+
+	//치환문자 없는 엑섹불러오기 버튼 클릭시 파일 첨부 실행
+	$('.c1').click(function(){ // 엑셀파일 불러오기 선택 시
+		
+		$("#excelFile").click();
+		
+	});
+		
+});
+	
+
+//엑셀 파일 불러오기
+function excelExport(event){
+	
+	var data = new FormData(document.excelForm);
+	data.append("file0", $('#excelFile').prop('files')[0]);
+	
+	var fileValue = $("#excelFile").val().split("\\");
+	var fileName = fileValue[fileValue.length-1];
+	
+	var fileExt = fileName.split('.').pop().toLowerCase();
+
+	if(fileExt.length > 0){
+		if($.inArray(fileExt, ['txt','xls','xlsx']) == -1) {
+
+			alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
+			return false;
+
+	   	}
+	   
+		
+		var url = "";
+		
+		if(fileExt == "xls" || fileExt == "xlsx"){
+			
+			url = "/web/mjon/msgdata/sendExelFilePhoneNumAjax.do";
+			
+		}else if(fileExt = "txt"){
+			
+			url = "/web/mjon/msgdata/sendTxtFilePhoneNumAjax.do";
+			
+		}else{
+			
+			alert('txt, xls, xlsx 파일만 업로드 할수 있습니다.');
+			return;
+			
+		}
+		
+		//엑셀 데이터 변수에 자료가 있으면 지워준다.
+	   	if(excelAddr.length > 0){
+	    	
+	    	excelAddr = [];
+	    	
+	    }
+		
+		$.ajax({
+	        type: "POST",
+	        enctype: 'multipart/form-data',
+	        url: url,
+	        data: data,
+	        dataType:'json',
+	        async: true,
+	        processData: false,
+	        contentType: false,
+	        cache: false,
+	        //timeout: 600000,
+	        success: function (returnData, status) {
+				if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
+					
+					if(returnData.success){
+						
+						var data = returnData.data;
+						var message = returnData.message;
+						
+						if(message != '' ){
+							alert(returnData.message);
+						}
+						
+						if(data != null){
+							
+							$.each(data, function(i, item){
+								
+								if(checkHpNum(item.phone)){
+								
+									excelAddr.push({phone: item.phone, name: item.name, rep1: item.replace1, rep2: item.replace2, rep3: item.replace3, rep4: item.replace4});
+
+								}/* else{
+									
+									alert("엑셀 파일 데이터의 형식이 맞지 않는 부분이 있습니다.");
+					        		excelAddr = []; //엑셀 데이터 저장 변수 초기화
+					        		$("#excelFile").val(""); //첨부파일 input 초기화
+					        	    $("#excelNm").val("");  // 첨부파일 명 초기화
+					        	    fileName = "";
+					        		return;
+									
+								} */
+							 
+							});
+	
+						}
+						
+					}else{
+						alert(returnData.message);
+// 						alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
+						excelAddr = []; //엑셀 데이터 저장 변수 초기화
+		        		$("#excelFile").val(""); //첨부파일 input 초기화
+		        	    $("#excelNm").val("");  // 첨부파일 명 초기화
+		        	    fileName = "";
+						return;
+						
+					}
+				} else if(status== 'fail'){
+					alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
+					console.log("status : fail ~");
+				}
+			},
+			error: function (e) { 
+	        	alert("첨부파일 불러오는 중 오류가 발생하였습니다."); 
+	        	console.log("ERROR : ", e); 
+	        },
+			beforeSend : function(xmlHttpRequest) {
+	        	//로딩창 show
+	        	$('.loading_layer').addClass('active');				
+			},	        	        
+	        complete : function(xhr, textStatus) {
+	        	//로딩창 hide
+	        	$('.loading_layer').removeClass('active');
+			}
+	    });
+		
+		$("#excelFile").val("");
+	    $("#excelNm").val(fileName); 
+		
+	}
+	
+}
 
src/main/webapp/js/kakao/ft/ftPriceClclt.js (added)
+++ src/main/webapp/js/kakao/ft/ftPriceClclt.js
@@ -0,0 +1,329 @@
+/**
+ * 
+ * @author 		: 우영두
+ * @fileName 	: ftPriceClclt.js
+ * @date 		: 2024.01.12
+ * @description : 친구톡 및 대체문자 금액 연산.js
+ * =========================================================== 
+ * DATE          AUTHOR   NOTE 
+ * ----------------------------------------------------------- *
+ * 2024.01.12    우영두          최초 생성
+ * 
+ * 
+ * 
+ */
+
+
+/**
+ * 
+ * @param {*} totRows 수신자 수
+ * @description 금액 계산 function
+ * 				대체 문자 X
+ * 				카카오 금액 * 수신자 수 계산
+ */
+function totalFtPriceSum(totRows){
+	
+	var collNumCnt = parseInt(totRows); 	//받는사람 건수
+	var price = $("#kakaoFtPrice").val();							//개별 건수 금액
+	var totalPrice = 0;						//전체 금액
+	var totalStr = "0";							//전체 합계 금액
+	var userMoney = $('#hdUserMoney').text(); 	//헤더 영역 보유 금액 불러오기
+	
+	if(!userMoney > 0){
+		
+		userMoney = 0;
+		
+	}
+	//헤더 영역 보유 금액 콤마 문자 제거
+	if(userMoney != ''){
+		
+		userMoney = userMoney.replaceAll("," , "");
+		
+	}
+	
+	//대체문자가 있는 경우 대체문자의 단/장문에 따른 금액 계산
+	var subMsgSts = $("#send_fail_check").is(":checked");
+	
+	if(subMsgSts){
+		
+		var conLeng = conByteLeng($('#smsTxtArea').val()); // 내용 문자 입력 바이트 수 계산하기
+		if(conLeng > 90){
+			price = $("#longPrice").val();
+		}else{
+			price = $("#shortPrice").val();
+		}
+		
+	}
+	
+	totalPrice = price * collNumCnt;
+	
+	// 소수점 첫째자리 까지 표시
+	totalPrice = totalPrice.toFixed(1);
+	
+	if(totalPrice > 0){
+		
+		//totalStr = totalPrice.toFixed(2);
+		totalStr = totalPrice;
+		
+	}
+	
+	//개별 문자 단가 파라미터에 입력
+	$('#eachPrice').val(numberWithCommas(price));
+	
+	//결제금액 합계 파라이터에 입력
+	$('#totPrice').val(numberWithCommas(totalStr));
+	
+	//결제금액 합계 화면에 표시
+	$('#totalPriceTxt').text(numberWithCommas(totalStr));
+	
+	$('#repPriceTxt').hide();
+	
+	return totalStr;
+	
+}
+
+
+
+/*
+ * ======================================================================================================================
+ * 
+ * */
+
+//카카오 mms sms 단가 셋팅
+var KAKAO_FT_PRICE	= '';
+var SHORT_PRICE		= '';
+var LONG_PRICE		= '';
+
+/*$(document).ready(function(){
+
+	// 카카오 mms sms 단가 셋팅
+	KAKAO_FT_PRICE	= $('#kakaoFtPrice').val();
+	SHORT_PRICE		= $('#shortPrice').val();
+	LONG_PRICE		= $('#longPrice').val();
+
+	///////////////////////////////////////// Mutation Observer
+	// 감시 대상 node 선택
+	// 변수X 수신자 목록
+	let target01 = document.getElementById('wrap01_body');
+	// 변수O 수신자 목록
+	let target02 = document.getElementById('wrap02');
+	// 대체 문자 단문 장문 텍스트 노드
+	let target03 = document.getElementById('afterDeny');
+
+	// 감시자의 설정
+	let option = {
+		subtree : true			// 대상 노드의 자식 요소뿐만 아니라 후손 요소의 변화까지 감지
+		, childList : true		// 대상 노드의 자식 요소(텍스트 포함)의 변화 감지
+		, attributes : true		// 해당 노드의 attribute 속성
+		
+		// , characterData: true	// 대상 노드의 데이터 변화 감지
+	};
+
+
+	// wrap01 감시자 인스턴스 만들기
+	let observer_wrap01 = new MutationObserver((mutations) => {
+		// 노드가 변경 됐을 때의 작업
+		fn_priceClclt();
+	});
+	
+	// wrap02 감시자 인스턴스 만들기
+	let observer_wrap02 = new MutationObserver((mutations) => {
+		// 노드가 변경 됐을 때의 작업
+		fn_priceClclt();
+	});
+
+	// wrap03 감시자 인스턴스 만들기
+	let observer_wrap03 = new MutationObserver((mutations) => {
+		// 노드가 변경 됐을 때의 작업
+		fn_priceClclt();
+	});
+
+	
+
+
+	// 대상 노드에 감시자 전달
+	observer_wrap01.observe(target01, option);
+	observer_wrap02.observe(target02, option);
+	observer_wrap03.observe(target03, option);
+
+	///////////////////////////////////////// //Mutation Observer
+
+});*/
+
+/**
+ * @description 금액 계산 function
+ */
+function fn_priceClclt(){
+
+	// 미리보기 텍스트
+	var templateHtml = $('#smsTxtArea').val();
+	// var templateHtml = $('.template_text').html();
+	
+	// 수신 번호 개수
+	var phoneSu = $('.phoneArea').length;
+	// 대체문자 있는지 확인
+	var isSendFailChecked = $("#send_fail_check").is(":checked");
+	// 치환문자 여부 확인
+	var txtReplYn = $('#txtReplYn').val()
+	// 대체문자 하위에 장문 / 단문 select
+	var msgTypeText = $('.msg_com').text().trim();
+
+	if(typeof templateHtml == 'undefined') return false;
+	else if(isSendFailChecked && txtReplYn=='Y') fn_sendFailCheckedAndTxtRepl_Y(templateHtml, msgTypeText, phoneSu); // 대체문자 체크 & 치환문자 Y
+	else if(isSendFailChecked && txtReplYn=='N') fn_sendFailCheckedAndTxtRepl_N(msgTypeText, phoneSu); // 대체문자 체크 & 치환문자 N
+	else fn_sendFailUnChecked(phoneSu);
+
+}
+
+/**
+ * 
+ * @param {*} phoneSu 수신자 수
+ * @description 금액 계산 function
+ * 				대체 문자 X
+ * 				카카오 금액 * 수신자 수 계산
+ */
+function fn_sendFailUnChecked(phoneSu){
+	
+	// 카카오 금액 * 수신자 수
+	// fn_writePriceText() 첫 파라미터가 null이면 카카오 전송으로 인식
+	fn_writePriceText('', phoneSu);
+	// $('#totalPriceTxt').text((KAKAO_AT_PRICE * phoneSu).toFixed(1));
+	fn_priceText('알림톡', phoneSu);
+}
+
+/**
+ * 
+ * @param {*} templateHtml 템플릿html
+ * @param {*} msgTypeText 발송 타입
+ * @param {*} phoneSu 수신자 수
+ * @description 금액 계산 function
+ * 				대체 문자 O
+ * 				치환 문자 O
+ */
+function fn_sendFailCheckedAndTxtRepl_Y(templateHtml, msgTypeText, phoneSu){
+
+	// 대체문자 하위에 html 그대로의 byte 계산이 단문일 경우에만 치환 후 장문이 있는지 확인
+	if(msgTypeText == '단문'){
+		msgTypeText =  fn_transHtml(msgTypeText, templateHtml);
+	}
+
+	fn_writePriceText(msgTypeText, phoneSu);
+	fn_priceText(msgTypeText, phoneSu);
+	
+
+
+}
+
+/**
+ * 
+ * @param {*} msgTypeText 발송 타입
+ * @param {*} phoneSu 수신자 수
+ * @description 금액 계산 function
+ * 				대체 문자 O
+ * 				치환 문자 X
+ */
+function fn_sendFailCheckedAndTxtRepl_N(msgTypeText, phoneSu){
+	
+	fn_priceText(msgTypeText, phoneSu);
+	fn_writePriceText(msgTypeText, phoneSu);
+}
+
+
+/**
+ * 
+ * @param {*} msgTypeText 발송 타입
+ * @param {*} phoneSu 수신자 수
+ * @returns 
+ * @description 발송 금액 계산 / 노출
+ */
+function fn_priceText(msgTypeText, phoneSu){
+
+	// $("#repPriceTxt").is(":visible") => 발송 금액 show hide 여부
+	if(phoneSu === 0){
+
+		$('#repPriceTxt').empty();
+		$('#repPriceTxt').hide();
+		return false;
+	}
+	// 텍스트 초기화
+	$('#repPriceTxt').show();
+	$('#repPriceTxt').empty();
+
+	var priceText = '$SENDTYPE$ :<strong>$SU$</strong>건';
+	priceText = priceText.replace('$SENDTYPE$', msgTypeText).replace('$SU$', phoneSu);
+
+	$('#repPriceTxt').append(priceText);
+}
+
+/**
+ * @description 발송금액 라인 text / 금액 초기화
+ */
+function priceInit(){
+	if($("#repPriceTxt").is(":visible")){
+		$('#repPriceTxt').empty();
+		$('#repPriceTxt').hide();
+	}
+	$('#totalPriceTxt').text(0.0);
+
+}
+
+/**
+ * 
+ * @param {*} msgTypeText 발송 타입
+ * @param {*} phoneSu 수신자 수
+ * @description 발송 금액 '발송타입:00건' 노출
+ */
+function fn_writePriceText(msgTypeText, phoneSu){
+
+	var price;
+	msgTypeText = msgTypeText.trim();
+	if(msgTypeText == '단문') price = SHORT_PRICE * phoneSu;
+	else if(msgTypeText == '장문') price = LONG_PRICE * phoneSu;
+	else  price = KAKAO_AT_PRICE * phoneSu; // 카카오
+
+	$('#totalPriceTxt').text((price).toFixed(1));
+}
+
+
+/**
+ * 
+ * @param {*} msgTypeText 발송 타입 : 단문
+ * @param {*} templateHtml 템플릿 html
+ * @returns msgTypeText : 단문 or 장문
+ * @description 치환 데이터 있는 경우 단문일 경우만 호출
+ * 				치환 후 장문 데이터일경우 'returns 장문'으로 끝남
+ */
+function fn_transHtml(msgTypeText, templateHtml){
+
+	// 템플릿
+	templateHtml = templateHtml.trim().replace(/(<br>|<br\/>|<br \/>)/g, '\n');
+	// 치환 부분 '#{내용}'만 추출
+	var varList = $("#excelTemplateContent").val().match(/#\{([^}]+)\}/g);
+	// 템플릿을 반복할때마다 담는 temp 선언
+	var tempTemplateHtml;
+	// 치환 데이터 담는 변수 선언
+	var replaceStr;
+
+	// excelBody 부분 반복 시작
+	$('.excelBody').each(function(i, t){
+		tempTemplateHtml = templateHtml;
+
+		$(this).find('.transData').each(function(index, item){
+			// console.log('item text :: ', $(item).text().trim());
+			replaceStr = $(item).text().trim();
+			tempTemplateHtml = tempTemplateHtml.replace(varList[index], replaceStr);
+		});
+		// 치환 후 byte 계산
+		// 장문이면 break;
+		if(90 < conByteLeng(tempTemplateHtml))
+		{
+			msgTypeText = '장문';
+			return false;
+		}
+	});
+
+
+	return msgTypeText;
+}
+
+	(No newline at end of file)
 
src/main/webapp/js/kakao/ft/ftTabulator.js (added)
+++ src/main/webapp/js/kakao/ft/ftTabulator.js
@@ -0,0 +1,869 @@
+/**
+ * 
+ * @author 		: 우영두
+ * @fileName 	: ftTabulator.js 
+ * @date 		: 2024.01.09
+ * @description : 받는사람 목록 tabulator 관련 js
+ * =========================================================== 
+ * DATE          AUTHOR   NOTE 
+ * ----------------------------------------------------------- *
+ * 2024.01.09    우영두          최초 생성
+ * 
+ * 
+ * 
+ */
+
+$(document).ready(function (){
+	
+	//받는사람 연락처 내용 처리
+	//Tabulator AJAX Data Loading
+	tableL = new Tabulator(".callList_box", {
+		height:"255px",
+	    layout:"fitColumns",
+	    //data:tabledata,
+	    //autoColumns:true,
+	    headerHozAlign:"center",
+	    validationMode:"highlight",
+	    //clipboard:false,
+	    //clipboardCopySelector:"table",
+	    //clipboardPasteAction:"insert", // insert, update, replace
+	    placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional)
+	    resizableColumns:false,
+	 	columns:[ //Define Table Columns
+	 		{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
+	 	        cell.getRow().toggleSelect();
+		 	}}, 
+		 	{title:"이름", hozAlign:"center", field:"name", editor:"input", validator:["maxLength:12"], cellEdited:function(cell){
+		 	    //cell - cell component
+		 	    fnReplCell();
+		    }},
+		 	{title:"휴대폰", hozAlign:"center", field:"phone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:12"], cellEdited:function(cell){
+		 	    //cell - cell component
+		 	    fnDuplPhone();
+		    }},
+		 	{title:"[*1*]", hozAlign:"center", field:"rep1", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
+		 	    //cell - cell component
+		 	    fnReplCell();
+		    }},
+		 	{title:"[*2*]", hozAlign:"center", field:"rep2", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
+		 	    //cell - cell component
+		 		fnReplCell();
+		    }},
+		 	{title:"[*3*]", hozAlign:"center", field:"rep3", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
+		 	    //cell - cell component
+		 		fnReplCell();
+		    }},
+		 	{title:"[*4*]", hozAlign:"center", field:"rep4", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
+		 	    //cell - cell component
+		 		fnReplCell();
+		    }},
+		 	
+	 	],
+	 	validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 - 아직 잘 모르겠음 
+	        //take action on validation fail
+	 		var valid = cell.isValid();
+	 		var fieldNm = cell.getField();
+	 		var cellVal = cell.getValue();
+	 		var returnVal = "";
+	 		if(!valid){
+	 			
+	 			if(fieldNm == "name"){
+	 				alert("받는사람 이름은 최대 12글자까지만 입력 가능합니다.");
+	 				cell.setValue(strMaxLengthSubstring(cellVal, 11)); //스크립트 함수가 0부터 시작이므로 원하는 글자수 -1을 해줘야한다.
+	 				cell.clearValidation();
+	 			}else if(fieldNm == "phone"){
+	 				alert("휴대폰번호는 하이픈(-)을 제외한 숫자만 정확히 입력해 주세요.");
+	 			}else{
+		 			alert("치환문자를 정확히 입력해 주세요. 40글자 이내로 입력 가능합니다.");
+		 			cell.setValue(strMaxLengthSubstring(cellVal, 39));
+		 			cell.clearValidation();
+	 			}
+	 			
+	 			//해당 셀 데이터 삭제
+	 			//cell.setValue("");
+	 			
+	 		}
+	 		return value % parameters.phone;
+	    },
+
+	});
+	
+	 
+	//주소록 불러오기 팝업 내용
+	//Tabulator AJAX Data Loading
+	tableAddr = new Tabulator(".callAddr_box", {
+		height:"255px",
+	    layout:"fitColumns",
+	    headerHozAlign:"center",
+	    validationMode:"highlight",
+	    placeholder:"주소록 그룹을 선택해 주세요.", //fit columns to width of table (optional)
+	    resizableColumns:false,
+	 	columns:[ //Define Table Columns
+	 		{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
+	 	        cell.getRow().toggleSelect();
+		 		}
+		 	}, 
+		 	{title:"그룹명", hozAlign:"center", field:"addrGroupNm", editor:"input", width:120, validator:["required","minLength:2", "maxLength:40"]},
+		 	{title:"이름", hozAlign:"center", field:"addrName", editor:"input",  width:120, validator:["maxLength:12"]},
+		 	{title:"휴대폰번호", hozAlign:"center", field:"addrPhone", editor:"input", width:120, validator:["required","minLength:10", "maxLength:11"]},
+		 	
+	 	],
+	 	validationFailed:function(cell, value, parameters){ // 유효성 체크 함수 - 아직 잘 모르겠음 
+	 		var valid = cell.isValid();
+	 		var fieldNm = cell.getField();
+	 		if(!valid){
+	 			if(fieldNm == "addrName"){
+	 				alert("받는사람 이름은 최대 12글자까지만 입력 가능합니다.");
+	 			}else if(fieldNm == "addrPhone"){
+	 				alert("휴대폰번호는 하이픈(-)을 제외한 숫자만 정확히 입력해 주세요.");
+	 			}else if(fieldNm == "addrGroupNm"){
+	 				alert("그룹명을 정확히 입력해 주세요. 2 ~ 40글자 이내로 입력 가능합니다.");
+	 			}
+	 			
+	 			//해당 셀 데이터 삭제
+	 			cell.setValue("");
+	 		}
+	 		return value % parameters.addrPhone;
+	    },
+
+	});
+	
+		
+	//받는사람 번호 버튼 클릭시 Tabulator에 데이터 넣어주기
+	$('.addCallToF').click(function(){ 
+		
+		var callToNum = $('#callTo').val();
+		if(callToNum == null || callToNum == ""){
+			
+			alert("받는사람 번호를 입력해 주세요.");
+			return false;
+			
+		}else if(!checkHpNum(callToNum)){	
+			
+			alert("올바른 전화번호를 입력해 주세요.");
+			$('#callTo').val("");
+			return false;
+		}
+		
+		//핸드폰 번호에 '-' 문자 제거하기
+		callToNum = removeDash(callToNum);
+	    
+	    //기존 받는사람 연락처 모두 불러오기
+	    var data = tableL.getRows();
+	    var tableData = [];
+	    var dpCnt = 0;
+	    for(var i=0; i < tableL.getRows().length; i++){
+	    	
+	    	if(callToNum == data[i].getData().phone){
+	    		
+	    		dpCnt++;
+	    	
+	    	}
+	    	
+	    }
+	    
+	    if(dpCnt > 0){
+	    	
+	    	alert("받는사람 리스트에 동일한 연락처가 있습니다.");
+	    	$('#callTo').val("");
+	    	return false;
+	    
+	    }else{
+	    	
+	    	tabledata = [{phone: callToNum},];
+	    	
+	    	//빈 row 데이터 삭제하기
+	    	var befData = tableL.getRows();
+	    	var totLen = tableL.getRows().length;
+	    	
+	    	for(var i=0; i < totLen; i++){
+		    	
+		    	tableData.push({phone: data[i].getData().phone.trim(), name: data[i].getData().name});
+		    	
+		    }
+			
+	    	//연락처 추가해 주기
+			addPhoneInfo(tabledata);
+	    	
+		    $('#callTo').val("");
+	    
+	    }
+		
+	});
+	
+	
+	//받는사람 전체삭제 버튼 처리
+	$('.all_del').click(function(){
+		
+		var data = tableL.getRows();	
+	
+		if(data == null || data == ""){
+			
+			alert("받는사람을 추가해 주세요.");
+			return false;
+		
+		}else{
+			
+			if(confirm("받는사람 목록을 모두 삭제하시겠습니까?")){
+				tableL.clearData();
+				$("#rowTotCnt").text(0); //총건수 수정
+				$("#rowDupCnt").text(0); //중복건수 수정
+				totalFtPriceSum(0);		 //결제 금액 수정
+			}
+	
+		}
+		
+	});
+	
+	// 받는사람 선택삭제 버튼 처리해주기
+	$('.select_del').click(function(){
+		
+		if(tableL == null || tableL == ""){
+			
+			alert("받는사람을 추가해 주세요.");
+			return false;
+		
+		}
+		
+		var selectedData = tableL.getSelectedRows();
+		
+		if(selectedData == "" || selectedData == null){
+			
+			alert("삭제할 연락처를 선택해주세요.");
+			return false;
+		
+		}else{ // 선택한 Row 데이터 삭제하기
+			
+			if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){
+				
+				for(var i=0; i < selectedData.length; i++){
+					
+					selectedData[i].delete();
+				
+				}
+			
+				totRows = tableL.getRows().length;
+			    
+				var smsTxtArea = $('#inputTemplateContent').val();
+				
+				//일괄변환 문구 결제금액 처리
+				if(smsTxtArea.indexOf("#{이름}") > -1
+						|| smsTxtArea.indexOf("#{1}") > -1
+						|| smsTxtArea.indexOf("#{2}") > -1
+						|| smsTxtArea.indexOf("#{3}") > -1
+						|| smsTxtArea.indexOf("#{4}") > -1){
+					
+					fnFtReplCell();
+					
+				}else{
+					//결제 금액 구하기
+					totalFtPriceSum(totRows);
+				}
+				
+				//결제금액 합계 파라이터에 입력
+				$('#rowTotCnt').text(numberWithCommas(totRows));
+				
+			}
+
+		}
+		
+	});
+	
+	
+	
+	//주소록 불러오기 버튼 클릭시
+	$('.popupAddr').click(function(){
+		
+		var login = '${LoginVO.id}';
+		
+		if(login == null || login == ''){
+			
+			alert("로그인 후 이용이 가능합니다.");
+			return false;
+			
+		}
+		
+		$("#addrGroupLoad").load("/web/mjon/msgdata/selectAddrGroupListAjax.do", "" ,function(response, status, xhr){
+			//리스트 스크롤 처리해주기
+			$(".adr_pop_list").mCustomScrollbar({
+				axis: 'y',
+				scrollbarPosition: "outside",
+				theme: "dark",
+				autoHideScrollbar: false
+			});
+		});
+		
+	});
+
+	
+	//엑섹불러오기 버튼 클릭시 파일 첨부 실행
+	$('.upImg').click(function(){ // 엑셀파일 불러오기 선택 시
+		
+		$("#imgFile").click();
+		
+	});
+	
+	//최근전송내역 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기)
+	$(document).on('click', '#latestAddPhone', function (){
+
+		var addPhoneList = []; //신규로 추가할 전화번호 저장변수
+		
+		$("input:checkbox[name='latAddrChk']:checked").each(function(index){
+			
+			var chkPhone = $(this).val();
+			
+			if(!checkHpNum(chkPhone)){
+				
+				alert("올바른 전화번호가 아닙니다.");
+				return false;
+				
+			}else{
+				
+				addPhoneList.push({phone: removeDash(chkPhone.trim())});
+				
+			}
+			
+		});
+		
+		
+		if(addPhoneList.length > 0){
+			//연락처 추가해 주기
+			addPhoneInfo(addPhoneList);
+			$("#btnLatestAddPhoneClose").trigger("click");
+		}
+		else {
+			alert("연락처를 선택해주세요.");
+			return false;
+		}		
+		
+		//중복연락처 제거
+		//var removeDuplData = dupliPhoneData(addPhoneList);
+		
+		//받는사람 목록에 추가
+		//tableL.addData(removeDuplData);
+	    
+	    //총 받는사람 수 계산
+	    //totRows = tableL.getRows().length;
+	    //updateTotCnt(totRows);
+	    
+	  	//결제 금액 구하기
+	    //totalPriceSum(totRows);
+		
+	});
+	
+	//최근전송내역 팝업 선택 취소 버튼 처리
+	$(document).on('click', '#latestCancelPhone', function (){
+		
+		$("input[name=latAddrChk]").prop("checked", false);
+		
+	});
+	
+	//최근전송내역 팝업 삭제 버튼 처리
+	$(document).on('click', '#latestAddrDel', function (){
+		
+		$(this).parent("#latestLi").remove();
+		
+	});
+	
+	//자주보내는 번호 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기)
+	$(document).on('click', '#bookMarkAddPhone', function (){
+
+		var addPhoneList = []; //신규로 추가할 전화번호 저장변수
+		
+		$("input:checkbox[name='bookAddrChk']:checked").each(function(index){
+			
+			var chkPhone = $(this).val();
+			
+			if(!checkHpNum(chkPhone)){
+				
+				alert("올바른 전화번호가 아닙니다.");
+				return false;
+				
+			}else{
+				
+				addPhoneList.push({phone: removeDash(chkPhone.trim())});
+				
+			}
+			
+		});
+		
+		if(addPhoneList.length > 0){
+			//연락처 추가해 주기
+			addPhoneInfo(addPhoneList);
+			$("#btnLatestAddPhoneClose").trigger("click");
+		}
+		else {
+			alert("연락처를 선택해주세요.");
+			return false;
+		}		
+		
+		//중복연락처 제거
+		//var removeDuplData = dupliPhoneData(addPhoneList);
+		
+		//받는사람 목록에 추가
+		//tableL.addData(removeDuplData);
+	    
+	    //총 받는사람 수 계산
+	    //totRows = tableL.getRows().length;
+	    //updateTotCnt(totRows);
+	    
+	  	//결제 금액 구하기
+	    //totalPriceSum(totRows);
+		
+	});
+	
+	//자주보내는 번호 팝업 선택 취소 버튼 처리
+	$(document).on('click', '#bookMarkCancelPhone', function (){
+		
+		$("input[name=bookAddrChk]").prop("checked", false);
+		
+	});
+	
+	//자주보내는 번호 팝업 삭제 버튼 처리
+	$(document).on('click', '#bookMarkAddrDel', function (){
+		
+		$(this).parent("#bookMarkLi").remove();
+		
+	});
+	
+	// 자주보내는 번호 팝업 닫기 버튼 처리
+	$(document).on('click', '#btnLatestAddPhoneClose', function (){
+		// 자주보내는 번호 체크박스 해제처리
+		setCheckBoxUnChecked();		
+	});	
+	
+	// 자주보내는 번호 체크박스 해제처리
+	function setCheckBoxUnChecked() {
+		$("input[name=latAddrChk]").prop("checked", false);
+		$("input[name=bookAddrChk]").prop("checked", false);
+	}
+	
+	
+	//오류 검사 버튼 처리
+	$('.check_validity').click(function(){
+		
+		var invalid = tableL.getInvalidCells();		//오류 데이터 체크
+		var dataLen = tableL.getRows().length;		//연락처 데이터 갯수
+		var totLen = invalid.length;				//오류 데이터 갯수
+		var errMsg = "";							//최종 alert에 표시할 메시지 저장 변수
+		
+		if(dataLen > 0){ //연락처 정보가 있으면 수행
+			
+			if(totLen > 0){ //내용에 오류가 있으면 수행
+				
+				//오류 데이터 값 저장
+				for(var i=0; i < totLen; i++){
+					
+					var cellValue = invalid[i].getValue();
+					
+					if(i == 0){
+						
+						errMsg = cellValue;
+						
+					}else{
+						
+						errMsg = errMsg +", "+ cellValue;
+						
+					}
+					
+				}
+				
+				if(errMsg == "" || errMsg == null){
+					
+					alert("내용에 오류가 있습니다.");
+					return false;
+					
+				}else{
+					
+					alert(errMsg + "의 내용에 오류가 있습니다.");
+					return false;
+					
+				}
+				
+			}else{
+				
+				alert("오류 데이터가 없습니다.");
+				return false;
+				
+			}
+			
+		}else{
+			
+			alert("연락처를 입력해 주세요.");
+			return false;
+			
+		}
+		
+	});
+	
+});
+
+var tableErrorData = [];
+var totRows = 0; // 좌측 받는사람 총 갯수
+
+
+/*
+* 토탈 카운트 화면에 노출
+* 변수 없는 리스트만 체크
+*/ 
+function updateTotCnt(){
+	
+	$("#rowTotCnt").text($('#wrap01_body .list_body').length);
+
+}
+
+//주소록 불러오기에서 수신자 리스트 화면에 추가해주기
+function addPhoneInfo(data){
+	
+	if(data == null){
+		
+		alert("연락처 정보가 없습니다.");
+		return;
+		
+	}else{
+		
+		var idx = 0;
+		var newData = data;//중복 연락처는 하나만 남기고 모두 제거
+		
+		var recTableData = tableL.getRows();		 // 받는사람 리스트의 전체 목록을 저장
+		var tableData = [];
+		
+		//기존 받는사람 리스트를 배열에 미리 담아둔다.
+		if(recTableData.length > 0){
+			
+			for(var j=0; j < recTableData.length; j++){
+				
+				tableData.push({phone: removeDash(recTableData[j].getData().phone) , name: recTableData[j].getData().name, rep1: recTableData[j].getData().rep1, rep2: recTableData[j].getData().rep2, rep3: recTableData[j].getData().rep3, rep4: recTableData[j].getData().rep4});
+			
+			}
+		
+		}
+		
+		//받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다.
+		for(var i=0; i < newData.length; i++){
+			
+			tableData.push({phone: removeDash(newData[i].phone) , name: newData[i].name, rep1: newData[i].rep1, rep2: newData[i].rep2, rep3: newData[i].rep3, rep4: newData[i].rep4});
+			
+		}
+		
+		var temp = tableData.length;
+		
+		//기존 수신 리스트를 지워준 후 신규 전체 리스트를 추가해준다.
+		tableL.clearData(); //기존 받는사람 목록을 삭제.
+		tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기
+		_fileForm2 = []; //form file data 초기화
+		_fileIdx = 0;	//form file idx 초기화
+		
+		totRows = tableL.getRows().length; 
+		
+		var smsTxtArea = $('#inputTemplateContent').val();
+		
+		//일괄변환 문구 결제금액 처리
+		if(smsTxtArea.indexOf("#{이름}")  > -1 
+				|| smsTxtArea.indexOf("#{1}") > -1
+				|| smsTxtArea.indexOf("#{2}") > -1
+				|| smsTxtArea.indexOf("#{3}") > -1
+				|| smsTxtArea.indexOf("#{4}") > -1){
+
+			fnFtReplCell();
+			
+		}else{
+			
+			//결제 금액 구하기
+		    totalFtPriceSum(totRows);
+			
+		}
+		
+		//결제금액 합계 파라이터에 입력
+		$('#rowTotCnt').text(numberWithCommas(totRows));
+		
+	}
+	
+}
+
+
+function addrToList(){
+	
+	var selectedData = tableAddr.getSelectedRows();
+	var tableData = [];
+	
+	if(selectedData == "" || selectedData == null){
+		
+		alert("주소록을 선택해 주세요.");
+		return false;
+	
+	}else{ // 선택한 Row 데이터 저장해주기
+		
+		for(var i=0; i < selectedData.length; i++){
+			
+			//좌측 받는사람 리스트를 담아둔 배열에 데이터를 추가해 준다.
+			tableData.push({phone: removeDash(selectedData[i].getData().addrPhone), 
+				name: selectedData[i].getData().addrName, 
+				rep1: selectedData[i].getData().addrRep1, 
+				rep2: selectedData[i].getData().addrRep2, 
+				rep3: selectedData[i].getData().addrRep3, 
+				rep4: selectedData[i].getData().addrRep4}
+			);
+		
+		}
+	
+		//선택한 데이터 받는사람 리스트에 추가해 주기
+		addPhoneInfo(tableData);
+		$(".closeAddr").trigger("click");
+		
+		//주소록 레이어 팝업의 Tabulator 데이터 지워주기
+		tableAddr.clearData();
+
+	}
+	
+}
+
+
+//특정문구 일괄변환 문자길이 체크 하기
+function fnFtReplCell(){
+	
+	var smsTxtArea = $('#inputTemplateContent').val();
+	
+	//이벤트 잔여 캐시 자동 처리 관련 변수
+	var eachPrice = parseFloat($("#eachPrice").val());
+	var kakaoFtPrice = parseFloat($("#kakaoFtPrice").val());
+	var shortPrice = parseFloat($("#shortPrice").val());
+	var longPrice = parseFloat($("#longPrice").val());
+	
+	if(smsTxtArea.indexOf("#{이름}")  > -1 
+			|| smsTxtArea.indexOf("#{1}") > -1
+			|| smsTxtArea.indexOf("#{2}") > -1
+			|| smsTxtArea.indexOf("#{3}") > -1
+			|| smsTxtArea.indexOf("#{4}") > -1){
+		
+		
+		var rowData = tableL.getRows();
+		var recTableData = tableL.getRows();		 // 받는사람 리스트의 전체 목록을 저장
+		//var tableData = [];
+		
+		var msg_short = 0;		//단문문자 갯수
+		var msg_long = 0;		//장문문자 갯수
+		
+		//일괄변환문자 포함 여부 변경 - 문자내용에 치환변환 문자는 있지만 받는사람 데이터에 치환 데이터를 안넣는 경우 오류가 발생하여 상태값 입력 위치 상단으로 변경함.
+		//치환데이터가 없는 경우 Alert 띄우고 빠져나가기 때문에  치환문자 상태 체크값이 누락되어서 변경함 - 20230407 우영두
+		$('#txtReplYn').val("Y");
+		
+		var nmStatus = false;
+		var rep1Status = false;
+		var rep2Status = false;
+		var rep3Status = false;
+		var rep4Status = false;
+		var varValStatus = true;
+		
+		if(smsTxtArea.indexOf("#{이름}")  > -1){
+			
+			nmStatus = true;
+		}
+		
+		if(smsTxtArea.indexOf("#{1}")  > -1){
+			
+			rep1Status = true;
+		}
+		
+		if(smsTxtArea.indexOf("#{2}")  > -1){
+			
+			rep2Status = true;
+		}
+		
+		if(smsTxtArea.indexOf("#{3}")  > -1){
+			
+			rep3Status = true;
+		}
+		
+		if(smsTxtArea.indexOf("#{4}")  > -1){
+			
+			rep4Status = true;
+		}
+
+		
+		//기존 받는사람 리스트를 배열에 미리 담아둔다.
+		if(recTableData.length > 0){
+			
+			for(var j=0; j < recTableData.length; j++){
+				
+				var smsTxt = smsTxtArea;
+				
+				if(typeof recTableData[j].getData().name != 'undefined' && recTableData[j].getData().name != null && recTableData[j].getData().name != ""){
+					
+					var name = recTableData[j].getData().name;
+					smsTxt = stringReplaceAll(smsTxt, "#{이름}", name);
+					
+				}else{
+					
+					if(nmStatus){
+						//alert("#{이름} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
+						varValStatus = false;
+						//break;
+					}
+					
+				}
+				
+				if(typeof recTableData[j].getData().rep1 != 'undefined' && recTableData[j].getData().rep1 != null && recTableData[j].getData().rep1 != ""){
+					
+					var rep1 = recTableData[j].getData().rep1;
+					smsTxt = stringReplaceAll(smsTxt, "#{1}", rep1);
+					
+				}else{
+					
+					if(rep1Status){
+						//alert("#{1} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
+						varValStatus = false;
+						//break;
+					}
+					
+				}
+				
+				if(typeof recTableData[j].getData().rep2 != 'undefined' && recTableData[j].getData().rep2 != null  && recTableData[j].getData().rep2 != ""){
+					
+					var rep2 = recTableData[j].getData().rep2;
+					smsTxt = stringReplaceAll(smsTxt, "#{2}", rep2);
+					
+				}else{
+					
+					if(rep2Status){
+						//alert("#{2} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
+						varValStatus = false;
+						//break;
+					}
+					
+				}
+				
+				if(typeof recTableData[j].getData().rep3 != 'undefined' && recTableData[j].getData().rep3 != null  && recTableData[j].getData().rep3 != ""){
+					
+					var rep3 = recTableData[j].getData().rep3;
+					smsTxt = stringReplaceAll(smsTxt, "#{3}", rep3);
+					
+				}else{
+					
+					if(rep3Status){
+						//alert("#{3} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
+						varValStatus = false;
+						//break;
+					}
+					
+				}
+				
+				if(typeof recTableData[j].getData().rep4 != 'undefined' && recTableData[j].getData().rep4 != null && recTableData[j].getData().rep4 != ""){
+					
+					var rep4 = recTableData[j].getData().rep4;
+					smsTxt = stringReplaceAll(smsTxt, "#{4}", rep4);
+					
+				}else{
+					
+					if(rep4Status){
+						//alert("#{4} 변수에 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
+						varValStatus = false;
+						//break;
+					}
+					
+				}
+				
+				var msgLen = strMaxCharacterCnt(smsTxt);
+				var maxLenChar = 1000;
+				
+				var imgType = $("#imageType").val();
+				
+				//일반 이미지 첨부시 글자수 최대 400글자
+				if(imgType == "I"){
+					
+					maxLenChar = 400;
+					
+				}else if(imgType == "W"){
+					//와이드 이미지 첨부시 글자수 최대 76글자
+					maxLenChar = 76;
+					
+				}
+				
+				if(msgLen < 1){
+					
+					
+				}else if(msgLen > maxLenChar){
+					
+					alert("친구톡 내용은 "+ maxLenChar +" 자를 넘을 수 없습니다.");
+					tableL.clearData(); //기존 받는사람 목록을 삭제.
+					return false;
+					
+				}
+				
+			}
+			
+			//치환문자에 데이터가 누락된 경우 알림 메세지를 보여주고 받는사람 목록을 지워준다.
+			/*if(!varValStatus){
+				
+				alert("치환변수 데이터가 없는 항목이 있습니다. 받는사람 변수 데이터를 확인해 주세요.");
+				tableL.clearData(); //기존 받는사람 목록을 삭제.
+				return false;
+			
+			}*/
+			
+		}
+		
+		//결제 금액 구하기
+	    totalFtPriceSum(tableL.getRows().length);
+		
+	}
+	
+}
+
+
+//오류 검사 버튼 처리
+$('.check_validity').click(function(){
+	
+	var invalid = tableL.getInvalidCells();		//오류 데이터 체크
+	var dataLen = tableL.getRows().length;		//연락처 데이터 갯수
+	var totLen = invalid.length;				//오류 데이터 갯수
+	var errMsg = "";							//최종 alert에 표시할 메시지 저장 변수
+	
+	if(dataLen > 0){ //연락처 정보가 있으면 수행
+		
+		if(totLen > 0){ //내용에 오류가 있으면 수행
+			
+			//오류 데이터 값 저장
+			for(var i=0; i < totLen; i++){
+				
+				var cellValue = invalid[i].getValue();
+				
+				if(i == 0){
+					
+					errMsg = cellValue;
+					
+				}else{
+					
+					errMsg = errMsg +", "+ cellValue;
+					
+				}
+				
+			}
+			
+			if(errMsg == "" || errMsg == null){
+				
+				alert("내용에 오류가 있습니다.");
+				return false;
+				
+			}else{
+				
+				alert(errMsg + "의 내용에 오류가 있습니다.");
+				return false;
+				
+			}
+			
+		}else{
+			
+			alert("오류 데이터가 없습니다.");
+			return false;
+			
+		}
+		
+	}else{
+		
+		alert("연락처를 입력해 주세요.");
+		return false;
+		
+	}
+	
+});
src/main/webapp/js/kakao/templateComm.js
--- src/main/webapp/js/kakao/templateComm.js
+++ src/main/webapp/js/kakao/templateComm.js
@@ -70,27 +70,29 @@
 		
 	}
 	
-	
+	//제한글자수를 넘겼을 경우 최대 글자수까지 잘라주고 미리보기 및 글자수 표시처리
 	if(conLeng > limitLeng){
 		
 		var splicecon = strMaxLengthSubstring(contents, limitLeng-1);
 		 $('#inputTemplateContent').val(splicecon);
-		return false;
+		contents = splicecon;
+		conLeng = strMaxCharacterCnt(contents);
 		
-	}else{//현재 입력한 글자수 우측 하단에 표시해 주기
-		
-		var repContent = "";
-		repContent = contents.replace(/(?:\r\n|\r|\n)/g, '<br/>');
-		
-		$('.nowChar').text(conLeng + " /");
-		$('.totChar').text(" "+limitLeng);
-		$('.template_text').show();
-		if(repContent != ''){
-			$('.template_text').html(repContent);
-		}else{
-			$('.template_text').html("내용 미리보기");
-		}
-		
+	}
+	
+	var repContent = "";
+	repContent = contents.replace(/(?:\r\n|\r|\n)/g, '<br/>');
+	
+	$('.nowChar').text(conLeng + " /");
+	$('.totChar').text(" "+limitLeng);
+	$('.template_text').show();
+	if(repContent != ''){
+		$('.template_text').html(repContent);
+		$('#smsTxtArea').val(
+				$('.template_text').html().trim().replace(/(<br>|<br\/>|<br \/>)/g, '\r\n')
+			);
+	}else{
+		$('.template_text').html("내용 미리보기");
 	}
 	
 }
(No newline at end of file)
Add a comment
List