이준호 이준호 2025-03-24
발송결과 알림톡 성능 개선
@a67c970812d4c68b9878edcf5cd19ecf9e574625
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
@@ -151,6 +151,8 @@
 	private String bizKakaoResendType; /* 대체 문자 길이 => MMS / LMS / SMS */
 	private String bizKakaoJsonFile;	//카카오 친구톡 Json 파일 경로
 	
+	private String yellowId;
+	private String bizKakaoResendTypeCnt;
 	
 	public String getMsgDiv() {
 		return msgDiv;
@@ -1273,5 +1275,19 @@
 	public void setBizKakaoJsonFile(String bizKakaoJsonFile) {
 		this.bizKakaoJsonFile = bizKakaoJsonFile;
 	}
+	public String getYellowId() {
+		return yellowId;
+	}
+	public void setYellowId(String yellowId) {
+		this.yellowId = yellowId;
+	}
+	public String getBizKakaoResendTypeCnt() {
+		return bizKakaoResendTypeCnt;
+	}
+	public void setBizKakaoResendTypeCnt(String bizKakaoResendTypeCnt) {
+		this.bizKakaoResendTypeCnt = bizKakaoResendTypeCnt;
+	}
+	
+	
 	
 }
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
@@ -246,6 +246,14 @@
 	private String successCntDay;
 	private String successCntMonth;
 	private String successCntYear;
+	
+	
+	
+	//재전송 영역
+	private String msgResendAllFlag;
+	private String msgResendAllGroupId;
+	private String msgResendAllTmpKey;
+	private String msgResendAllYellowId;
 
 	public String getSuccessDay() {
 		return successDay;
@@ -1238,4 +1246,39 @@
 	public void setPhmType(String phmType) {
 		this.phmType = phmType;
 	}
+
+	public String getMsgResendAllFlag() {
+		return msgResendAllFlag;
+	}
+
+	public void setMsgResendAllFlag(String msgResendAllFlag) {
+		this.msgResendAllFlag = msgResendAllFlag;
+	}
+
+	public String getMsgResendAllGroupId() {
+		return msgResendAllGroupId;
+	}
+
+	public void setMsgResendAllGroupId(String msgResendAllGroupId) {
+		this.msgResendAllGroupId = msgResendAllGroupId;
+	}
+
+	public String getMsgResendAllTmpKey() {
+		return msgResendAllTmpKey;
+	}
+
+	public void setMsgResendAllTmpKey(String msgResendAllTmpKey) {
+		this.msgResendAllTmpKey = msgResendAllTmpKey;
+	}
+
+	public String getMsgResendAllYellowId() {
+		return msgResendAllYellowId;
+	}
+
+	public void setMsgResendAllYellowId(String msgResendAllYellowId) {
+		this.msgResendAllYellowId = msgResendAllYellowId;
+	}
+	
+	
+	
 }
src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
--- src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
+++ src/main/java/itn/let/kakao/user/kakaoAt/web/KakaoAlimTalkSendController.java
@@ -46,6 +46,8 @@
 import org.springframework.web.multipart.MultipartHttpServletRequest;
 import org.springframework.web.servlet.ModelAndView;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+
 import egovframework.rte.fdl.idgnr.EgovIdGnrService;
 import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
 import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
@@ -215,6 +217,26 @@
 			// 사용자 저으이
 			model.addAttribute("sendPrice", kakaoSendUtil.selectSendPriceOfKakaoAtAndSmsAndMms(userId));
 		}
+		
+		if("Y".equals(kakaoVO.getMsgResendAllFlag())) {
+			List<MjonMsgDataVO> resendList = new ArrayList<MjonMsgDataVO>();
+			
+			MjonMsgDataVO mjonMsgDataVO = new MjonMsgDataVO();
+			mjonMsgDataVO.setMsgGroupId(kakaoVO.getMsgResendAllGroupId());
+			mjonMsgDataVO.setUserId(userId);
+			resendList = mjonMsgDataService.selectMjMsgListByResend(mjonMsgDataVO);
+			
+			ObjectMapper mapper = new ObjectMapper();
+	        try {
+	            String resendListJson = mapper.writeValueAsString(resendList);
+	            model.addAttribute("resendListJson", resendListJson);
+	        } catch (Exception e) {
+	            e.printStackTrace();
+	        }
+			
+		}
+		
+		
 		
 		return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView";
 	}
@@ -1403,4 +1425,80 @@
 		
 		return modelAndView;
 	}
+	
+	
+	@RequestMapping(value= {"/web/mjon/alimtalk/kakaoAlimtalkMsgDataView_test_set.do"})
+	public String kakaoAlimtalkMsgDataView_test_set(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());
+		
+		model.addAttribute("loginVO", loginVO);
+/* 		if(userId == "") {
+			return "redirect:/web/user/login/login.do";
+		}*/
+
+
+		//2.사용자 개인 단가 정보 불러오기
+		if(!userId.equals("") && !author.equals("ROLE_ADMIN")) {
+		
+			// 사용자 아이디를 이용한 발신프로필 조회
+			kakaoVO.setUserId(userId); 
+			List<KakaoVO> selectKakaoProfileList = kakaoApiService.selectKakaoProfileList(kakaoVO);
+			model.addAttribute("kakaoProfileList", selectKakaoProfileList);
+			
+			//발신번호 불러오기
+			//아이디 발신번호 리스트 불러오기.
+			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));
+		}
+		
+		return "web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp";
+	}
 }
 
src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java (added)
+++ src/main/java/itn/let/kakao/user/sent/service/KakaoSentDetailVO.java
@@ -0,0 +1,51 @@
+package itn.let.kakao.user.sent.service;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class KakaoSentDetailVO extends KakaoSentVO{
+
+	private static final long serialVersionUID = 1L;
+	
+	private String msgGroupId;
+	private String reqDate;
+	private String regDate;
+	private String msgGroupCnt;
+	private String reserveYn;
+	private String reserveCYn;
+	private String canceldate;
+	private String callFrom;
+	private String userId;
+	private String smsTxt;
+	private String subject;
+	private String subjectChkYn;
+	private String msgType;
+	private String fileCnt;
+	private String msgKind;
+	private String eachPrice;
+	private String filePath1;
+	private String filePath2;
+	private String filePath3;
+	
+	private String callTo;
+	private String statusTxt;
+	private String addrNm;
+	
+	private String successPct;
+	private String failedPct;
+	private String waitingPct;
+	
+	private String statusCd; // 진행상태 코드
+	private String divideYn;
+	private String divideText;
+	private String totPrice;
+	private String yellowId;
+	private String msgNoticetalkTmpKey;
+	
+	// FileInfo 리스트 필드 추가
+//	private List<FileInfoVO> fileInfos;
+
+	
+}
src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java
--- src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java
+++ src/main/java/itn/let/kakao/user/sent/service/KakaoSentService.java
@@ -1,6 +1,7 @@
 package itn.let.kakao.user.sent.service;
 
 import java.util.List;
+import java.util.Map;
 
 import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
 
@@ -31,5 +32,11 @@
 	//예약 결과 전체 발송 리스트 불러오기
 	public List<KakaoSentVO> selectReservKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception;
 	
+	public Map<String, Object> selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception;
+
+	public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception;
+	
+	//발송 관리 문자발송 내용 상세보기 팝업
+	public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception;
 
 }
src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java
--- src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java
+++ src/main/java/itn/let/kakao/user/sent/service/KakaoSentVO.java
@@ -4,7 +4,11 @@
 import java.util.List;
 
 import itn.let.uss.umt.service.UserDefaultVO;
+import lombok.Getter;
+import lombok.Setter;
 
+@Getter
+@Setter
 public class KakaoSentVO extends UserDefaultVO{
 
 	private static final long serialVersionUID = 1L;
@@ -90,6 +94,7 @@
 	private int successCount;
 	private int waitCount;
 	private int failCount;
+	private int allCount;
 	
 	private String bizUmid;
 	private int kakaoResendSuccCount;
@@ -103,471 +108,11 @@
 	private String atDelayCompleteYn;		//알림톡 30분 지연 승인/취소 처리 여부
 	private Date atDelayOrgTime;			//알림톡 30분 지연에 대한 원래 시간 (-30분 처리된 시간)
 	
-	public String getCallToComma() {
-		return callToComma;
-	}
-	public void setCallToComma(String callToComma) {
-		this.callToComma = callToComma;
-	}
-	public String getCallFromComma() {
-		return callFromComma;
-	}
-	public void setCallFromComma(String callFromComma) {
-		this.callFromComma = callFromComma;
-	}
+	private String statusCd;
 	
-	public String getAtchFiles() {
-		return atchFiles;
-	}
-	public void setAtchFiles(String atchFiles) {
-		this.atchFiles = atchFiles;
-	}	
+	private int successPrice;
+	private int kakaoResendSuccPrice;
 	
-	public String getMsgId() {
-		return msgId;
-	}
-	public void setMsgId(String msgId) {
-		this.msgId = msgId;
-	}
-	public int getSuccessCnt() {
-		return successCnt;
-	}
-	public void setSuccessCnt(int successCnt) {
-		this.successCnt = successCnt;
-	}
-	public String getMsgTypeName() {
-		return msgTypeName;
-	}
-	public void setMsgTypeName(String msgTypeName) {
-		this.msgTypeName = msgTypeName;
-	}
-	public int getOrderByCode() {
-		return orderByCode;
-	}
-	public void setOrderByCode(int orderByCode) {
-		this.orderByCode = orderByCode;
-	}
-	public String getAtchFileId() {
-		return atchFileId;
-	}
-	public void setAtchFileId(String atchFileId) {
-		this.atchFileId = atchFileId;
-	}
-	public String getFileSn() {
-		return fileSn;
-	}
-	public void setFileSn(String fileSn) {
-		this.fileSn = fileSn;
-	}
-	public String getUserId() {
-		return userId;
-	}
-	public void setUserId(String userId) {
-		this.userId = userId;
-	}
-	public String getAddrNm() {
-		return addrNm;
-	}
-	public void setAddrNm(String addrNm) {
-		this.addrNm = addrNm;
-	}
-	public String getMsgSeq() {
-		return msgSeq;
-	}
-	public void setMsgSeq(String msgSeq) {
-		this.msgSeq = msgSeq;
-	}
-	public String getMsgGroupId() {
-		return msgGroupId;
-	}
-	public void setMsgGroupId(String msgGroupId) {
-		this.msgGroupId = msgGroupId;
-	}
-	public List getMsgGroupIdList() {
-		return msgGroupIdList;
-	}
-	public void setMsgGroupIdList(List msgGroupIdList) {
-		this.msgGroupIdList = msgGroupIdList;
-	}
-	public String getSmsTxt() {
-		return smsTxt;
-	}
-	public void setSmsTxt(String smsTxt) {
-		this.smsTxt = smsTxt;
-	}
-	public String getSubject() {
-		return subject;
-	}
-	public void setSubject(String subject) {
-		this.subject = subject;
-	}
-	public Date getRegdate() {
-		return regdate;
-	}
-	public void setRegdate(Date regdate) {
-		this.regdate = regdate;
-	}
-	public Date getReqdate() {
-		return reqdate;
-	}
-	public void setReqdate(Date reqdate) {
-		this.reqdate = reqdate;
-	}
-	public String getCallFrom() {
-		return callFrom;
-	}
-	public void setCallFrom(String callFrom) {
-		this.callFrom = callFrom;
-	}
-	public String getCallTo() {
-		return callTo;
-	}
-	public void setCallTo(String callTo) {
-		this.callTo = callTo;
-	}
-	public List getCallToList() {
-		return callToList;
-	}
-	public void setCallToList(List callToList) {
-		this.callToList = callToList;
-	}
-	public String getTotPrice() {
-		return totPrice;
-	}
-	public void setTotPrice(String totPrice) {
-		this.totPrice = totPrice;
-	}
-	public String getEachPrice() {
-		return eachPrice;
-	}
-	public void setEachPrice(String eachPrice) {
-		this.eachPrice = eachPrice;
-	}
-	public String getDelFlag() {
-		return delFlag;
-	}
-	public void setDelFlag(String delFlag) {
-		this.delFlag = delFlag;
-	}
-	public String getTotMsgPrice() {
-		return totMsgPrice;
-	}
-	public void setTotMsgPrice(String totMsgPrice) {
-		this.totMsgPrice = totMsgPrice;
-	}
-	public String getRsltCode() {
-		return rsltCode;
-	}
-	public void setRsltCode(String rsltCode) {
-		this.rsltCode = rsltCode;
-	}
-	public String getRsltCode2() {
-		return rsltCode2;
-	}
-	public void setRsltCode2(String rsltCode2) {
-		this.rsltCode2 = rsltCode2;
-	}
-	public String getMsgType() {
-		return msgType;
-	}
-	public void setMsgType(String msgType) {
-		this.msgType = msgType;
-	}
-	public String getMsgGroupCnt() {
-		return msgGroupCnt;
-	}
-	public void setMsgGroupCnt(String msgGroupCnt) {
-		this.msgGroupCnt = msgGroupCnt;
-	}
-	public String getFileCnt() {
-		return fileCnt;
-	}
-	public void setFileCnt(String fileCnt) {
-		this.fileCnt = fileCnt;
-	}
-	public String getTotMsgCnt() {
-		return totMsgCnt;
-	}
-	public void setTotMsgCnt(String totMsgCnt) {
-		this.totMsgCnt = totMsgCnt;
-	}
-	public String getCurState() {
-		return curState;
-	}
-	public void setCurState(String curState) {
-		this.curState = curState;
-	}
-	public String getReserveYn() {
-		return reserveYn;
-	}
-	public void setReserveYn(String reserveYn) {
-		this.reserveYn = reserveYn;
-	}
-	public String getReserveCYn() {
-		return reserveCYn;
-	}
-	public void setReserveCYn(String reserveCYn) {
-		this.reserveCYn = reserveCYn;
-	}
-	public String getFilePath1() {
-		return filePath1;
-	}
-	public void setFilePath1(String filePath1) {
-		this.filePath1 = filePath1;
-	}
-	public String getFilePath2() {
-		return filePath2;
-	}
-	public void setFilePath2(String filePath2) {
-		this.filePath2 = filePath2;
-	}
-	public String getFilePath3() {
-		return filePath3;
-	}
-	public void setFilePath3(String filePath3) {
-		this.filePath3 = filePath3;
-	}
-	public Date getSentDate() {
-		return sentDate;
-	}
-	public void setSentDate(Date sentDate) {
-		this.sentDate = sentDate;
-	}
-	public String getAgentCode() {
-		return agentCode;
-	}
-	public void setAgentCode(String agentCode) {
-		this.agentCode = agentCode;
-	}
-	public String getUserData() {
-		return userData;
-	}
-	public void setUserData(String userData) {
-		this.userData = userData;
-	}
-	public List getUserDataList() {
-		return userDataList;
-	}
-	public void setUserDataList(List userDataList) {
-		this.userDataList = userDataList;
-	}
-	public Date getCancelDate() {
-		return cancelDate;
-	}
-	public void setCancelDate(Date cancelDate) {
-		this.cancelDate = cancelDate;
-	}
-	public String getStartDate() {
-		return startDate;
-	}
-	public void setStartDate(String startDate) {
-		this.startDate = startDate;
-	}
-	public String getEndDate() {
-		return endDate;
-	}
-	public void setEndDate(String endDate) {
-		this.endDate = endDate;
-	}
-	public String getSearchMsgType() {
-		return searchMsgType;
-	}
-	public void setSearchMsgType(String searchMsgType) {
-		this.searchMsgType = searchMsgType;
-	}
-	public String getTabType() {
-		return tabType;
-	}
-	public void setTabType(String tabType) {
-		this.tabType = tabType;
-	}
-	public String getStateType() {
-		return stateType;
-	}
-	public void setStateType(String stateType) {
-		this.stateType = stateType;
-	}
-	public String getListType() {
-		return listType;
-	}
-	public void setListType(String listType) {
-		this.listType = listType;
-	}
-	public String getResultType() {
-		return resultType;
-	}
-	public void setResultType(String resultType) {
-		this.resultType = resultType;
-	}
-	public String getMsgResultCnt() {
-		return msgResultCnt;
-	}
-	public void setMsgResultCnt(String msgResultCnt) {
-		this.msgResultCnt = msgResultCnt;
-	}
-	public String getMsgResultSts() {
-		return msgResultSts;
-	}
-	public void setMsgResultSts(String msgResultSts) {
-		this.msgResultSts = msgResultSts;
-	}
-	public String getAddrGrpNm() {
-		return addrGrpNm;
-	}
-	public void setAddrGrpNm(String addrGrpNm) {
-		this.addrGrpNm = addrGrpNm;
-	}
-	public int getOrderByrsltCode() {
-		return orderByrsltCode;
-	}
-	public void setOrderByrsltCode(int orderByrsltCode) {
-		this.orderByrsltCode = orderByrsltCode;
-	}
-	public String getMsgResult() {
-		return msgResult;
-	}
-	public void setMsgResult(String msgResult) {
-		this.msgResult = msgResult;
-	}
-	public String getNtceBgnde() {
-		return ntceBgnde;
-	}
-	public void setNtceBgnde(String ntceBgnde) {
-		this.ntceBgnde = ntceBgnde;
-	}
-	public String getNtceEndde() {
-		return ntceEndde;
-	}
-	public void setNtceEndde(String ntceEndde) {
-		this.ntceEndde = ntceEndde;
-	}
-	public String getMsgKind() {
-		return msgKind;
-	}
-	public void setMsgKind(String msgKind) {
-		this.msgKind = msgKind;
-	}
-	public String getDelayYn() {
-		return delayYn;
-	}
-	public void setDelayYn(String delayYn) {
-		this.delayYn = delayYn;
-	}
-	public String getDelayCompleteYn() {
-		return delayCompleteYn;
-	}
-	public void setDelayCompleteYn(String delayCompleteYn) {
-		this.delayCompleteYn = delayCompleteYn;
-	}
-	public String getBizKakaoResendYn() {
-		return bizKakaoResendYn;
-	}
-	public void setBizKakaoResendYn(String bizKakaoResendYn) {
-		this.bizKakaoResendYn = bizKakaoResendYn;
-	}
-	public String getBizKakaoResendType() {
-		return bizKakaoResendType;
-	}
-	public void setBizKakaoResendType(String bizKakaoResendType) {
-		this.bizKakaoResendType = bizKakaoResendType;
-	}
-	public String getBizKakaoResendData() {
-		return bizKakaoResendData;
-	}
-	public void setBizKakaoResendData(String bizKakaoResendData) {
-		this.bizKakaoResendData = bizKakaoResendData;
-	}
-	public String getCallStatus() {
-		return callStatus;
-	}
-	public void setCallStatus(String callStatus) {
-		this.callStatus = callStatus;
-	}
-	public String getBizKakaoAtPrice() {
-		return bizKakaoAtPrice;
-	}
-	public void setBizKakaoAtPrice(String bizKakaoAtPrice) {
-		this.bizKakaoAtPrice = bizKakaoAtPrice;
-	}
-	public String getBizKakaoFtPrice() {
-		return bizKakaoFtPrice;
-	}
-	public void setBizKakaoFtPrice(String bizKakaoFtPrice) {
-		this.bizKakaoFtPrice = bizKakaoFtPrice;
-	}
-	public String getBizSmsPrice() {
-		return bizSmsPrice;
-	}
-	public void setBizSmsPrice(String bizSmsPrice) {
-		this.bizSmsPrice = bizSmsPrice;
-	}
-	public String getDiffMin() {
-		return diffMin;
-	}
-	public void setDiffMin(String diffMin) {
-		this.diffMin = diffMin;
-	}
-	public String getBizMmsPrice() {
-		return bizMmsPrice;
-	}
-	public void setBizMmsPrice(String bizMmsPrice) {
-		this.bizMmsPrice = bizMmsPrice;
-	}
-	public int getSuccessCount() {
-		return successCount;
-	}
-	public void setSuccessCount(int successCount) {
-		this.successCount = successCount;
-	}
-	public String getBizUmid() {
-		return bizUmid;
-	}
-	public void setBizUmid(String bizUmid) {
-		this.bizUmid = bizUmid;
-	}
-	public int getKakaoResendSuccCount() {
-		return kakaoResendSuccCount;
-	}
-	public void setKakaoResendSuccCount(int kakaoResendSuccCount) {
-		this.kakaoResendSuccCount = kakaoResendSuccCount;
-	}
-	public int getKakaoResendFailCount() {
-		return kakaoResendFailCount;
-	}
-	public void setKakaoResendFailCount(int kakaoResendFailCount) {
-		this.kakaoResendFailCount = kakaoResendFailCount;
-	}
-	public int getWaitCount() {
-		return waitCount;
-	}
-	public void setWaitCount(int waitCount) {
-		this.waitCount = waitCount;
-	}
-	public int getFailCount() {
-		return failCount;
-	}
-	public void setFailCount(int failCount) {
-		this.failCount = failCount;
-	}
-	public String getAtDelayYn() {
-		return atDelayYn;
-	}
-	public void setAtDelayYn(String atDelayYn) {
-		this.atDelayYn = atDelayYn;
-	}
-	public String getAtDelayCompleteYn() {
-		return atDelayCompleteYn;
-	}
-	public void setAtDelayCompleteYn(String atDelayCompleteYn) {
-		this.atDelayCompleteYn = atDelayCompleteYn;
-	}
-	public Date getAtDelayOrgTime() {
-		return atDelayOrgTime;
-	}
-	public void setAtDelayOrgTime(Date atDelayOrgTime) {
-		this.atDelayOrgTime = atDelayOrgTime;
-	}
-
-
+	private String divideYn;
 	
 }
src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java
--- src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java
+++ src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentDAO.java
@@ -7,6 +7,7 @@
 
 import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
 import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
+import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
 import itn.let.kakao.user.sent.service.KakaoSentVO;
 
 @Repository("KakaoSentDAO")
@@ -44,6 +45,10 @@
 	@SuppressWarnings("unchecked")
 	public List<KakaoSentVO> selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{
 		return (List<KakaoSentVO>) list("KakaoSentDAO.selectAllKakaoSentList",kakaoSentVO);
+	}
+	@SuppressWarnings("unchecked")
+	public List<KakaoSentVO> selectAllKakaoSentList_advc(KakaoSentVO kakaoSentVO) throws Exception{
+		return (List<KakaoSentVO>) list("KakaoSentDAO.selectAllKakaoSentList_advc",kakaoSentVO);
 	}
 	
 	@SuppressWarnings("unchecked")
@@ -90,4 +95,39 @@
 		return (List<KakaoSentVO>) list("KakaoSentDAO.selectReservKakaoSentList",kakaoSentVO);
 	}	
 	
+	@SuppressWarnings("unchecked")
+	public List<KakaoSentVO> selectKakaoSentCntAll_advc(KakaoSentVO kakaoSentVO) throws Exception{
+		
+		List<KakaoSentVO> result = new ArrayList<KakaoSentVO>();
+		
+		try {
+			
+			result = (List<KakaoSentVO>) list("KakaoSentDAO.selectKakaoSentCntAll_advc", kakaoSentVO);
+			
+		} catch (Exception e) {
+			
+			throw new Exception("++++++++++ ErrorService DAO :: " + e);
+			
+		}
+		
+		return result;
+	}
+	
+	public KakaoSentVO selectKakaoSentCntEachCnt_advc(KakaoSentVO kakaoSentVO) throws Exception{
+		return (KakaoSentVO) select("KakaoSentDAO.selectKakaoSentCntEachCnt_advc",kakaoSentVO);
+	}
+	
+	public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception{
+		return (KakaoSentDetailVO) select("KakaoSentDAO.selectKakaoSentDetailView", kakaoSentDetailVO);
+	}
+	
+	public List<String> findByReqDateWhereMsgGroupId(String msgGroupId) {
+		return (List<String>) list("KakaoSentDAO.findByReqDateWhereMsgGroupId", msgGroupId);
+	}
+	
+	//발송 관리 문자발송 내용 상세보기 팝업[그룹]
+		public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO KakaoSentVO) throws Exception{
+			return (MjonKakaoATVO) select("KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax", KakaoSentVO);
+		}	
+	
 }
src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java
--- src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java
+++ src/main/java/itn/let/kakao/user/sent/service/impl/KakaoSentServiceImpl.java
@@ -1,7 +1,15 @@
 package itn.let.kakao.user.sent.service.impl;
 
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.annotation.Resource;
 
@@ -10,6 +18,7 @@
 import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl;
 import egovframework.rte.fdl.idgnr.EgovIdGnrService;
 import itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO;
+import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
 import itn.let.kakao.user.sent.service.KakaoSentService;
 import itn.let.kakao.user.sent.service.KakaoSentVO;
 
@@ -29,7 +38,8 @@
 		
 		try {
 			
-			result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO);
+//			result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO);
+			result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO);
 			
 		} catch (Exception e) {
 			throw new Exception("++++++++++ ErrorService Impl :: " + e);
@@ -38,30 +48,83 @@
 		return result;
 	}
 	
+	public Map<String, Object> selectKakaoSentCntAll_Advc(KakaoSentVO kakaoSentVO) throws Exception{
+		
+		List<KakaoSentVO> result = new ArrayList<KakaoSentVO>();
+		Map<String, Object> returnMap = new HashMap<String, Object>();
+		
+		try {
+			
+//			result = kakaoSentDAO.selectKakaoSentCntAll(kakaoSentVO);
+			result = kakaoSentDAO.selectKakaoSentCntAll_advc(kakaoSentVO);
+			
+			
+			KakaoSentVO allVO = new KakaoSentVO();
+			KakaoSentVO atVO = new KakaoSentVO();
+			KakaoSentVO ftVO = new KakaoSentVO();
+			
+			result.stream()
+						.forEach(t -> 
+							{
+								Integer rsultCnt = Integer.parseInt(t.getMsgResultCnt());
+								
+								if(Integer.parseInt(t.getFilePath1()) > 0) {
+									if("S".equals(t.getMsgResultSts())) {
+										atVO.setSuccessCount(atVO.getSuccessCount()+rsultCnt);
+									}else if("W".equals(t.getMsgResultSts())) {
+										atVO.setWaitCount(atVO.getWaitCount()+rsultCnt);
+									}else {
+										atVO.setFailCount(atVO.getFailCount()+rsultCnt);
+									}
+									
+									atVO.setAllCount(atVO.getAllCount()+rsultCnt);
+									allVO.setAllCount(allVO.getAllCount()+rsultCnt);
+									
+								}else {
+									if("S".equals(t.getMsgResultSts())) {
+										ftVO.setSuccessCount(ftVO.getSuccessCount()+rsultCnt);
+									}else if("W".equals(t.getMsgResultSts())) {
+										ftVO.setWaitCount(ftVO.getWaitCount()+rsultCnt);
+									}else {
+										ftVO.setFailCount(ftVO.getFailCount()+rsultCnt);
+									}
+									
+									ftVO.setAllCount(ftVO.getAllCount()+rsultCnt);
+									allVO.setAllCount(allVO.getAllCount()+rsultCnt);
+									
+								}
+							});
+			
+			allVO.setSuccessCount(atVO.getSuccessCount()+ftVO.getSuccessCount());
+			allVO.setWaitCount(atVO.getWaitCount()+ftVO.getWaitCount());
+			allVO.setFailCount(atVO.getFailCount()+ftVO.getFailCount());
+			
+			//전체 성공건, 실패건 불러오기
+			returnMap.put("allCnt", allVO);
+			
+			//알림톡 성공건, 실패건 불러오기    	
+			returnMap.put("atCnt", atVO);
+			
+			//친구톡 성공건, 실패건 불러오기
+			returnMap.put("ftCnt", ftVO);
+			
+			
+		} catch (Exception e) {
+			throw new Exception("++++++++++ ErrorService Impl :: " + e);
+		}
+		
+		return returnMap;
+	}
+	
 	//발송 관리 전체 발송 리스트 불러오기
 	public List<KakaoSentVO> selectAllKakaoSentList(KakaoSentVO kakaoSentVO) throws Exception{
 		
 		List<KakaoSentVO> resultList = new ArrayList<KakaoSentVO>();
 		
-		String listType = kakaoSentVO.getListType();
-		String stateType = kakaoSentVO.getStateType();
+		resultList = kakaoSentDAO.selectAllKakaoSentList_advc(kakaoSentVO);
 		
-		if(stateType.equals("fail")) {
-			
-			listType = "privateList";
-			
-		}
-		
-		System.out.println("listType : "+ listType);
-		if(listType.equals("groupList")) {//전송건별 리스트 불러오기
-			
-			resultList = kakaoSentDAO.selectAllKakaoSentList(kakaoSentVO);
-			
-		}else {//개인별 리스트 불러오기
-			
-			resultList = kakaoSentDAO.selectAllPrivateKakaoSentList(kakaoSentVO);
-			
-		}
+		//totPrice 계산 및 상태코드 set
+		resultList = resultList.stream().map(t -> setPriceNCode(t)).collect(Collectors.toList());
 		
 		return resultList;
 	}
@@ -149,5 +212,229 @@
 		
 		return kakaoSentDAO.selectReservKakaoSentList(kakaoSentVO);
 	}
+	
+	@Override
+	public KakaoSentDetailVO selectKakaoSentDetailView(KakaoSentDetailVO kakaoSentDetailVO) throws Exception{
+
+		KakaoSentDetailVO resultVO = kakaoSentDAO.selectKakaoSentDetailView(kakaoSentDetailVO);
+		
+		int total = Integer.parseInt(resultVO.getMsgGroupCnt()); // 전체 건수
+		int success = 0; // 성공 건수
+		int waiting = 0; // 대기 건수
+		int failed = 0; // 실패 건수
+		if("Y".equals(resultVO.getBizKakaoResendYn())) {
+			success = resultVO.getSuccessCount() + resultVO.getKakaoResendSuccCount();
+			failed = resultVO.getKakaoResendFailCount();
+		}else {
+			success = resultVO.getSuccessCount();
+			failed = resultVO.getFailCount();
+		}
+		waiting = resultVO.getWaitCount(); // 대기 건수
+		
+		String successPct = total > 0 ? String.format("%.1f%%", (success / (double) total) * 100) : "0.0%";
+		String waitingPct = total > 0 ? String.format("%.1f%%", (waiting / (double) total) * 100) : "0.0%";
+		String failedPct = total > 0 ? String.format("%.1f%%", (failed / (double) total) * 100) : "0.0%";
+		
+		resultVO.setSuccessPct(successPct);
+		resultVO.setFailedPct(waitingPct);
+		resultVO.setWaitingPct(failedPct);
+		
+		resultVO.setTotPrice(this.priceProc(resultVO.getSuccessPrice(), resultVO.getKakaoResendSuccPrice()));
+		
+		resultVO = this.codeProc(resultVO);
+		
+		// 분할문자인 경우
+		if("Y".equals(resultVO.getDivideYn())) {
+			String divideText = calculateBatchInfo(resultVO);
+			resultVO.setDivideText(divideText);
+		}
+		
+		return resultVO;
+	}
+	
+	//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA)
+	public MjonKakaoATVO selectKakaoSentDetailViewPhoneAjax(MjonKakaoATVO kakaoSentVO) throws Exception{
+		
+		return kakaoSentDAO.selectKakaoSentDetailViewPhoneAjax(kakaoSentVO);
+	}
+	
+	
+	// 공통코드 ITN057에 대한 코드화 진행
+	/*
+	 * CODE_ID	CODE	CODE_NM		CODE_DC
+	 * ITN057	01		진행중		진행중
+	 * ITN057	02		완료			완료출해야함
+	 * ITN057	03		예약대기		예약대기(발송전) 버튼으로 노출해야함
+	 * ITN057	04		-			예약취소 ( - 으로 노출 )
+	 * */
+	private KakaoSentVO setPriceNCode(KakaoSentVO result) {
+		
+		//성공 건수 세팅
+		KakaoSentVO eachCnt = new KakaoSentVO();
+		eachCnt.setMsgGroupId(result.getMsgGroupId());
+		try {
+			eachCnt = kakaoSentDAO.selectKakaoSentCntEachCnt_advc(eachCnt);
+		} catch (Exception e) {
+			System.out.println("setPriceNCode error!!");
+		}
+		
+		result.setSuccessCount(eachCnt.getSuccessCount());
+		result.setWaitCount(eachCnt.getWaitCount());
+		result.setFailCount(eachCnt.getFailCount());
+		result.setKakaoResendSuccCount(eachCnt.getKakaoResendSuccCount());
+		result.setKakaoResendFailCount(eachCnt.getKakaoResendFailCount());
+		
+		
+		//완료상태 시작
+		result = this.codeProc(result);
+		
+		//완료상태 끝
+		//=======================================================
+		
+		//총금액 시작
+		result.setTotPrice(this.priceProc(eachCnt.getSuccessPrice(), eachCnt.getKakaoResendSuccPrice()));
+		
+		
+		return result;
+		
+	}
+	
+	private String priceProc(int successPrice, int kakaoResendSuccPrice) {
+		
+		String totPrice = "-";
+		
+		//총금액 시작
+		//=======================================================
+		// TotPrice : 성공건수에 대한 금액 곱하기
+		BigDecimal atPrice = new BigDecimal(successPrice);
+		BigDecimal kakaoResendPrice = new BigDecimal(kakaoResendSuccPrice);
+		BigDecimal totalPrice = atPrice.add(kakaoResendPrice);
+		// 소수점 한 자리로 설정 (반올림)// totalPrice 값을 소수점 한 자리까지 반올림하여 roundedTotalPrice에 저장
+		// RoundingMode.HALF_UP: 반올림 방식으로, 소수점 기준 5 이상이면 올림, 그렇지 않으면 내림
+		BigDecimal roundedTotalPrice = totalPrice.setScale(1, RoundingMode.HALF_UP);
+		
+		// roundedTotalPrice가 0인지 확인
+		// BigDecimal.compareTo(BigDecimal.ZERO)는 값을 비교하는 메서드
+		// 결과:
+		// - 반환 값이 0이면 두 값이 같음
+		// - 반환 값이 음수이면 roundedTotalPrice가 0보다 작음
+		// - 반환 값이 양수이면 roundedTotalPrice가 0보다 큼
+		if (roundedTotalPrice.compareTo(BigDecimal.ZERO) == 0) {
+			// roundedTotalPrice 값이 0이면, "-" 문자열을 totPrice에 설정
+			totPrice = "-"; 
+		} else {
+			// roundedTotalPrice 값이 0이 아닌 경우
+			// 반올림된 BigDecimal 값을 toPlainString()을 사용하여 문자열로 변환 후 totPrice에 설정
+			// toPlainString(): 지수 표기법 없이 일반적인 문자열 형태로 반환
+			totPrice = roundedTotalPrice.toPlainString();
+		}
+		//총금액 끝
+		//=======================================================
+		
+		
+		return totPrice;
+	}
+	
+	private KakaoSentVO codeProc(KakaoSentVO result) {
+		//=======================================================
+		String returnCode;
+		if ("Y".equals(result.getReserveCYn())) {
+			returnCode = "04"; // 예약취소 코드
+		} else if (
+				"Y".equals(result.getReserveYn()) 
+					&& "N".equals(result.getReserveCYn()) 
+					&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount())
+					&& Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만
+					) {
+			returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 )
+		} else if (
+					//대체문자 발송 Y일때
+					("Y".equals(result.getBizKakaoResendYn())
+						//알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건
+						&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())
+						//알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건
+						&& result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount())
+					)
+					||
+					//대체문자 발송 N일때
+					("N".equals(result.getBizKakaoResendYn())
+						//알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건
+						&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()))
+					) {
+			returnCode = "02"; // 완료 코드
+		} else {
+			returnCode = "01"; // 진행중 코드
+		}
+		
+		result.setStatusCd(returnCode);
+		
+		return result;
+	}
+	private KakaoSentDetailVO codeProc(KakaoSentDetailVO result) {
+		//=======================================================
+		String returnCode;
+		if ("Y".equals(result.getReserveCYn())) {
+			returnCode = "04"; // 예약취소 코드
+		} else if (
+				"Y".equals(result.getReserveYn()) 
+					&& "N".equals(result.getReserveCYn()) 
+					&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getWaitCount())
+					&& Integer.valueOf(result.getDiffMin()) < -5 // 예약 시간이 5분 이상인 것들만
+					) {
+			returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 )
+		} else if (
+					//대체문자 발송 Y일때
+					("Y".equals(result.getBizKakaoResendYn())
+						//알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건
+						&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount())
+						//알림톡 발송 실패건 == 대체문자 발송 성공건 + 대체문자 발송 실패건
+						&& result.getFailCount() == (result.getKakaoResendSuccCount() + result.getKakaoResendFailCount())
+					)
+					||
+					//대체문자 발송 N일때
+					("N".equals(result.getBizKakaoResendYn())
+						//알림톡 발송 총건수 == 알림톡 발송 성공건 + 알림톡 발송 실패건
+						&& Integer.valueOf(result.getMsgGroupCnt()).equals(result.getSuccessCount() + result.getFailCount()))
+					) {
+			returnCode = "02"; // 완료 코드
+		} else {
+			returnCode = "01"; // 진행중 코드
+		}
+		
+		result.setStatusCd(returnCode);
+		
+		return result;
+	}
+	
+	private String calculateBatchInfo(KakaoSentDetailVO resultVO) {
+		
+		String msgGroupId = resultVO.getMsgGroupId();
+		
+
+		List<String> requestTimes = kakaoSentDAO.findByReqDateWhereMsgGroupId(msgGroupId);
+		
+		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S");
+		Map<LocalDateTime, Integer> timeCountMap = new LinkedHashMap<>();
+
+		// REQ_DATE 그룹화 (같은 시간대 몇 건인지)
+		for (String timeStr : requestTimes) {
+			LocalDateTime time = LocalDateTime.parse(timeStr, formatter);
+			timeCountMap.put(time, timeCountMap.getOrDefault(time, 0) + 1);
+		}
+
+		//  가장 첫 번째 시간 & 간격 계산
+		List<LocalDateTime> sortedKeys = new ArrayList<>(timeCountMap.keySet());
+		if (sortedKeys.size() < 2) {
+			return "데이터 부족 (분석 불가)";
+		}
+
+		int batchSize = timeCountMap.get(sortedKeys.get(0)); // 한 번에 보낸 건수
+		int intervalMinutes = sortedKeys.get(1).getMinute() - sortedKeys.get(0).getMinute(); // 시간 간격 계산
+//		int batchCount = sortedKeys.size(); // 총 몇 번 보냈는지
+
+//		return String.format("%,d건씩 %d분 간격 (%d회 발송)", batchSize, intervalMinutes, batchCount);
+		return String.format("%,d건씩 %d분 간격", batchSize, intervalMinutes);
+		
+	}
 
 }
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
@@ -8,6 +8,7 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -26,6 +27,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.ModelAttribute;
@@ -43,6 +46,7 @@
 import itn.let.kakao.kakaoComm.KakaoReturnVO;
 import itn.let.kakao.kakaoComm.KakaoVO;
 import itn.let.kakao.kakaoComm.kakaoApi.KakaoApiTemplate;
+import itn.let.kakao.user.sent.service.KakaoSentDetailVO;
 import itn.let.kakao.user.sent.service.KakaoSentService;
 import itn.let.kakao.user.sent.service.KakaoSentVO;
 
@@ -82,26 +86,26 @@
 		//전체 발송 건수 통계 불러오기
 		kakaoSentVO.setMsgType("");
 		
-		List<KakaoSentVO> totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO);
-		model.addAttribute("totalMsgCnt", totalMsgCnt);
-
-		List<KakaoSentVO> atCnt = new ArrayList<KakaoSentVO>();
-		List<KakaoSentVO> ftCnt = new ArrayList<KakaoSentVO>();
-		
-
-		totalMsgCnt.forEach(t->{
-			if (Integer.parseInt(t.getFilePath1())>0) {
-				atCnt.add(t);
-			} else if (Integer.parseInt(t.getFilePath2())>0) {
-				ftCnt.add(t);
-			}
-		});
-		
-		//알림톡 성공건, 실패건 불러오기    	
-		model.addAttribute("atCnt", atCnt);
-		
-		//친구톡 성공건, 실패건 불러오기
-		model.addAttribute("ftCnt", ftCnt);
+//		List<KakaoSentVO> totalMsgCnt = kakaoSentService.selectKakaoSentCntAll(kakaoSentVO);
+//		model.addAttribute("totalMsgCnt", totalMsgCnt);
+//
+//		List<KakaoSentVO> atCnt = new ArrayList<KakaoSentVO>();
+//		List<KakaoSentVO> ftCnt = new ArrayList<KakaoSentVO>();
+//		
+//
+//		totalMsgCnt.forEach(t->{
+//			if (Integer.parseInt(t.getFilePath1())>0) {
+//				atCnt.add(t);
+//			} else if (Integer.parseInt(t.getFilePath2())>0) {
+//				ftCnt.add(t);
+//			}
+//		});
+//		
+//		//알림톡 성공건, 실패건 불러오기    	
+//		model.addAttribute("atCnt", atCnt);
+//		
+//		//친구톡 성공건, 실패건 불러오기
+//		model.addAttribute("ftCnt", ftCnt);
 		
 		// 검색 리스트 불러오기
 		if(kakaoSentVO.getPageUnit() != 10) kakaoSentVO.setPageUnit(kakaoSentVO.getPageUnit());
@@ -193,7 +197,7 @@
 		List<KakaoSentVO> resultAllSentList = kakaoSentService.selectAllKakaoSentList(kakaoSentVO);
 		System.out.println("??");
 		model.addAttribute("resultAllSentList", resultAllSentList);
-		model.addAttribute("resultAllSentCnt", resultAllSentList.size());
+//		model.addAttribute("resultAllSentCnt", resultAllSentList.size());
 		
 		model.addAttribute("searchKeyword", kakaoSentVO.getSearchKeyword());
 		paginationInfo.setTotalRecordCount( resultAllSentList.size()> 0 ? (Integer.parseInt((resultAllSentList.get(0)).getTotMsgCnt())) : 0);
@@ -984,5 +988,105 @@
 		
 	}
 	
+	@RequestMapping(value= {"/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do"})
+	public ResponseEntity<?> selectKakaoSentViewTotalSumAjax(
+										KakaoSentVO kakaoSentVO
+									) throws Exception{
+		//로그인 권한정보 불러오기
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		if(loginVO == null) {
+//			return "redirect:/web/user/login/login.do";
+		}
+		
+		kakaoSentVO.setUserId(userId);
+		
+		Map<String, Object> returnMap = kakaoSentService.selectKakaoSentCntAll_Advc(kakaoSentVO);
+
+		return new ResponseEntity<>(returnMap, HttpStatus.OK);
+	}
 	
+	/**
+	 * 발송관리 상세화면 
+	 * @param searchVO
+	 * @param model
+	 * @return	"/web/kakao/sent/selectKakaoSentDetailView.do"
+	 * @throws Exception
+	 */
+	@RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailView.do"})
+	public String selectKakaoSentDetailView(@ModelAttribute("searchVO") KakaoSentDetailVO kakaoSentDetailVO,
+			RedirectAttributes redirectAttributes,	ModelMap model) throws Exception{
+		//로그인 권한정보 불러오기
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		if(loginVO == null) {
+			return "redirect:/web/user/login/login.do";
+		}
+		
+		kakaoSentDetailVO.setUserId(userId);
+		
+		model.addAttribute("result", kakaoSentService.selectKakaoSentDetailView(kakaoSentDetailVO));
+		
+		return "web/kakao/sent/KakaoSentDetailView";
+	}
+	
+	
+	/** 
+	 * @methodName	: selectMsgSentDetailDataAjax 
+	 * @author		: 이호영
+	 * @date		: 2023.03.06 
+	 * @description	: 알림톡 전송 - 내용 상세 팝업 [전송건별]
+	 * @param mjonKakaoATVO
+	 * @param model
+	 * @return
+	 * @throws Exception 
+	 */
+	@RequestMapping(value= {"/web/kakao/sent/selectKakaoSentDetailViewPhoneAjax.do"})
+	public String selectKakaoSentDetailViewPhoneAjax(@ModelAttribute("searchVO") MjonKakaoATVO mjonKakaoATVO, ModelMap model) throws Exception{
+		
+		//로그인 권한정보 불러오기
+		LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null;
+		String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId());
+		mjonKakaoATVO.setUserId(userId);
+		
+		
+		
+		//발송 관리 문자발송 내용 상세보기 팝업 => 문자내용(MJ_MSG_DATA)
+		MjonKakaoATVO mjonKakaoATResultVO = kakaoSentService.selectKakaoSentDetailDataAjax(mjonKakaoATVO);
+		// 대체문자 엔터키 치환
+		mjonKakaoATResultVO.setSmsTxt(StringUtil2.replaceBR(mjonKakaoATResultVO.getSmsTxt()));  
+		model.addAttribute("resultMsgDetail", mjonKakaoATResultVO);
+		
+		String msgType = mjonKakaoATResultVO.getMsgType();
+		
+		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("msgType", msgType);		
+		return "web/kakao/sent/KakaoSentDetailPopAjax";
+	}
 }
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
@@ -4,11 +4,13 @@
   =========     =======    =================================================
   2023.02.17    안주영 	
 -->
-<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
+<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd" >
 <sqlMap namespace="KakaoSent">
 	<typeAlias  alias="kakaoSentVO" type="itn.let.kakao.user.sent.service.KakaoSentVO"/>
 	<typeAlias  alias="mjonKakaoATVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoATVO"/>
 	<typeAlias  alias="kakaoAtStatVO" type="itn.let.kakao.admin.kakaoAt.service.MjonKakaoAtStatVO"/>
+	<typeAlias  alias="kakaoSentDetailVO" type="itn.let.kakao.user.sent.service.KakaoSentDetailVO"/>
+	
 
 	<!-- 공통 쿼리 부분 문자 발송 관련 -->
 	<sql id="KakaoSentDAO.selectJoinQuery">
@@ -1350,4 +1352,559 @@
 		) M2
 	</select>
 	
+	<!-- 전체 발송결과 조회  (그룹별)-->
+	<select id="KakaoSentDAO.selectAllKakaoSentList_advc" parameterClass="kakaoSentVO" resultClass="kakaoSentVO">
+		/*	KakaoSentDAO.selectAllKakaoSentList_advc	*/
+		SELECT t1.totMsgCnt,
+		       t1.userId,
+		       t1.msgGroupId,
+		       t1.msgGroupCnt,
+		       t1.smsTxt,
+		       t1.subject,
+		       t1.subjectChkYn,
+		       t1.regDate,
+		       t1.reqDate,
+		       t1.delayOrgTime,
+		       t1.callFrom,
+		       t1.totPrice,
+		       t1.eachPrice,
+		       t1.msgType,
+		       t1.fileCnt,
+		       t1.agentCode,
+		       t1.canceldate,
+		       t1.delFlag,
+		       t1.sendKind,
+		       t1.msgKind,
+		       t1.delayYn,
+		       t1.delayCompleteYn,
+		       t1.reserveYn,
+		       t1.reserveCYn,
+		       t1.diffMin,
+		       t1.atDelayYn,
+		       t1.atDelayCompleteYn,
+		       t1.msgNoticetalkSenderKey,
+		       t1.bizKakaoResendYn,
+		       t1.atDelayOrgTime
+		FROM   (
+				SELECT   COUNT(B.USER_ID) OVER()                                                                                              AS totMsgCnt,
+						 B.USER_ID                                                                                                            AS userId ,
+				         B.MSG_GROUP_ID                                                                                                       AS msgGroupId ,
+				         B.MSG_GROUP_CNT                                                                                                      AS msgGroupCnt ,
+				         B.SMS_TXT                                                                                                            AS smsTxt ,
+				         B.SUBJECT                                                                                                            AS subject ,
+				         B.SUBJECT_CHK_YN                                                                                                     AS subjectChkYn ,
+				         B.REGDATE                                                                                                            AS regDate ,
+				         B.REQ_DATE                                                                                                           AS reqDate , 
+				         (	CASE
+			                	WHEN B.DELAY_YN              = 'Y'
+			                	AND      B.DELAY_COMPLETE_YN = 'N'
+			                	THEN DATE_ADD(B.REQ_DATE, INTERVAL -30 MINUTE)
+			                	ELSE B.REQ_DATE
+				         	END )                                                                                                             AS delayOrgTime ,
+				         B.CALL_FROM                                                                                                          AS callFrom ,
+				         B.TOT_PRICE                                                                                                          AS totPrice ,
+				         B.EACH_PRICE                                                                                                         AS eachPrice ,
+				         B.MSG_TYPE                                                                                                           AS msgType ,
+				         B.FILE_CNT                                                                                                           AS fileCnt ,
+				         B.AGENT_CODE                                                                                                         AS agentCode ,
+				         B.RESERVE_C_YN                                                                                                       AS reserveCYn ,
+				         B.CANCELDATE                                                                                                         AS canceldate ,
+				         B.DEL_FLAG                                                                                                           AS delFlag ,
+				         B.SEND_KIND                                                                                                          AS sendKind ,
+				         B.MSG_KIND                                                                                                           AS msgKind ,
+				         B.DELAY_YN                                                                                                           AS delayYn ,
+				         B.DELAY_COMPLETE_YN                                                                                                  AS delayCompleteYn ,
+				         B.RESERVE_YN                                                                                                         AS reserveYn ,
+				         TIMESTAMPDIFF(minute, CAST(DATE_FORMAT(B.REQ_DATE, '%Y-%m-%d %H:%i') AS CHAR), DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i')) AS diffMin,
+				         B.AT_DELAY_YN                                                                                                        AS atDelayYn,
+				         B.AT_DELAY_COMPLETE_YN                                                                                               AS atDelayCompleteYn,
+				         A.MSG_NOTICETALK_SENDER_KEY                                                                                          AS msgNoticetalkSenderKey,
+				         A.BIZ_KAKAO_RESEND_YN                                                                                                AS bizKakaoResendYn,
+				         IF(B.AT_DELAY_YN = 'Y' and B.AT_DELAY_COMPLETE_YN = 'N', DATE_ADD(B.REQ_DATE, INTERVAL -30 MINUTE), B.REQ_DATE) 	  AS atDelayOrgTime
+				FROM     MJ_MSG_DATA A
+				         JOIN MJ_MSG_GROUP_DATA B
+				         ON       A.MSG_GROUP_ID = B.MSG_GROUP_ID
+				WHERE    (
+				                  B.DEL_FLAG = 'N' OR B.DEL_FLAG IS NULL
+				         )
+				AND      A.DEL_FLAG                          = 'N'
+<!-- 				AND      B.REQ_DATE <![CDATA[ <= ]]> DATE_ADD(NOW(), INTERVAL 60 MINUTE) -->
+				AND      B.USER_ID                           = #userId#
+				<isNotEmpty property="startDate">
+					AND      DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <![CDATA[ >= ]]> DATE_FORMAT(#startDate#, '%Y-%m-%d')
+				</isNotEmpty>
+				<isNotEmpty property="endDate">
+					AND      DATE_FORMAT(B.REGDATE, '%Y-%m-%d') <![CDATA[ <= ]]> DATE_FORMAT(#endDate#, '%Y-%m-%d')
+				</isNotEmpty>
+				<isNotEmpty property="tabType">
+					<isEqual property="tabType" compareValue="at">
+						AND A.MSG_TYPE = '8'
+					</isEqual>
+					<isEqual property="tabType" compareValue="ft">
+						AND A.MSG_TYPE = '9'
+					</isEqual>
+					<isEqual property="tabType" compareValue="all">
+						AND A.MSG_TYPE  IN ('8','9')
+					</isEqual>
+				</isNotEmpty>
+				<isEmpty property="tabType">
+						AND A.MSG_TYPE IN ('8','9')
+				</isEmpty>
+				<isNotEmpty property="stateType">
+					<isEqual property="stateType" compareValue="Y">
+						AND B.RESERVE_YN  = 'Y'
+					</isEqual>
+					<isEqual property="stateType" compareValue="N">
+						AND B.RESERVE_YN  = 'N'
+					</isEqual>
+				</isNotEmpty>
+				GROUP BY B.MSG_GROUP_ID
+				ORDER BY 1=1
+				<isNotEmpty property="searchSortCnd">
+					<isEqual property="searchSortCnd" compareValue="curState">
+						, A.CUR_STATE  $searchSortOrd$
+						, IF((RSLT_CODE != '7000'),'1','0')
+					</isEqual>
+					<isNotEqual  property="searchSortCnd" compareValue="curState">
+						,$searchSortCnd$
+					</isNotEqual>
+				</isNotEmpty>
+				<isNotEmpty property="searchSortOrd">
+					$searchSortOrd$
+				</isNotEmpty>
+				LIMIT    #recordCountPerPage#
+				OFFSET   #firstIndex#
+				) t1
+	</select>
+	
+	
+	<!-- 발송결과 상단 전광판 조회(전체, 알림톡, 친구톡) MIX 결과 수량 -->
+	<select id="KakaoSentDAO.selectKakaoSentCntAll_advc" parameterClass="kakaoSentVO" resultClass="kakaoSentVO">
+		/*	발송결과 상단 전광판 조회(전체, 알림톡, 친구톡) MIX 결과 수량	*/
+		SELECT
+			A0.MSG_GROUP_ID				AS msgGroupId
+			, COUNT(A0.RESULT)			AS msgResultCnt
+			, A0.RESULT					AS msgResultSts
+			, A0.RSLT_CODE				AS rsltCode
+			, A0.RSLT_CODE2				AS rsltCode2
+			, A0.AGENT_CODE				AS agentCode
+			, A0.EACH_PRICE				AS eachPrice
+			, sum(if(A0.tab1=0,0,1)) as filePath1		/*	알림톡	*/
+			, sum(if(A0.tab2=0,0,1)) as filePath2		/*	친구톡	*/
+		FROM(
+			SELECT
+				MD.MSG_ID
+				, MD.MSG_GROUP_ID
+				, MD.MSG_SEQ
+				, MD.CUR_STATE
+				, MD.SENT_DATE
+				, (CASE
+						WHEN 
+							MD.RSLT_CODE = '7000'
+						THEN 'S'
+						WHEN
+							( 
+							MD.RSLT_CODE  IS NULL
+							AND MD.SENT_DATE  IS NULL
+							AND MD.RSLT_DATE  IS NULL
+							)
+						THEN 'W'
+						ELSE 'F'
+					END) AS RESULT
+				, MD.RSLT_CODE
+				, MD.RSLT_CODE2
+				, MD.AGENT_CODE
+				, MG.EACH_PRICE
+				, if (MD.MSG_TYPE= '8','01','00') AS tab1
+				, if (MD.MSG_TYPE= '9','01','00') AS tab2
+			FROM
+				MJ_MSG_DATA MD
+			INNER JOIN
+				MJ_MSG_GROUP_DATA MG
+			ON
+				MD.MSG_GROUP_ID = MG.MSG_GROUP_ID
+			INNER JOIN	
+				BIZ_KAKAO_PRICE BZP
+			ON
+				MG.MSG_GROUP_ID = BZP.MSG_GROUP_ID
+			WHERE 1=1
+			AND IFNULL(MG.DEL_FLAG,'N')   = 'N'
+			AND	MD.USER_ID    = #userId#
+			<isNotEmpty property="ntceBgnde">
+				AND DATE_FORMAT(MG.REQ_DATE, '%Y/%m/%d') BETWEEN #ntceBgnde# AND #ntceEndde#
+			</isNotEmpty>
+			AND MD.MSG_TYPE IN ('8','9')
+			AND MG.RESERVE_C_YN = 'N'
+		) A0
+		GROUP BY
+			A0.MSG_GROUP_ID
+			, A0.RESULT
+			, A0.RSLT_CODE
+			, A0.RSLT_CODE2
+			, A0.AGENT_CODE
+		ORDER BY
+			A0.MSG_GROUP_ID DESC
+	</select>
+	
+	<select id="KakaoSentDAO.selectKakaoSentCntEachCnt_advc" parameterClass="kakaoSentVO" resultClass="kakaoSentVO">
+		SELECT a.MSG_GROUP_ID AS msgGroupId,
+		       a.successCount,
+		       a.waitCount,
+		       a.failCount,
+		       a.kakaoResendSuccCount,
+		       a.kakaoResendFailCount,
+		       a.successCount * bkp.BIZ_KAKAO_AT_PRICE                                        AS successPrice,
+		       (a.smsCnt      * bkp.BIZ_SMS_PRICE) + (a.mmsCnt * bkp.BIZ_MMS_PRICE)			  AS kakaoResendSuccPrice,
+		       a.divideYn
+		FROM   (SELECT  t1.MSG_GROUP_ID,
+		                ( SELECT COUNT(0)
+		                FROM    MJ_MSG_DATA C
+		                WHERE   C.RESERVE_C_YN = 'N'
+		                AND     C.MSG_GROUP_ID = t1.MSG_GROUP_ID
+		                AND     C.RSLT_CODE    = '7000'
+		                )
+		                AS successCount ,
+		                ( SELECT COUNT(0)
+		                FROM    MJ_MSG_DATA C
+		                WHERE   C.RESERVE_C_YN = 'N'
+		                AND     C.MSG_GROUP_ID = t1.MSG_GROUP_ID
+		                AND
+		                        (
+		                                C.RSLT_CODE IS NULL
+		                        AND     C.SENT_DATE IS NULL
+		                        AND     C.RSLT_DATE IS NULL
+		                        )
+		                )
+		                AS waitCount ,
+		                ( SELECT COUNT(0)
+		                FROM    MJ_MSG_DATA C
+		                WHERE   C.RESERVE_C_YN = 'N'
+		                AND     C.MSG_GROUP_ID = t1.MSG_GROUP_ID
+		                AND
+		                        (
+		                                C.RSLT_CODE          != '7000'
+		                        AND     C.RSLT_CODE IS NOT NULL
+		                        )
+		                )
+		                AS failCount ,
+		                ( SELECT COUNT(0)
+		                FROM    BIZ_LOG BL1,
+		                        MJ_MSG_DATA MMD1
+		                WHERE   t1.BIZ_KAKAO_RESEND_YN = 'Y'
+		                AND     t1.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+		                AND     MMD1.BIZ_UMID          = BL1.CMID
+		                AND     (
+		                                CASE
+		                                        WHEN BL1.CALL_STATUS IN ('6600',
+		                                                                 '4100')
+		                                        THEN 'S'
+		                                        ELSE 'F'
+		                                END ) = 'S'
+		                )
+		                kakaoResendSuccCount,
+		                ( SELECT COUNT(0)
+		                FROM    BIZ_LOG BL1,
+		                        MJ_MSG_DATA MMD1
+		                WHERE   t1.BIZ_KAKAO_RESEND_YN = 'Y'
+		                AND     t1.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+		                AND     MMD1.BIZ_UMID          = BL1.CMID
+		                AND     (
+		                                CASE
+		                                        WHEN BL1.CALL_STATUS IN ('6600',
+		                                                                 '4100')
+		                                        THEN 'S'
+		                                        ELSE 'F'
+		                                END ) = 'F'
+		                )
+		                kakaoResendFailCount,
+		                ( SELECT COUNT(0)
+		                FROM    BIZ_LOG BL1,
+		                        MJ_MSG_DATA MMD1
+		                WHERE   t1.BIZ_KAKAO_RESEND_YN = 'Y'
+		                AND     t1.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+		                AND     MMD1.BIZ_UMID          = BL1.CMID
+		                AND     (
+		                                CASE
+		                                        WHEN BL1.CALL_STATUS IN ('6600',
+		                                                                 '4100')
+		                                        THEN 'S'
+		                                        ELSE 'F'
+		                                END )              = 'S'
+		                AND     MMD1.BIZ_KAKAO_RESEND_TYPE = 'SMS'
+		                )
+		                smsCnt,
+		                ( SELECT COUNT(0)
+		                FROM    BIZ_LOG BL1,
+		                        MJ_MSG_DATA MMD1
+		                WHERE   t1.BIZ_KAKAO_RESEND_YN = 'Y'
+		                AND     t1.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+		                AND     MMD1.BIZ_UMID          = BL1.CMID
+		                AND     (
+		                                CASE
+		                                        WHEN BL1.CALL_STATUS IN ('6600',
+		                                                                 '4100')
+		                                        THEN 'S'
+		                                        ELSE 'F'
+		                                END )              = 'S'
+		                AND     MMD1.BIZ_KAKAO_RESEND_TYPE = 'MMS'
+		                )
+		                mmsCnt,
+		                CASE
+							WHEN COUNT(DISTINCT t1.REQ_DATE) > 1 THEN 'Y'
+							ELSE 'N'
+						END AS divideYN
+		FROM     mj_msg_data t1
+        WHERE    t1.DEL_FLAG = 'N'
+        AND      t1.MSG_TYPE IN ('8',
+                                '9')
+        AND      t1.CUR_STATE IN ('0',
+                                  '1',
+                                  '2',
+                                  '3')
+        AND      t1.MSG_GROUP_ID = #msgGroupId#
+        GROUP BY t1.MSG_GROUP_ID
+        )
+        a
+        LEFT OUTER JOIN BIZ_KAKAO_PRICE bkp
+        ON     bkp.MSG_GROUP_ID = a.MSG_GROUP_ID
+	</select>
+	
+	<!-- 알림톡 발송결과 상세 데이터-->
+	<select id="KakaoSentDAO.selectKakaoSentDetailView" parameterClass="kakaoSentDetailVO" resultClass="kakaoSentDetailVO">
+		/* KakaoSentDAO.selectKakaoSentDetailView */
+		select
+			a.msgGroupId
+			, a.msgGroupCnt 
+			, a.reserveYn
+			, a.reserveCYn
+			, a.canceldate
+			, a.callFrom 
+			, a.userId
+			, a.smsTxt
+			, a.subject
+			, a.reqDate 
+			, a.regDate
+			, a.msgType
+			, a.msgKind
+			, a.eachPrice
+			, a.sentDate
+			, a.diffMin
+			, a.subjectChkYn
+			, a.msgGroupId
+	    	, a.successCount
+		    , a.waitCount
+		    , a.failCount
+		    , a.kakaoResendSuccCount
+		    , a.kakaoResendFailCount
+		    , a.successCount * bkp.BIZ_KAKAO_AT_PRICE                                        AS successPrice
+		    , (a.smsCnt      * bkp.BIZ_SMS_PRICE) + (a.mmsCnt * bkp.BIZ_MMS_PRICE)			 AS kakaoResendSuccPrice
+		    , a.divideYn
+		    , a.bizKakaoResendYn
+		    , MKPI.YELLOW_ID AS yellowId
+		    , a.MSG_NOTICETALK_TMP_KEY as msgNoticetalkTmpKey
+		FROM   (SELECT  MD.MSG_GROUP_ID,
+		               ( SELECT COUNT(0)
+		               FROM    MJ_MSG_DATA C
+		               WHERE   C.RESERVE_C_YN = 'N'
+		               AND     C.MSG_GROUP_ID = MD.MSG_GROUP_ID
+		               AND     C.RSLT_CODE    = '7000'
+		               )
+		               AS successCount ,
+		               ( SELECT COUNT(0)
+		               FROM    MJ_MSG_DATA C
+		               WHERE   C.RESERVE_C_YN = 'N'
+		               AND     C.MSG_GROUP_ID = MD.MSG_GROUP_ID
+		               AND
+		                       (
+		                               C.RSLT_CODE IS NULL
+		                       AND     C.SENT_DATE IS NULL
+		                       AND     C.RSLT_DATE IS NULL
+		                       )
+		               )
+		               AS waitCount ,
+		               ( SELECT COUNT(0)
+		               FROM    MJ_MSG_DATA C
+		               WHERE   C.RESERVE_C_YN = 'N'
+		               AND     C.MSG_GROUP_ID = MD.MSG_GROUP_ID
+		               AND
+		                       (
+		                               C.RSLT_CODE          != '7000'
+		                       AND     C.RSLT_CODE IS NOT NULL
+		                       )
+		               )
+		               AS failCount ,
+		               ( SELECT COUNT(0)
+		               FROM    BIZ_LOG BL1,
+		                       MJ_MSG_DATA MMD1
+		               WHERE   MD.BIZ_KAKAO_RESEND_YN = 'Y'
+		               AND     MD.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+		               AND     MMD1.BIZ_UMID          = BL1.CMID
+		               AND     (
+		                               CASE
+		                                       WHEN BL1.CALL_STATUS IN ('6600',
+		                                                                '4100')
+		                                       THEN 'S'
+		                                       ELSE 'F'
+		                               END ) = 'S'
+		               )
+		               kakaoResendSuccCount,
+		               ( SELECT COUNT(0)
+		               FROM    BIZ_LOG BL1,
+		                       MJ_MSG_DATA MMD1
+		               WHERE   MD.BIZ_KAKAO_RESEND_YN = 'Y'
+		               AND     MD.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+		               AND     MMD1.BIZ_UMID          = BL1.CMID
+		               AND     (
+		                               CASE
+		                                       WHEN BL1.CALL_STATUS IN ('6600',
+		                                                                '4100')
+		                                       THEN 'S'
+		                                       ELSE 'F'
+		                               END ) = 'F'
+		               )
+		               kakaoResendFailCount,
+		               ( SELECT COUNT(0)
+		               FROM    BIZ_LOG BL1,
+		                       MJ_MSG_DATA MMD1
+		               WHERE   MD.BIZ_KAKAO_RESEND_YN = 'Y'
+		               AND     MD.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+		               AND     MMD1.BIZ_UMID          = BL1.CMID
+		               AND     (
+		                               CASE
+		                                       WHEN BL1.CALL_STATUS IN ('6600',
+		                                                                '4100')
+		                                       THEN 'S'
+		                                       ELSE 'F'
+		                               END )              = 'S'
+		               AND     MMD1.BIZ_KAKAO_RESEND_TYPE = 'SMS'
+		               )
+		               smsCnt,
+		               ( SELECT COUNT(0)
+		               FROM    BIZ_LOG BL1,
+		                       MJ_MSG_DATA MMD1
+		               WHERE   MD.BIZ_KAKAO_RESEND_YN = 'Y'
+		               AND     MD.MSG_GROUP_ID        = MMD1.MSG_GROUP_ID
+		               AND     MMD1.BIZ_UMID          = BL1.CMID
+		               AND     (
+		                               CASE
+		                                       WHEN BL1.CALL_STATUS IN ('6600',
+		                                                                '4100')
+		                                       THEN 'S'
+		                                       ELSE 'F'
+		                               END )              = 'S'
+		               AND     MMD1.BIZ_KAKAO_RESEND_TYPE = 'MMS'
+		               )
+		               mmsCnt,
+		               CASE
+						WHEN COUNT(DISTINCT MD.REQ_DATE) > 1 THEN 'Y'
+						ELSE 'N'
+					END AS divideYN,
+					MGD.MSG_GROUP_ID as msgGroupId
+					, MGD.MSG_GROUP_CNT as msgGroupCnt 
+					, MGD.RESERVE_YN as reserveYn
+					, MGD.RESERVE_C_YN as reserveCYn
+					, DATE_FORMAT(MGD.CANCELDATE, '%Y-%m-%d %T') as canceldate
+					, MGD.CALL_FROM  as callFrom 
+					, MGD.USER_ID as userId
+					, MGD.SMS_TXT as smsTxt
+					, MGD.SUBJECT as subject
+					, DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d %T') as reqDate 
+					, DATE_FORMAT(MGD.REGDATE, '%Y-%m-%d %T') as regDate
+					, MGD.MSG_TYPE as msgType
+					, MGD.MSG_KIND as msgKind
+					, MGD.EACH_PRICE  as eachPrice
+					, DATE_FORMAT(MD.SENT_DATE, '%Y-%m-%d %T') as sentDate
+					, MD.FILE_CNT  as fileCnt
+					, MD.FILE_PATH1 as filePath1
+					, MD.FILE_PATH2 as filePath2
+					, MD.FILE_PATH3 as filePath3 
+					, TIMESTAMPDIFF(minute, DATE_FORMAT(MGD.REQ_DATE, '%Y-%m-%d %T'), DATE_FORMAT(NOW(), '%Y-%m-%d %T')) as diffMin
+					, SUBJECT_CHK_YN as subjectChkYn
+					, MD.BIZ_KAKAO_RESEND_YN as bizKakaoResendYn
+					, MD.MSG_NOTICETALK_SENDER_KEY
+					, MD.MSG_NOTICETALK_TMP_KEY
+				FROM     MJ_MSG_DATA MD
+		        inner join MJ_MSG_GROUP_DATA MGD on
+					MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID
+					and MGD.USER_ID = MD.USER_ID
+		        AND      MGD.MSG_GROUP_ID = #msgGroupId#
+		        GROUP BY MGD.MSG_GROUP_ID
+        )
+        a
+        LEFT OUTER JOIN BIZ_KAKAO_PRICE bkp
+        ON     bkp.MSG_GROUP_ID = a.MSG_GROUP_ID
+        LEFT OUTER JOIN
+              (SELECT  a.SENDER_KEY,
+                       a.YELLOW_ID
+              FROM     mj_kakao_profile_info a
+              GROUP BY a.SENDER_KEY
+              )
+              MKPI
+       	ON     MKPI.SENDER_KEY = a.MSG_NOTICETALK_SENDER_KEY
+			
+	</select>
+	
+	<!-- REQ_DATE 조회-->
+	<select id="KakaoSentDAO.findByReqDateWhereMsgGroupId" parameterClass="String" resultClass="String">
+		/* MjonMsgSentDAO.findByReqDateWhereMsgGroupId*/
+		
+		SELECT REQ_DATE  FROM MJ_MSG_DATA WHERE MSG_GROUP_ID =#msgGroupId#
+			
+	</select>
+	
+	<!-- 발신 내용 상세보기 조회 (상세보기 버튼 클릭시)-->
+	<select id="KakaoSentDAO.selectKakaoSentDetailViewPhoneAjax" parameterClass="mjonKakaoATVO" resultClass="mjonKakaoATVO">
+
+		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 */
+			, MGD.SMS_TXT					as smsTxt 					/* 알림톡 본문 내용 치환(X) */
+			, MD.SMS_TXT					as smsTxtTrans 				/* 알림톡 본문 내용 치환(O)*/
+			, MD.BIZ_KAKAO_TITLE			as bizKakaoTitle 			/* 강조형 타이틀 */
+			, 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) */
+			, MGD.BIZ_KAKAO_RESEND_ORGNL_TXT   as bizKakaoResendOrgnlTxt /* 대체 문자( 치환X ) */
+			, MD.BIZ_KAKAO_JSON_FILE		as bizKakaoJsonFile			/* Json 파일 경로 */
+			, MKPI.YELLOW_ID as yellowId
+			, COUNT_TYPE.cnt AS bizKakaoResendTypeCnt
+			, ifnull(MGD.BIZ_KAKAO_RESEND_TYPE, MD.BIZ_KAKAO_RESEND_TYPE) AS bizKakaoResendType
+			, MD.BIZ_KAKAO_RESEND_YN                                      AS bizKakaoResendYn
+		FROM MJ_MSG_GROUP_DATA MGD
+				INNER JOIN MJ_MSG_DATA MD 
+					ON MGD.MSG_GROUP_ID = MD.MSG_GROUP_ID
+				AND MGD.USER_ID = MD.USER_ID
+				LEFT OUTER JOIN (SELECT  a.SENDER_KEY,
+					                       a.YELLOW_ID
+					              FROM     mj_kakao_profile_info a
+					              GROUP BY a.SENDER_KEY
+					              )
+					              MKPI
+       			ON     MKPI.SENDER_KEY = MD.MSG_NOTICETALK_SENDER_KEY
+       			LEFT OUTER JOIN
+		                  ( SELECT  MSG_GROUP_ID,
+		                           COUNT(*) AS cnt
+		                  FROM     ( SELECT  MSG_GROUP_ID,
+		                                    BIZ_KAKAO_RESEND_TYPE
+		                           FROM     MJ_MSG_DATA
+		                           WHERE    MSG_GROUP_ID = 'MSGGID_0000000332753' 
+		                           GROUP BY MSG_GROUP_ID,
+		                                    BIZ_KAKAO_RESEND_TYPE
+		                           )
+		                           t
+		                  GROUP BY MSG_GROUP_ID
+		                  )
+		                  COUNT_TYPE
+		         ON       COUNT_TYPE.MSG_GROUP_ID = MGD.MSG_GROUP_ID
+		WHERE
+			MGD.USER_ID				= #userId#
+		AND 
+			MGD.MSG_GROUP_ID	= #msgGroupId#
+		GROUP BY MGD.MSG_GROUP_ID
+	</select>
+	
 </sqlMap>
(No newline at end of file)
src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
--- src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
+++ src/main/resources/egovframework/sqlmap/let/msg/MjonMsgSent_SQL_mysql.xml
@@ -485,6 +485,9 @@
 				]]>
 				</isEqual>
 			</isNotEmpty>
+			<isEmpty property="searchCondition02">
+				AND B.MSG_TYPE in ('4', '6')
+			</isEmpty>
 			<isNotEmpty property="searchStartDate">
 				<![CDATA[
 					AND DATE_FORMAT(B.REGDATE, '%Y-%m-%d') >= DATE_FORMAT(#searchStartDate#, '%Y-%m-%d')
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
@@ -1076,6 +1076,62 @@
   return true;
 }
 
+//재전송 스크립트 수정
+$(window).on('load', function() {
+    if("${msgResendAllFlag eq 'Y'}") {
+        // 채널 ID 및 템플릿 선택 코드는 유지
+        $("#selectKakaoProfileList option").filter(function() {
+            return $(this).text() === '${kakaoVO.msgResendAllYellowId}';
+        }).prop('selected', true).parent().trigger("click");
+        
+        // 템플릿 선택
+        $("#selectTemplateList option").remove();
+        selectTemplateList();
+        $("#selectTemplateList").val("${kakaoVO.msgResendAllTmpKey}");
+        selectTemplateInfo("${kakaoVO.msgResendAllTmpKey}");
+        fn_viewDataInit02();
+        priceInit();
+        
+        try {
+            // JSON 파싱
+            var resendListObj = JSON.parse('${resendListJson}');
+            var listCnt = resendListObj.length;
+            
+            // 중복 제거 - Set 사용
+            var uniquePhones = new Set();
+            var uniqueResendList = [];
+            
+            // 중복 제거 로직
+            for(var i = 0; i < resendListObj.length; i++) {
+                var phone = removeDash(resendListObj[i].callTo);
+                if(!uniquePhones.has(phone)) {
+                    uniquePhones.add(phone);
+                    uniqueResendList.push(resendListObj[i]);
+                }
+            }
+            
+            
+            // 중복 제거된 데이터로 처리
+            for(var i = 0; i < uniqueResendList.length; i++) {
+                var phoneNumber = removeDash(uniqueResendList[i].callTo);
+                
+                // callTo 입력 필드에 값 설정 후 번호추가 버튼 클릭
+                $("#callTo").val(phoneNumber);
+                $(".addCallToF").trigger("click");
+                
+            }
+            
+            // 총 건수 확인
+            setTimeout(function() {
+                updateTotCnt();
+            }, 500);
+            
+        } catch(e) {
+            console.error("재전송 데이터 처리 오류:", e);
+        }
+    }
+});
+
 </script>
 
 	<div class="loading_layer">
 
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/at/KakaoAlimtalkMsgDataView_tmp.jsp
@@ -0,0 +1,219 @@
+<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ page import="itn.com.cmm.LoginVO" %>
+
+<!-- <script src="/publish/js/content.js"></script> -->
+<!-- 주소록관련 js -->
+<script type="text/javascript" defer src="<c:out value='/js/kakao/at/init.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/at/tabulator.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/kakao/at/alimtalkExcel.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/kakao/at/priceClclt.js' />"></script>
+<script type="text/javascript" src="<c:out value='/js/common/popup.js' />"></script>
+<script type="text/javascript">
+/*
+ *	등록된 발신 탬플릿 카카오톡 전송 
+ */
+ 
+ 
+function send_many(cnt){
+	for(var i = 0 ; i < cnt ; i ++){
+		sendTemplateInfo();
+	}
+}
+ 
+ 
+
+function sendTemplateInfo(){
+
+	var data = new FormData(document.bizForm);
+	$.ajax({
+		type: "POST"
+		, url: "/web/mjon/kakao/alimtalk/kakaoAlimTalkMsgSendAjax.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("카카오 알림톡 전송에 실패하였습니다.");
+		}
+	}); 
+}
+
+
+</script>
+
+	<div class="loading_layer">
+		<div class="loading_container">
+			<div class="bar"></div>
+			<div class="text">Loading</div>
+		</div>
+	</div>
+
+	<form id="bizForm" name="bizForm" method="post">
+		<input type="hidden" id="menuTopTab" name="menuTopTab" value="tabAlim">
+		<input type="hidden" id="senderKey" name="senderKey" value="669143473b1af459628b8bdf2f48da090c8895de">					<!-- 카카오 보내는 사람 Key -->
+		<input type="hidden" id="templateCode" name="templateCode" value="bizp_2023040511022617802391882">			<!-- 카카오 전송 templat Code -->
+		
+		<input type="hidden" id="templateEmphasizeType" name="templateEmphasizeType" value="TEXT">		<!-- 카카오 전송 templateEmphasizeType 타입 -->
+		
+		<input type="hidden" id="templateContent" name="templateContent" value="test">		<!-- 카카오 전송 templat내용 -->
+		<input type="hidden" id="templateTitle" name="templateTitle" value="test">			<!-- 카카오 전송 templat 타이틀 -->
+		<input type="hidden" id="templateSubtitle" name="templateSubtitle" value="test">	<!-- 카카오 전송 templat 서브 타이틀 -->
+		
+		<input type="hidden" id="subMsgTxtReplYn" name="subMsgTxtReplYn" value="">		<!-- 대체문자 전송내용에 변환문자가 있는지-->
+		<input type="hidden" id="subMsgSendYn" name="subMsgSendYn" value="N">			<!-- 대체문자 전송여부 - 알림톡 전송 실패 시 문자 전송-->  
+		<input type="hidden" id="subMsgTxt" name="subMsgTxt" value="">					<!-- 대체문자 전송내용 -->
+		<input type="hidden" id="txtReplYn" name="txtReplYn" value="N">					<!-- 완 치환문자 여부 - --> 	
+		<input type="hidden" id="bizJsonYn" name="bizJsonYn" value="N">					<!-- JSON 생성 여부 -->
+		
+		<input type="hidden" id="reserveYn" name="reserveYn" value="N">					<!-- 예약문자 여부 - 예약 선택 여부 // 아래 하단 화면 노출 여부도 같이-->	
+		<input type="hidden" id="reqDate" name="reqDate" value="">						<!--전송일자-->
+		
+		<input type="hidden" id="divideChk" name="divideChk" value="">					<!--전송일자-->
+		<input type="hidden" id="divideCnt" name="divideCnt" value="">					<!--전송일자-->
+		<input type="hidden" id="divideTime" name="divideTime" value="">				<!--전송일자-->
+		
+		<input type="hidden" id="callFrom" name="callFrom" value="01093414986">					<!--완  보내는사람 -->	
+		<input type="hidden" id="callToList" name="callToList" value="01012345678,01012345679,01012345680,01012345681,01012345682,01012345683,01012345684,01012345685,01012345686,01012345687,01012345688,01012345689,01012345690,01012345691,01012345692,01012345693,01012345694,01012345695,01012345696,01012345697,01012345698,01012345699,01012345700,01012345701,01012345702,01012345703,01012345704,01012345705,01012345706,01012345707,01012345708,01012345709,01012345710,01012345711,01012345712,01012345713,01012345714,01012345715,01012345716,01012345717,01012345718,01012345719,01012345720,01012345721,01012345722,01012345723,01012345724,01012345725,01012345726,01012345727,01012345728,01012345729,01012345730,01012345731,01012345732,01012345733,01012345734,01012345735,01012345736,01012345737,01012345738,01012345739,01012345740,01012345741,01012345742,01012345743,01012345744,01012345745,01012345746,01012345747,01012345748,01012345749,01012345750,01012345751,01012345752,01012345753,01012345754,01012345755,01012345756,01012345757,01012345758,01012345759,01012345760,01012345761,01012345762,01012345763,01012345764,01012345765,01012345766,01012345767,01012345768,01012345769,01012345770,01012345771,01012345772,01012345773,01012345774,01012345775,01012345776,01012345777,01012345778,01012345779,01012345780,01012345781,01012345782,01012345783,01012345784,01012345785,01012345786,01012345787,01012345788,01012345789,01012345790,01012345791,01012345792,01012345793,01012345794,01012345795,01012345796,01012345797,01012345798,01012345799,01012345800,01012345801,01012345802,01012345803,01012345804,01012345805,01012345806,01012345807,01012345808,01012345809,01012345810,01012345811,01012345812,01012345813,01012345814,01012345815,01012345816,01012345817,01012345818,01012345819,01012345820,01012345821,01012345822,01012345823,01012345824,01012345825,01012345826,01012345827,01012345828,01012345829,01012345830,01012345831,01012345832,01012345833,01012345834,01012345835,01012345836,01012345837,01012345838,01012345839,01012345840,01012345841,01012345842,01012345843,01012345844,01012345845,01012345846,01012345847,01012345848,01012345849,01012345850,01012345851,01012345852,01012345853,01012345854,01012345855,01012345856,01012345857,01012345858,01012345859,01012345860,01012345861,01012345862,01012345863,01012345864,01012345865,01012345866,01012345867,01012345868,01012345869,01012345870,01012345871,01012345872,01012345873,01012345874,01012345875,01012345876,01012345877">				<!--완  받는사람 리스트-->
+		<input type="hidden" id="varNmList" name="varNmList" value="">					<!--완  변수 이름  리스트-->
+		<input type="hidden" id="varValList" name="varValList" value="">				<!--완  변수 리스트-->
+		
+		<input type="hidden" id="atSmishingYn" name="atSmishingYn" value="N">		<!--알림톡 스미싱 여부-->
+	</form>
+
+	<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 kakaotalksend_cont current pay_tab_wrap">
+					<div class="send_general kakao_wrap">
+						<div class="send_right">
+							<div class="phone_bottom">
+								<div class="send_rev">
+									<div class="send_content" style="padding-bottom: 0;">
+										<div class="rev_radio">
+											<ul>
+												<li>
+													<input type="radio" id="reserYnN" name="reserYn" value="N" checked="checked"><label for="reserYnN">즉시</label>
+												</li>
+												<li>
+													<input type="radio" id="reserYnY" name="reserYn" value="Y"><label for="reserYnY">예약</label>
+												</li>
+											</ul>
+										</div>
+										<div class="send_btn">
+											<button type="button" class="btnType btnType11" onclick="javascript:sendTemplateInfo(); return false;">발송하기</button>
+											<button type="button" class="btnType btnType11" onclick="javascript:send_many(2000); return false;">여러번발송하기</button>
+											<button type="button" class="btnType btnType10" onclick="javascript:goToKakaoTestPopUp(); return false;">테스트발송</button>
+										</div>
+									</div>
+									<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>
+											<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">
+														<c:choose>
+															<c:when test="${hour < 10}">
+																<option value="0${hour}">0${hour}시</option>
+															</c:when>
+															<c:otherwise>
+																<option value="${hour}">${hour}시</option>
+															</c:otherwise>
+														</c:choose>
+													</c:forEach>
+												</select>
+												<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>
+															<c:when test="${min < 10}">
+																<option value="0${min}">0${min}분</option>
+															</c:when>
+															<c:otherwise>
+																<option value="${min}">${min}분</option>
+															</c:otherwise>
+														</c:choose>
+													</c:forEach>
+												</select>
+											</div>
+										</div>
+										<div class="rev_bottom">
+											<input type="checkbox" id="inputDivideChk" name="inputDivideChk">
+											<label for="inputDivideChk">분할전송</label>
+											<input type="text" class="dividType1" id="frmDivideCnt" name="frmDivideCnt" value="20" onkeypress='return checkNumber(event)' maxlength="4"/>
+     		            					<label for="frmDivideCnt">건씩</label>
+											<select class="selType1" id="divideTime" name="divideTime">
+						 						<option value="5">05분</option>
+						 						<option value="10">10분</option>
+						 						<option value="15">15분</option>
+						 						<option value="20">20분</option>
+						 						<option value="30">30분</option>
+						 					</select>
+						 					<label for="divideTime">간격</label>
+										</div>
+									</div>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+			</div>
+		</div>
+		<!--// send top -->(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax.jsp
@@ -3,6 +3,7 @@
 <%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
 <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
 <%@ 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="/publish/js/content.js"></script>
 <script src="/publish/js/popupLayer.js"></script>
@@ -48,102 +49,145 @@
 
 		}
 	});
-	
-	if($("#tdType").val() == "groupList" || $("#tdType").val() == ""){
-		$("#privateListTable").hide();
-		$("#groupListTable").show();
-	}else{
-		$("#privateListTable").show();
-		$("#groupListTable").hide();
-	}
 });
 
+function fnReservCancel(msgGroupId){
+	
+	var form = document.resCancelForm;
+	var loginVO = '${LoginVO}';
+	
+	form.msgGroupId.value = msgGroupId;
+	
+	if(loginVO == "" || loginVO == null){
+		
+		alert("로그인 후 이용이 가능합니다.");
+		return false;
+		
+	}
+	
+	var data = new FormData(form);
+	url = "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do";
+	
+	if(confirm("정말 예약을 취소하시겠습니까?")){
+		
+		$.ajax({
+	        type: "POST",
+	        url: url,
+	        data: data,
+	        dataType:'json',
+	        async: false,
+	        processData: false,
+	        contentType: false,
+	        cache: false,
+	        success: function (returnData, status) {
+				if(status == 'success'){
+					if("fail"==returnData.result){
+						
+						alert(returnData.message);
+						return false;
+					}
+				
+					var smsCnt = returnData.resultSts;
+				
+					alert("예약 발송이 정상적으로 취소 되었습니다.");
+					
+					linkPage(1);
+					
+				} else if(status== 'fail'){
+					alert(returnData.message);
+				}
+			},
+	        error: function (e) { alert("예약 취소에 실패하였습니다."); console.log("ERROR : ", e); }
+	    });
+		
+	}
+	
+}
+
+function fn_sentDetailView(msgGroupId) {
+	// msgGroupId 값을 form에 설정
+	$("#searchForm #msgGroupId").val(msgGroupId);
+
+	// form을 해당 URL로 제출
+	$("#searchForm").attr("action", "/web/kakao/sent/selectKakaoSentDetailView.do");
+	$("#searchForm").submit();
+}
+
 </script>
-	<input type="button" id="tooltopClick" data-tooltip="rev_popup01" style="display:none;"/>
     <div class="list_info">
-    	<input type="hidden"  id="tdType" value="${kakaoSentVO.listType}">
-        <p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
-        <div>
-            <label for="pageUnit" class="label">줄보기 선택</label>
-            <select id="pageUnit" name="pageUnit" class="selType2">
-                <option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
+		<p>총 발송건수 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
+		<div>
+			<p class="cf_text c_e40000">※ 예약 발송취소는 예약 발송시간 기준 5분 전까지만 가능</p>
+			<label for="pageUnit" class="label">줄보기 선택</label>
+			<select id="pageUnit" name="pageUnit" class="selType2">
+				<option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
                 <option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option>
                 <option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option>
-            </select>
-        </div>
-    </div>
-	<!-- 전송건별 - groupList - -->
-	<div class="tb_wrap" id="groupListTable">
+			</select>
+		</div>
+	</div>
+	<!-- 발송화면 개선 : 카카오톡 테이블 수정 -->
+	<div class="tb_wrap">
 		<table class="tType4">
 			<colgroup>
-				<col style="width: 40px;">
-				<col style="width: 14%;">
-				<col style="width: 7%;">
-				<col style="width: 10%;">
-				<col style="width: 18%;">
-				<col style="width: 12%;">
-				<col style="width: 10%;">
+				<col style="width: 45px;">
 				<col style="width: 12%;">
 				<col style="width: 7%;">
-				<col style="width: 12%;">
+				<col style="width: auto;">
 				<col style="width: 7%;">
-				<%-- <col style="width: 10%;"> --%>
+				<col style="width: 6%;">
+				<col style="width: 6%;">
+				<col style="width: 6%;">
+				<col style="width: 6%;">
+				<col style="width: 6%;">
+				<col style="width: 8%;">
+				<col style="width: 8%;">
 			</colgroup>
 			<thead>
 				<tr>
-					<th>
+					<th rowspan="2">
 						<label for="" class="label">전체 선택</label>
 						<input type="checkbox">
 					</th>
-					<th>
-						발송일시
+					<th rowspan="2">발송일시
 						<div class="sort_wrap">
 							<input type="button" class="sort sortBtn" id="sort_reqdate">
 						</div>
 					</th>
-					<th>
-						형태
+					<th rowspan="2">형태
 						<div class="sort_wrap">
-							<input type="button" class="sort sortBtn" id="sort_msgType">
+							<input type="button" class="sort sortBtn" id="sort_orderByCode">
 						</div>
 					</th>
-					<th>내용</th>
-					<th>
-						받는사람
-						<div class="sort_wrap">
-							<input type="button" class="sort sortBtn" id="sort_callTo">
-						</div>
-					</th>
-					<th>
-						발신번호
-						<div class="sort_wrap">
-							<input type="button" class="sort sortBtn" id="sort_callFrom">
-						</div>
-					</th>
-					<th>
-						발송건수
+					<th rowspan="2">내용</th>
+					<th rowspan="2">발송건수
 						<div class="sort_wrap">
 							<input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
 						</div>
 					</th>
-					<th>카카오톡 결과</th>
-					<th>건수</th>
-					<th>대체문자 결과</th>
-					<th>건수</th>
-					<!-- <th>금액</th> -->
+					<th rowspan="2">대기</th>												
+					<th colspan="2">카카오톡결과</th>
+					<th colspan="2">대체문자결과</th>
+					<th rowspan="2">금액(원)</th>
+					<th rowspan="2">진행상황</th>
 				</tr>
+				<tr>
+					<th>성공</th>
+					<th>실패</th>
+					<th>성공</th>
+					<th>실패</th>
+				</tr>
+
 			</thead>
-			
 			<tbody>
 				<c:if test="${not empty resultAllSentList}">
 					<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
 						<tr>
-							<td rowspan="2">
+							<td>
 								<label for="msgSentDel${status.count}" class="label">선택</label>
-								<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" 
-									value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>> 
+								<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>> 
 							</td>
-							<td rowspan="2">
+							<td>
 								<c:choose>
 									<c:when test="${resultAllSentList.atDelayYn eq 'Y' && resultAllSentList.atDelayCompleteYn eq 'N'}">
 										<c:choose>
@@ -165,240 +209,89 @@
 									</c:otherwise>
 								</c:choose>
 							</td>
-							<td rowspan="2">
-								<p class="c_222 fwRg">
-									<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
-									<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
-								</p>
+							<td>
+								<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
+								<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
 							</td>
-							<td rowspan="2">
-<%-- 								<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
-								<button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
+							<td class="result_cont">
+                                <div class="icon_wrap">
+                                    <c:if test="${resultAllSentList.reserveYn eq 'Y'}">
+										<span class="re">예약</span>
+										<!-- 예약일때만 분할이 있음 -->
+										<c:if test="${resultAllSentList.divideYn eq 'Y'}">
+											<span class="di">분할</span>
+										</c:if>
+									</c:if>
+                                    <a href="#none" onclick="fn_sentDetailView('${resultAllSentList.msgGroupId}');">
+                                    	<c:out value="${resultAllSentList.smsTxt}"/>
+                                   	</a>
+                                </div>
+                            </td>
+							<td>
+								<c:out value="${resultAllSentList.msgGroupCnt}"/>
 							</td>
-							<td rowspan="2">
+							<td>
+								<fmt:formatNumber value="${resultAllSentList.waitCount}" type="number" groupingUsed="true" />
+							</td>
+							<td>
+								<p class="c_002c9a"><fmt:formatNumber value="${resultAllSentList.successCount}" type="number" groupingUsed="true" /></p>
+							</td>
+							<td>
+								<p class="c_e40000"><fmt:formatNumber value="${resultAllSentList.failCount}" type="number" groupingUsed="true" /></p>
+							</td>
+							<td>
+								<p class="c_002c9a"><fmt:formatNumber value="${resultAllSentList.kakaoResendSuccCount}" type="number" groupingUsed="true" /></p>
+							</td>
+							<td>
+								<p class="c_e40000"><fmt:formatNumber value="${resultAllSentList.kakaoResendFailCount}" type="number" groupingUsed="true" /></p>
+							</td>
+							<td>
+								<c:if test="${resultAllSentList.totPrice ne '-'}">
+									<fmt:formatNumber value="${resultAllSentList.totPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
+								</c:if>
+								<c:if test="${resultAllSentList.totPrice eq '-'}">
+									-
+								</c:if>
+							</td>
+							<td>
 								<c:choose>
-									<c:when test="${resultAllSentList.msgGroupCnt > 1}">
-										<p>
-											<c:choose>
-												<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
-													<c:out value="${resultAllSentList.addrNm}"/>
-												</c:when>
-												<c:otherwise>
-													<c:out value="${resultAllSentList.callToComma}"/>
-												</c:otherwise>
-											</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
-										</p>	
-									</c:when>
-									<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
-										<p><c:out value="${resultAllSentList.addrNm}"/></p>
+									<c:when test="${resultAllSentList.statusCd ne '03' }">
+										<ec:code codeId="ITN057" code="${resultAllSentList.statusCd }" />
 									</c:when>
 									<c:otherwise>
-										<p><c:out value="${resultAllSentList.callToComma}"/></p>
+										<p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${resultAllSentList.msgGroupId}'); return false;">예약취소</button></p>
 									</c:otherwise>
 								</c:choose>
 							</td>
-							<td rowspan="2"><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
-							<td rowspan="2"><p><c:out value="${resultAllSentList.msgGroupCnt}"/></p></td>
-							
-							
-							
-							<td><p class="c_002c9a fwRg">정상수신</p></td>
-							<td>
-								<!-- 성공건이 1건 이상이면 클릭이벤트 추가 -->
-								<p class="c_002c9a fwRg" <c:if test="${resultAllSentList.successCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
-								<fmt:formatNumber value="${resultAllSentList.successCount}" pattern="#,###.#"/></p>
-							</td>
-							<td><p class="c_002c9a fwRg">정상수신</p></td>
-							<td>
-								<!-- 성공건이 1건 이상이면 클릭이벤트 추가 -->
-								<p class="c_002c9a fwRg" <c:if test="${resultAllSentList.kakaoResendSuccCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
-								<fmt:formatNumber value="${resultAllSentList.kakaoResendSuccCount}" pattern="#,###.#"/></p>
-							</td>
-							<%-- <td>
-								<p class="c_002c9a fwRg">
-								<c:if test="${succPrice > 0}"><fmt:formatNumber value="${succPrice}" pattern="#,###.#"/></c:if>
-								<c:if test="${succPrice eq 0}">0</c:if>
-								</p>
-							</td> --%>
-						</tr>
-						<tr>
-							<td class="c_222"><p>실패/대기</p></td>
-							<td class="c_222">
-								<!-- 실패건이 1건 이상이면 클릭이벤트 추가 -->
-								<p <c:if test="${(resultAllSentList.waitCount+resultAllSentList.failCount) > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
-								<fmt:formatNumber value="${resultAllSentList.failCount}" pattern="#,###"/> / <fmt:formatNumber value="${resultAllSentList.waitCount}" pattern="#,###"/></p>
-							</td>
-							<td class="c_222"><p>실패</p></td>
-							<td class="c_222"><!-- 실패건이 1건 이상이면 클릭이벤트 추가 -->
-								<p <c:if test="${resultAllSentList.kakaoResendFailCount > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
-								<fmt:formatNumber value="${resultAllSentList.kakaoResendFailCount}" pattern="#,###"/></p></td>
-							<%--<td class="c_222">
-								<p>
-									 <c:if test="${(failPrice+waitPrice) > 0}"><fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/></c:if>
-									<c:if test="${(failPrice+waitPrice) eq 0}">0</c:if> 
-								</p>
-							</td>--%>
 						</tr>
 					</c:forEach>
 				</c:if>
 				<c:if test="${empty resultAllSentList}">
 						<tr>
-							<td colspan="11">발송 내역이 없습니다.</td>
+							<td colspan="12">발송 내역이 없습니다.</td>
 						</tr>
 				</c:if>
 			</tbody>
 		</table>
 	</div>
-	<!-- 전송건별 끝 -->
 	
-	<!-- 받는사람(개인별) privatevate -->
-	<div class="tb_wrap" id="privateListTable" style="display:none;">
-		<table class="tType4">
-			<colgroup>
-				<col style="width: 40px;">
-				<col style="width: 15%;">
-				<col style="width: 12%;">
-				<col style="width: 90px;">
-				<col style="width: 12%;">
-				<col style="width: 14%;">
-				<col style="width: 11%;">
-				<col style="width: 11%;">
-			</colgroup>
-			<thead>
-				<tr>
-					<th>
-						<label for="" class="label">전체 선택</label>
-						<input type="checkbox">
-					</th>
-					<th>
-						발송일시
-						<div class="sort_wrap">
-							<input type="button" class="sort sortBtn" id="sort_reqdate">
-						</div>
-					</th>
-					<th>
-						형태
-						<div class="sort_wrap">
-							<input type="button" class="sort sortBtn" id="sort_msgType">
-						</div>
-					</th>
-					<th>내용</th>
-					<th>
-						받는사람
-						<div class="sort_wrap">
-							<input type="button" class="sort sortBtn" id="sort_callTo">
-						</div>
-					</th>
-					<th>
-						발신번호
-						<div class="sort_wrap">
-							<input type="button" class="sort sortBtn" id="sort_callFrom">
-						</div>
-					</th>
-					<th>카카오톡 결과</th>
-					<th>대체문자 결과</th>
-				</tr>
-			</thead>
-			
-			<tbody>
-				<c:if test="${not empty resultAllSentList}">
-					<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
-						<tr>
-							<td>
-								<label for="msgSentDel${status.count}" class="label">선택</label>
-								<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" 
-									value="${resultAllSentList.msgSeq}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>> 
-							</td>
-							<td><p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p></td>
-							<td>
-								<p class="c_222 fwRg">
-									<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
-									<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
-								</p>
-							</td>
-							<td>
-<%-- 								<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
-								<button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
-								<!-- <button class="btnType btnType20" data-tooltip="rev_popup03">상세보기</button> -->
-							</td>
-							<td>
-								<c:choose>
-									<c:when test="${resultAllSentList.msgGroupCnt > 1}">
-										<p>
-											<c:choose>
-												<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
-													<c:out value="${resultAllSentList.addrNm}"/>
-												</c:when>
-												<c:otherwise>
-													<c:out value="${resultAllSentList.callToComma}"/>
-												</c:otherwise>
-											</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
-										</p>	
-									</c:when>
-									<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
-										<p><c:out value="${resultAllSentList.addrNm}"/></p>
-									</c:when>
-									<c:otherwise>
-										<p><c:out value="${resultAllSentList.callToComma}"/></p>
-									</c:otherwise>
-								</c:choose>
-							</td>
-							<td><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
-							<td>
-								<c:choose>
-									<c:when test="${resultAllSentList.msgResult eq 'S'}">
-										<p class="c_002c9a fwRg">정상수신</p>
-									</c:when>
-									<c:when test="${resultAllSentList.msgResult eq 'W'}">
-										<p class="fwRg c_19b32b">발송대기</p>
-									</c:when>
-									<c:when test="${resultAllSentList.msgResult eq 'F'}">
-										<p class="fwRg c_e40000">수신오류</p>
-									</c:when>
-									<c:otherwise>-</c:otherwise>
-								</c:choose>
-							</td>
-							<td>
-							<!--  알림톡 수신오류인 경우, 대체문자 발송 여부에 따라 정상수신/수신오류 표기 -->
-								<c:choose>
-									<c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'S'}">
-										<p class="c_002c9a fwRg">정상수신</p>
-									</c:when>
-									<c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'F'}">
-										<p class="fwRg c_e40000">수신오류</p>
-									</c:when>
-									<c:otherwise>-</c:otherwise>
-								</c:choose>
-							</td>
-							
-						</tr>
-					</c:forEach>
-				</c:if>
-				<c:if test="${empty resultAllSentList}">
-						<tr>
-							<td colspan="8">발송 내역이 없습니다.</td>
-						</tr>
-				</c:if>
-			</tbody>
-		</table>
-	</div>
-	<!-- 수신자별 끝 -->
-	
+	<!--// 발송화면 개선 : 카카오톡 테이블 수정 -->
+
 	<div class="table_btn clearfix">
-		<div class="table_btn_left">
-		<!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) -->
-<!-- 			<button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> -->
-			<button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button>
-			<button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${kakaoSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button>
-            <button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${kakaoSentVO.listType}'); return false;"></i>수신거부번호 등록</button>
+                             <div class="table_btn_left">
+			<button type="button" onclick="javascript:fnDelete(); return false;" class="btnType btnType15"><i class="remove_img"></i>선택삭제</button>
 		</div>
 		<div class="table_btn_right">
-			<button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${kakaoSentVO.listType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button>
-			<button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${kakaoSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button>
+			<button type="button" class="excel_btn btnType"><i class="downroad"></i>발송결과 리스트</button>
 		</div>
-	</div>
+	</div>								
+
 	<c:if test="${!empty resultAllSentList}">
 	   <ul class="pagination">
 	       <ui:pagination paginationInfo = "${paginationInfo}"  type="imageWeb" jsFunction="linkPage" />
 	   </ul>
 	</c:if>
+	
+	<form id="resCancelForm" name="resCancelForm" method="post">
+		<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
+	</form>
(No newline at end of file)
 
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentAllListAjax_back_250318.jsp
@@ -0,0 +1,405 @@
+<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ page import="itn.com.cmm.LoginVO" %>
+<script src="/publish/js/content.js"></script>
+<script src="/publish/js/popupLayer.js"></script>
+<script type="text/javascript">
+$(document).ready(function(){
+	
+	/* 목록 정렬 항목 아이콘 표시 */ 
+	var searchSortCnd = $("[name='searchSortCnd']").val();
+	var searchSortOrd = $("[name='searchSortOrd']").val();
+	if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd  != undefined && searchSortOrd  != undefined) {
+		var $sort_div = $("#sort_"+ searchSortCnd);
+		var sortClass = 'sortBtn' ;
+		if (searchSortOrd == "desc") sortClass = "sortBtnDesc";
+		$sort_div.replaceClass('sortBtn' , sortClass) ;
+		$sort_div.attr("sortOrd", searchSortOrd);
+	}
+	
+	//체크박스 전체 선택 및 해제
+	var allChkSts = false;
+	$("#allCheck").click(function(){
+		
+		if(!allChkSts){// 전체선택이 해제되어 있을 경우
+			
+			$("input[name=msgSentDel]").prop("checked", true);
+			allChkSts = true;
+			
+			//발송 대기건은 선택 삭제가 안되도록 처리함
+			$("input:checkbox[name='msgSentDel']:checked").each(function(index){
+				
+				var disabledChk = $(this).prop('disabled');
+				if(disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+					
+					$(this).prop("checked", false);
+					
+				}
+				
+			});
+			
+		}else{
+			
+			$("input[name=msgSentDel]").prop("checked", false);
+			allChkSts = false;
+
+		}
+	});
+	
+	if($("#tdType").val() == "groupList" || $("#tdType").val() == ""){
+		$("#privateListTable").hide();
+		$("#groupListTable").show();
+	}else{
+		$("#privateListTable").show();
+		$("#groupListTable").hide();
+	}
+});
+
+</script>
+	<input type="button" id="tooltopClick" data-tooltip="rev_popup01" style="display:none;"/>
+    <div class="list_info">
+    	<input type="hidden"  id="tdType" value="${kakaoSentVO.listType}">
+        <p>총 <span class="c_e40000"><c:out value="${totalRecordCount}"/></span>건</p>
+        <div>
+            <label for="pageUnit" class="label">줄보기 선택</label>
+            <select id="pageUnit" name="pageUnit" class="selType2">
+                <option value="10" <c:if test="${paginationInfo.recordCountPerPage == '10'}">selected</c:if> >10개보기</option>
+                <option value="20" <c:if test="${paginationInfo.recordCountPerPage == '20'}">selected</c:if> >20개보기</option>
+                <option value="30" <c:if test="${paginationInfo.recordCountPerPage == '30'}">selected</c:if> >30개보기</option>
+            </select>
+        </div>
+    </div>
+	<!-- 전송건별 - groupList - -->
+	<div class="tb_wrap" id="groupListTable">
+		<table class="tType4">
+			<colgroup>
+				<col style="width: 40px;">
+				<col style="width: 14%;">
+				<col style="width: 7%;">
+				<col style="width: 10%;">
+				<col style="width: 18%;">
+				<col style="width: 12%;">
+				<col style="width: 10%;">
+				<col style="width: 12%;">
+				<col style="width: 7%;">
+				<col style="width: 12%;">
+				<col style="width: 7%;">
+				<%-- <col style="width: 10%;"> --%>
+			</colgroup>
+			<thead>
+				<tr>
+					<th>
+						<label for="" class="label">전체 선택</label>
+						<input type="checkbox">
+					</th>
+					<th>
+						발송일시
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_reqdate">
+						</div>
+					</th>
+					<th>
+						형태
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_msgType">
+						</div>
+					</th>
+					<th>내용</th>
+					<th>
+						받는사람
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_callTo">
+						</div>
+					</th>
+					<th>
+						발신번호
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_callFrom">
+						</div>
+					</th>
+					<th>
+						발송건수
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_msgGroupCnt">
+						</div>
+					</th>
+					<th>카카오톡 결과</th>
+					<th>건수</th>
+					<th>대체문자 결과</th>
+					<th>건수</th>
+					<!-- <th>금액</th> -->
+				</tr>
+			</thead>
+			
+			<tbody>
+				<c:if test="${not empty resultAllSentList}">
+					<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
+						<tr>
+							<td rowspan="2">
+								<label for="msgSentDel${status.count}" class="label">선택</label>
+								<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" 
+									value="${resultAllSentList.msgGroupId}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>> 
+							</td>
+							<td rowspan="2">
+								<c:choose>
+									<c:when test="${resultAllSentList.atDelayYn eq 'Y' && resultAllSentList.atDelayCompleteYn eq 'N'}">
+										<c:choose>
+											<c:when test="${resultAllSentList.curState eq '0'}">
+												<%-- 
+													20240906 추가
+													발송 대기 상태일 때만 원래 발송시간을 보여주고, 발송이 완료되면 발송 처리 완료 시간(reqDate)을 보여준다.
+													30분 딜레이 된 건으로 관리자 승인/취소 처리가 완료 되지 않은 건에 대해서 -30분 처리하여 원래 사용자가 보내려던 시간을 표시해줌
+												 --%>
+												<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.atDelayOrgTime}" /></p>
+											</c:when>
+											<c:otherwise>
+												<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>
+											</c:otherwise>
+										</c:choose>
+									</c:when>
+									<c:otherwise>
+										<p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p>									
+									</c:otherwise>
+								</c:choose>
+							</td>
+							<td rowspan="2">
+								<p class="c_222 fwRg">
+									<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
+									<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
+								</p>
+							</td>
+							<td rowspan="2">
+<%-- 								<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
+								<button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
+							</td>
+							<td rowspan="2">
+								<c:choose>
+									<c:when test="${resultAllSentList.msgGroupCnt > 1}">
+										<p>
+											<c:choose>
+												<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
+													<c:out value="${resultAllSentList.addrNm}"/>
+												</c:when>
+												<c:otherwise>
+													<c:out value="${resultAllSentList.callToComma}"/>
+												</c:otherwise>
+											</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
+										</p>	
+									</c:when>
+									<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
+										<p><c:out value="${resultAllSentList.addrNm}"/></p>
+									</c:when>
+									<c:otherwise>
+										<p><c:out value="${resultAllSentList.callToComma}"/></p>
+									</c:otherwise>
+								</c:choose>
+<%-- 								<p>${resultAllSentList.msgGroupId}</p> --%>
+							</td>
+							<td rowspan="2"><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
+							<td rowspan="2"><p><c:out value="${resultAllSentList.msgGroupCnt}"/></p></td>
+							
+							
+							
+							<td><p class="c_002c9a fwRg">정상수신</p></td>
+							<td>
+								<!-- 성공건이 1건 이상이면 클릭이벤트 추가 -->
+								<p class="c_002c9a fwRg" <c:if test="${resultAllSentList.successCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
+								<fmt:formatNumber value="${resultAllSentList.successCount}" pattern="#,###.#"/></p>
+							</td>
+							<td><p class="c_002c9a fwRg">정상수신</p></td>
+							<td>
+								<!-- 성공건이 1건 이상이면 클릭이벤트 추가 -->
+								<p class="c_002c9a fwRg" <c:if test="${resultAllSentList.kakaoResendSuccCount > 0}">onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'S'); return false;" style="cursor:pointer;"</c:if>>
+								<fmt:formatNumber value="${resultAllSentList.kakaoResendSuccCount}" pattern="#,###.#"/></p>
+							</td>
+							<%-- <td>
+								<p class="c_002c9a fwRg">
+								<c:if test="${succPrice > 0}"><fmt:formatNumber value="${succPrice}" pattern="#,###.#"/></c:if>
+								<c:if test="${succPrice eq 0}">0</c:if>
+								</p>
+							</td> --%>
+						</tr>
+						<tr>
+							<td class="c_222"><p>실패/대기</p></td>
+							<td class="c_222">
+								<!-- 실패건이 1건 이상이면 클릭이벤트 추가 -->
+								<p <c:if test="${(resultAllSentList.waitCount+resultAllSentList.failCount) > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
+								<fmt:formatNumber value="${resultAllSentList.failCount}" pattern="#,###"/> / <fmt:formatNumber value="${resultAllSentList.waitCount}" pattern="#,###"/></p>
+							</td>
+							<td class="c_222"><p>실패</p></td>
+							<td class="c_222"><!-- 실패건이 1건 이상이면 클릭이벤트 추가 -->
+								<p <c:if test="${resultAllSentList.kakaoResendFailCount > 0}"> onclick="javascript:fnMsgSFDetailList('${resultAllSentList.msgGroupId}', 'F'); return false;" style="cursor:pointer;"</c:if>>
+								<fmt:formatNumber value="${resultAllSentList.kakaoResendFailCount}" pattern="#,###"/></p></td>
+							<%--<td class="c_222">
+								<p>
+									 <c:if test="${(failPrice+waitPrice) > 0}"><fmt:formatNumber value="${(failPrice+waitPrice)}" pattern="#,###.#"/></c:if>
+									<c:if test="${(failPrice+waitPrice) eq 0}">0</c:if> 
+								</p>
+							</td>--%>
+						</tr>
+					</c:forEach>
+				</c:if>
+				<c:if test="${empty resultAllSentList}">
+						<tr>
+							<td colspan="11">발송 내역이 없습니다.</td>
+						</tr>
+				</c:if>
+			</tbody>
+		</table>
+	</div>
+	<!-- 전송건별 끝 -->
+	
+	<!-- 받는사람(개인별) privatevate -->
+	<div class="tb_wrap" id="privateListTable" style="display:none;">
+		<table class="tType4">
+			<colgroup>
+				<col style="width: 40px;">
+				<col style="width: 15%;">
+				<col style="width: 12%;">
+				<col style="width: 90px;">
+				<col style="width: 12%;">
+				<col style="width: 14%;">
+				<col style="width: 11%;">
+				<col style="width: 11%;">
+			</colgroup>
+			<thead>
+				<tr>
+					<th>
+						<label for="" class="label">전체 선택</label>
+						<input type="checkbox">
+					</th>
+					<th>
+						발송일시
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_reqdate">
+						</div>
+					</th>
+					<th>
+						형태
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_msgType">
+						</div>
+					</th>
+					<th>내용</th>
+					<th>
+						받는사람
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_callTo">
+						</div>
+					</th>
+					<th>
+						발신번호
+						<div class="sort_wrap">
+							<input type="button" class="sort sortBtn" id="sort_callFrom">
+						</div>
+					</th>
+					<th>카카오톡 결과</th>
+					<th>대체문자 결과</th>
+				</tr>
+			</thead>
+			
+			<tbody>
+				<c:if test="${not empty resultAllSentList}">
+					<c:forEach var="resultAllSentList" items="${resultAllSentList}" varStatus="status">
+						<tr>
+							<td>
+								<label for="msgSentDel${status.count}" class="label">선택</label>
+								<input type="checkbox" id="msgSentDel${status.count}" name="msgSentDel" 
+									value="${resultAllSentList.msgSeq}" <c:if test="${resultAllSentList.curState eq '0'}">disabled</c:if>> 
+							</td>
+							<td><p><fmt:formatDate pattern = "yyyy-MM-dd HH:mm" value = "${resultAllSentList.reqdate}" /></p></td>
+							<td>
+								<p class="c_222 fwRg">
+									<c:if test="${resultAllSentList.msgType eq '8'}">알림톡</c:if>
+									<c:if test="${resultAllSentList.msgType eq '9'}">친구톡</c:if>
+								</p>
+							</td>
+							<td>
+<%-- 								<button class="btnType btnType20" data-tooltip="rev_popup01" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}','${resultAllSentList.fileCnt}'); return false;">상세보기</button> --%>
+								<button class="btnType btnType20" onClick="javascript:fnRevDetailPop('${resultAllSentList.msgGroupId}','${resultAllSentList.msgId}'); return false;">상세보기</button>
+								<!-- <button class="btnType btnType20" data-tooltip="rev_popup03">상세보기</button> -->
+							</td>
+							<td>
+								<c:choose>
+									<c:when test="${resultAllSentList.msgGroupCnt > 1}">
+										<p>
+											<c:choose>
+												<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
+													<c:out value="${resultAllSentList.addrNm}"/>
+												</c:when>
+												<c:otherwise>
+													<c:out value="${resultAllSentList.callToComma}"/>
+												</c:otherwise>
+											</c:choose> 외 <fmt:formatNumber value="${resultAllSentList.msgGroupCnt - 1}" pattern="#,###"/>명
+										</p>	
+									</c:when>
+									<c:when test="${resultAllSentList.addrNm ne '-' and resultAllSentList.addrNm ne ''}">
+										<p><c:out value="${resultAllSentList.addrNm}"/></p>
+									</c:when>
+									<c:otherwise>
+										<p><c:out value="${resultAllSentList.callToComma}"/></p>
+									</c:otherwise>
+								</c:choose>
+							</td>
+							<td><p><c:out value="${resultAllSentList.callFromComma}"/></p></td>
+							<td>
+								<c:choose>
+									<c:when test="${resultAllSentList.msgResult eq 'S'}">
+										<p class="c_002c9a fwRg">정상수신</p>
+									</c:when>
+									<c:when test="${resultAllSentList.msgResult eq 'W'}">
+										<p class="fwRg c_19b32b">발송대기</p>
+									</c:when>
+									<c:when test="${resultAllSentList.msgResult eq 'F'}">
+										<p class="fwRg c_e40000">수신오류</p>
+									</c:when>
+									<c:otherwise>-</c:otherwise>
+								</c:choose>
+							</td>
+							<td>
+							<!--  알림톡 수신오류인 경우, 대체문자 발송 여부에 따라 정상수신/수신오류 표기 -->
+								<c:choose>
+									<c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'S'}">
+										<p class="c_002c9a fwRg">정상수신</p>
+									</c:when>
+									<c:when test="${resultAllSentList.msgResult eq 'F' and resultAllSentList.bizKakaoResendYn eq 'Y' and resultAllSentList.callStatus eq 'F'}">
+										<p class="fwRg c_e40000">수신오류</p>
+									</c:when>
+									<c:otherwise>-</c:otherwise>
+								</c:choose>
+							</td>
+							
+						</tr>
+					</c:forEach>
+				</c:if>
+				<c:if test="${empty resultAllSentList}">
+						<tr>
+							<td colspan="8">발송 내역이 없습니다.</td>
+						</tr>
+				</c:if>
+			</tbody>
+		</table>
+	</div>
+	<!-- 수신자별 끝 -->
+	
+	<div class="table_btn clearfix">
+		<div class="table_btn_left">
+		<!-- 2022.07.04 발송결과 화면에 리스트 선택삭제 기능 제거(카운팅 및 금액 합산 오류 관련) -->
+<!-- 			<button type="button" class="btnType btnType15" onClick="javascript:fnDelete(); return false;"><i class="remove_img"></i>선택삭제</button> -->
+			<button type="button" data-tooltip="rev_popup02" class="btnType btnType15"><i class="add_img"></i>그룹등록</button>
+			<button type="button" class="btnType btnType15" onClick="javascript:fnDeleteAddrNo('${kakaoSentVO.listType}'); return false;"><i class="remove_img"></i>주소록에서 번호 삭제</button>
+            <button type="button" class="btnType btnType15" onClick="javascript:fnAddBlockNo('${kakaoSentVO.listType}'); return false;"></i>수신거부번호 등록</button>
+		</div>
+		<div class="table_btn_right">
+			<button type="button" class="excel_btn btnType" onClick="javascript:fnExcelDownLoad('all','${kakaoSentVO.listType}'); return false;"><i class="downroad"></i>엑셀 다운로드</button>
+			<button type="button" class="print_btn btnType" onClick="javascript:fnShowPrintPopup('all','${kakaoSentVO.tabType}'); return false;"><i class="print_img"></i>발송결과 출력하기</button>
+		</div>
+	</div>
+	<c:if test="${!empty resultAllSentList}">
+	   <ul class="pagination">
+	       <ui:pagination paginationInfo = "${paginationInfo}"  type="imageWeb" jsFunction="linkPage" />
+	   </ul>
+	</c:if>
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
@@ -5,111 +5,112 @@
 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
 <% pageContext.setAttribute("newLineChar", "\n"); %>
 
-				<div class="list_tab_wrap2 kakao_rev_tab">
-					<!-- tab button -->
-					<ul class="list_tab"> 
-						<li class="tab active"><button type="button" onclick="popupTab(this,'1');" id="atBtn">카카오톡</button></li>
-						<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
-							<li class="tab"><button type="button" onclick="popupTab(this,'2');">대체문자</button></li>
-						</c:if>
-					</ul><!--// tab button -->
-				</div>
+<div class="phone">
+    <!-- 탭스타일 -->
+    <div class="list_tab_wrap2 type5">
+        <ul class="tabType3" id="tabType" name="tabType">
+            <li class="tab active"><button type="button" onclick="phoneTab(this,'1');" title="선택됨">카카오톡</button></li>
+            <c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
+                <li class="tab"><button type="button" onclick="phoneTab(this,'2');">대체문자</button></li>
+            </c:if>
+        </ul>
+    </div>
+    <!--// 탭스타일 -->
 
-				<div class="popCont current kakao_wrap" id="popCont_1">
-					<div class="rev_pop_in">
-						<div class="rev_pop_middle clearfix">
-							<span><c:out value="${resultMsgDetail.reqDate }" /></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="">
-									<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">
-										<!-- 강조 텍스트 --> 
-										<!-- 강조 텍스트 --> 
-									<c:choose>
-										<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
-											<p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
-											<p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
-										</c:when>
-										<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
-											<div class="kakao_image">
-												<img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
-											</div>
-										</c:when>
-										<c:otherwise>
-										</c:otherwise>
-									</c:choose>
-									
-									<!-- 알림톡 내용 표시 -->
-									<p class="template_text">
-										<!-- 내용 -->
-										<!-- 내용 -->
-										<c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
-									</p>
-									
-									<!-- 부가정보 내용  -->
-									<c:choose>
-										<c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
-											<!-- 부가정보형인 경우 부가정보 내용 표시 -->
-											<p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>		
-										</c:when>
-										<c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
-											<!-- 채널 추가형인경우 채널 추가 메세지 표시 -->
-											<p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
-										</c:when>
-										<c:otherwise>
-										</c:otherwise>
-									</c:choose>
-									
-									<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
-									<c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
-										<c:choose>
-											<c:when test="${templatInfoButtonList.name eq '채널 추가'}">
-												<button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button>
-											</c:when>
-											<c:otherwise>
-												<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>	
-											</c:otherwise>
-										</c:choose>
-									</c:forEach>
-								</div>
-							</div>
-						</div>
+    <!-- 카카오 알림톡 미리보기 -->
+    <div class="tab_phone current" id="tab_phone_1">
+        <div class="phone_kakako">
+            <div class="phoneIn">
+                <p class="prev_p"><img src="/publish/images/content/kakao_prev_icon.png" alt=""><c:out value="${resultMsgDetail.yellowId}"/></p>
+                <!-- 텍스트 미리보기 -->
+                <div class="text_preview">
+                    <div class="allimtalk_title">
+                        <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:choose>
+                    </div>
+                    <div class="allimtalk_content">
+                        <c:choose>
+                            <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
+                                <p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
+                                <p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
+                            </c:when>
+                            <c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
+                                <div class="kakao_image">
+                                    <img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
+                                </div>
+                            </c:when>
+                        </c:choose>
+
+                        <p class="template_text">
+                            <c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
+                        </p>
+
+                        <c:choose>
+                            <c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
+                                <p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>
+                            </c:when>
+                            <c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
+                                <p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
+                            </c:when>
+                        </c:choose>
+
+                        <c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
+                            <c:choose>
+                                <c:when test="${templatInfoButtonList.name eq '채널 추가'}">
+                                    <button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button>
+                                </c:when>
+                                <c:otherwise>
+                                    <button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>
+                                </c:otherwise>
+                            </c:choose>
+                        </c:forEach>
+                    </div>
+                </div>
+            </div>
+            <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p>
+        </div>
+    </div>
+    <!--// 카카오 알림톡 미리보기 -->
+
+    <!-- 문자 미리보기 -->
+    <div class="tab_phone" id="tab_phone_2">
+        <div class="phoneIn">
+            <div>
+                <p class="prev_p"><img src="/publish/images/search.png"> 문자내용</p>
+                <div class="text_length2 clearfix">
+                	<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
+	                	<c:choose>
+	                		<c:when test="${resultMsgDetail.bizKakaoResendTypeCnt > 1}">
+								<span class="msg_com msg_short">단문</span>
+								<span class="msg_com msg_long">장문</span>
+	                		</c:when>
+	                		<c:when test="${resultMsgDetail.bizKakaoResendTypeCnt < 2
+	               							&& resultMsgDetail.bizKakaoResendType eq 'SMS'}">
+	                			<span class="msg_com msg_short">단문</span>
+	               			</c:when>
+	                		<c:otherwise>
+	                			<span class="msg_com msg_long">장문</span>
+	                		</c:otherwise>
+	                	</c:choose>
+                	</c:if>
+					<div>
+						<span>글자크기</span>
+						<button type="button" onclick="changeFontSize('plus');"><img src="/publish/images/content/font_plus.png"></button>
+						<button type="button" onclick="changeFontSize('minus');"><img src="/publish/images/content/font_minus.png"></button>
 					</div>
 				</div>
-				<div class="popCont replace_send_popup" id="popCont_2">
-					<div class="rev_pop_in">
-						<div class="rev_pop_middle clearfix">
-							<span><c:out value="${resultMsgDetail.sentDate }" /></span>
-							<span class="msg_com msg_allimtalk">대체문자</span>
-						</div>
-						<div class="rev_pop_txt">
-								${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}
-						</div>
-					</div>
-				</div>
+                <div class="text_preview">
+                    <div class="preview_auto">
+                        <p class="realtime">${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}</p>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <p class="addText">※ 단말기 설정에 따라 다르게 보일 수 있습니다</p>
+    </div>
+    <!--// 문자 미리보기 -->
+</div>
 			
(No newline at end of file)
 
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax_back_250320.jsp
@@ -0,0 +1,115 @@
+<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<% pageContext.setAttribute("newLineChar", "\n"); %>
+
+				<div class="list_tab_wrap2 kakao_rev_tab">
+					<!-- tab button -->
+					<ul class="list_tab"> 
+						<li class="tab active"><button type="button" onclick="popupTab(this,'1');" id="atBtn">카카오톡</button></li>
+						<c:if test="${resultMsgDetail.bizKakaoResendYn eq 'Y'}">
+							<li class="tab"><button type="button" onclick="popupTab(this,'2');">대체문자</button></li>
+						</c:if>
+					</ul><!--// tab button -->
+				</div>
+
+				<div class="popCont current kakao_wrap" id="popCont_1">
+					<div class="rev_pop_in">
+						<div class="rev_pop_middle clearfix">
+							<span><c:out value="${resultMsgDetail.reqDate }" /></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="">
+									<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">
+										<!-- 강조 텍스트 --> 
+										<!-- 강조 텍스트 --> 
+									<c:choose>
+										<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'TEXT'}">
+											<p class="emphasis_side_text"><c:out value="${kakaoTemplateInfo.templateSubtitle}"/></p>
+											<p class="emphasis_title_text"><c:out value="${kakaoTemplateInfo.templateTitle}"/></p>
+										</c:when>
+										<c:when test="${kakaoTemplateInfo.templateEmphasizeType eq 'IMAGE'}">
+											<div class="kakao_image">
+												<img src="<c:url value='${kakaoTemplateInfo.templateImageUrl}'/>" alt="">
+											</div>
+										</c:when>
+										<c:otherwise>
+										</c:otherwise>
+									</c:choose>
+									
+									<!-- 알림톡 내용 표시 -->
+									<p class="template_text">
+										<!-- 내용 -->
+										<!-- 내용 -->
+										<c:out value="${fn:replace(fn:replace(kakaoTemplateInfo.templateContent, newLineChar, '<br/>'), newLineChar2, '<br/>')}" escapeXml="false"/>
+									</p>
+									
+									<!-- 부가정보 내용  -->
+									<c:choose>
+										<c:when test="${kakaoTemplateInfo.templateMessageType eq 'EX'}">
+											<!-- 부가정보형인 경우 부가정보 내용 표시 -->
+											<p class="side_info_text"><c:out value="${kakaoTemplateInfo.templateExtra}"/></p>		
+										</c:when>
+										<c:when test="${kakaoTemplateInfo.templateMessageType eq 'AD'}">
+											<!-- 채널 추가형인경우 채널 추가 메세지 표시 -->
+											<p class="channel_info_text"><c:out value="${kakaoTemplateInfo.templateAd}"/></p>
+										</c:when>
+										<c:otherwise>
+										</c:otherwise>
+									</c:choose>
+									
+									<!-- 채널 추가형을 선택한 경우 자동으로 버튼이 하나 추가됨, 버튼을 추가한 경우 버튼 정보 표시 -->
+									<c:forEach var="templatInfoButtonList" items="${kakaoTemplateInfo.buttonList}" varStatus="status">
+										<c:choose>
+											<c:when test="${templatInfoButtonList.name eq '채널 추가'}">
+												<button type="button" class="btn_kakao_channel"><img src="/publish/images/content/icon_kakao_channel_plus.png" alt=""> 채널추가</button>
+											</c:when>
+											<c:otherwise>
+												<button type="button" class="btn_kakao_type"><c:out value="${templatInfoButtonList.name}"/></button>	
+											</c:otherwise>
+										</c:choose>
+									</c:forEach>
+								</div>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="popCont replace_send_popup" id="popCont_2">
+					<div class="rev_pop_in">
+						<div class="rev_pop_middle clearfix">
+							<span><c:out value="${resultMsgDetail.sentDate }" /></span>
+							<span class="msg_com msg_allimtalk">대체문자</span>
+						</div>
+						<div class="rev_pop_txt">
+								${fn:replace(resultMsgDetail.bizKakaoResendOrgnlTxt, newLineChar, "<br/>")}
+						</div>
+					</div>
+				</div>
+			(No newline at end of file)
 
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailView.jsp
@@ -0,0 +1,922 @@
+<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
+<%@ taglib prefix="fnc" uri="/WEB-INF/tld/functions.tld"%>
+<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>  
+<%@ page import="itn.com.cmm.LoginVO" %>
+<% pageContext.setAttribute("newLineChar", "\n"); %>
+
+
+
+<style>
+/* Tabulator Placeholder 기본 스타일 유지 */
+.tabulator-placeholder {
+	font-size: 22px !important; /* 기존 폰트 크기 유지 */
+	color: #e2d6d6 !important; /* 기존 색상 유지 */
+	font-weight: normal !important; /* 기본 폰트 두께 유지 */
+	display: flex;
+	justify-content: center;
+	align-items: center;
+	height: 100%;
+}
+
+</style>
+
+<script type="text/javascript">
+
+var currentSearchKeyword = ""; // 검색어 저장
+var currentTabFilter = "전체"; // 현재 선택된 탭 (기본값: 전체)
+
+var $tbDtailList = null; //에러 팝업 영역
+$(document).ready(function(){
+	
+	//발송 미리보기 영역
+	previewPhone();
+
+	// 탭별 하위 버튼 활성화
+	fn_rowBtnSH('전체');
+	// 주소록 그룹 불러오기
+	getAddrGroupList();
+	
+	//Tabulator AJAX Data Loading
+	$tbDtailList = new Tabulator("#detailPopup", {
+		height: "255px",
+		width: "20%",
+		// layout: "fitDataStretch", // 데이터가 너비에 맞게 늘어나도록 설정
+		layout: "fitColumns", // fitDataStretch 대신 fitColumns 사용
+		autoColumns: false,
+		headerHozAlign: "center",
+		validationMode: "highlight",
+		clipboard: false,
+		clipboardCopySelector: "table",
+		clipboardPasteAction: "insert", // insert, update, replace
+		placeholder:"데이터를 불러오고 있습니다...", 
+		columns: [
+			{
+				title: "휴대폰",
+				field: "phone",
+				hozAlign: "center",
+				headerHozAlign: "center",
+				widthGrow: 1
+			},
+			{
+				title: "상세결과",
+				field: "result",
+				hozAlign: "center",
+				headerHozAlign: "center",
+				widthGrow: 1
+			}
+		]
+	});
+	
+	fn_getDetailList();
+	
+
+	
+	$('#goPageBtn').click(function(){
+		$("#goList").submit();
+	});
+	
+	
+	
+	// 탭 버튼 클릭 이벤트
+	$(".type4 .tabType3 .tab button").on("click", function () {
+	
+		// 모든 탭의 active 클래스 제거
+		$(".type4 .tabType3 .tab").removeClass("active");
+	
+		// 클릭한 버튼의 부모 요소(li)에 active 클래스 추가
+		$(this).parent().addClass("active");
+	
+		// 기존 버튼들의 title 속성 초기화
+		$(".type4 .tabType3 .tab button").removeAttr("title");
+	
+		// 선택된 버튼의 title 속성을 "선택됨"으로 변경
+		$(this).attr("title", "선택됨");
+	
+		// 검색어 초기화
+		$("#searchInput").val("");
+	
+		// 필터 적용 (검색 필터 없이 탭 기준으로만 적용)
+		fn_applyFilters();
+	});
+	
+	// 검색 버튼 클릭 시 실행
+	$("#searchBtn").on("click", function () {
+	    fn_search();
+	});
+
+	// 실시간 검색 및 Enter 키 이벤트 처리
+	$("#searchInput").on("keyup", function (event) {
+		let keyword = $(this).val().trim();
+	
+		if (keyword.length > 2) {
+			console.log("keyword :: ", keyword);
+			fn_applyFilters({ field: "phone", type: "like", value: keyword });
+		} else {
+			fn_applyFilters(null);
+		}
+	
+		// Enter 키 입력 시 검색 실행
+		if (event.key === "Enter") {
+			fn_search();
+		}
+	});
+	
+	
+	
+	$('.listClose').on("click", function (){
+		tooltipInit();
+	});
+	
+	$('.grpClose').on("click", function (){
+		$('#grpNm').val('')
+	});
+	
+
+	$(document).on('change', '#addrGrpIdInfo', function() {
+		if ($("#addrGrpIdInfo option:selected").val() != "NEW") {
+			$("#grpNm").val(""); //	새그룹명 Clear;
+		}
+	});
+	
+});
+// window.onload = function(){
+// 	setTimeout(() => {
+// 		//발송 미리보기 영역
+// 		previewPhone();
+// 	}, 100000); // 필터 적용 후 반영되도록 약간의 딜레이 추가
+// }
+
+//검색 실행 함수
+function fn_search() {
+	let keyword = $("#searchInput").val().trim();
+	
+	if (keyword.length < 3) {
+		alert("검색어를 3자 이상 입력해주세요.");
+		return;
+	}
+	
+	fn_applyFilters({ field: "phone", type: "like", value: keyword });
+}
+
+/**
+ * @Discription : 튤팁 닫을 때 팝업 초기화
+ */
+function tooltipInit(){
+
+	$tbDtailList.clearFilter();
+	$("#searchInput").val('');
+	$("#initTab").click();
+}
+
+/** 
+ * @Discription : 상세결과 팝업 내용 가져오는 로직
+ */
+function fn_getDetailList(){
+	
+	var params = {
+			"msgGroupId" : $('#msgGroupId').val()
+		}
+		
+		$.ajax({
+			type: "POST",
+			url: "/web/mjon/msgsent/findByMsgDetailListAjax.do",
+			data: params,
+			dataType:'json',
+			async: true,
+			success: function (returnData) {
+				console.log('returnData : ', returnData);
+				if(returnData.status == 'OK'){
+					fn_setData(returnData.object);
+					
+				}
+			},
+			error: function (e) { alert("오류가 발생하였습니다."); console.log("ERROR : ", e); }
+		});
+}
+
+
+/** 
+ * @Description: 데이터 설정
+ */
+function fn_setData(data){
+// 	console.log('data : ', data);
+// 	$tbDtailList.clearData();
+
+	const resultData = [];  // 오류 데이터를 저장할 배열
+
+	data.forEach((row, index) => {
+
+		resultData.push({ 
+			// addrNm: row.addrNm, // 폰번호
+			phone: row.callTo, // 폰번호
+			result: row.statusTxt // 결과 메시지 추가
+		});
+	});
+
+
+	// 오류 및 중복 데이터를 한 번에 추가
+	$tbDtailList.setData(resultData);
+	
+};
+
+
+
+/** 
+ * @Discription : 필터 적용
+ */
+function fn_applyFilters(newFilter) {
+	console.log("newFilter :: ", newFilter);
+	// 현재 적용된 모든 필터 가져오기
+	let filters = [];
+	
+	// 현재 선택된 탭 값 가져오기
+	let selectedTab = $(".type4 .tabType3 .tab.active button").text().trim();
+	
+	// 탭 필터 적용 (탭이 "전체"가 아닐 경우)
+	if (selectedTab !== "전체") {
+	    filters.push({ field: "result", type: "like", value: selectedTab });
+	}
+	
+	// 검색어가 입력된 경우 검색 필터 추가
+	if (newFilter && newFilter.value) {
+	    filters.push(newFilter);
+	}
+	
+	// 필터 적용
+	$tbDtailList.setFilter(filters);
+	
+	// Placeholder 업데이트
+	fn_setPlaceholder("검색 결과가 없습니다.");
+	
+	// 툽팁 하위 버튼 삭제
+	fn_rowBtnSH(selectedTab);
+}
+
+
+
+
+/**
+ * @Description: 타블레이서 설명 수정 
+ */
+function fn_setPlaceholder(msg){
+
+	// 검색 후 데이터가 있는지 확인 후 placeholder 변경
+	setTimeout(() => {
+		console.log("$tbDtailList.getRows('active').length :: ", $tbDtailList.getRows('active').length);
+		let filteredRows = $tbDtailList.getRows('active').length; // 필터링된 행 개수 가져오기
+		if (filteredRows === 0) {
+			// 기존 데이터 유지하면서 빈 데이터 추가하여 placeholder 변경
+			$(".tabulator-placeholder").text(msg); // placeholder 메시지 변경
+		} 
+	}, 300); // 필터 적용 후 반영되도록 약간의 딜레이 추가
+}
+
+
+/**
+ * @Description: 필터링된 데이터만 다운로드
+ */
+ function fn_downloadFilteredExcel() {
+		// 현재 날짜 및 시간 가져오기 (YYYYMMDD_HHMMSS 형식)
+		let now = new Date();
+		let timestamp = now.getFullYear() +
+			("0" + (now.getMonth() + 1)).slice(-2) +
+			("0" + now.getDate()).slice(-2) + "_" +
+			("0" + now.getHours()).slice(-2) +
+			("0" + now.getMinutes()).slice(-2) +
+			("0" + now.getSeconds()).slice(-2);
+		
+		// 파일명 생성
+		let fileName = "filtered_data_" + timestamp + ".xlsx";
+
+		// 필터링된 데이터 가져오기
+		let filteredData = getFilteredDataByTab();
+
+		if (filteredData.length === 0) {
+			alert("다운로드할 데이터가 없습니다.");
+			return;
+		}
+
+// 		console.log("엑셀 다운로드 - 필터링된 데이터:", filteredData);
+
+		
+		
+		// 컬럼명(타이틀) 설정 (배열 형태로 변환)
+		let headers = [["휴대폰", "상세결과"]];
+
+		console.log(filteredData); // 데이터 확인
+		console.log(filteredData[0]); // 첫 번째 데이터 확인 (객체 키값 체크)
+
+		
+		// 필터링된 데이터 배열로 변환
+		let formattedData = filteredData.map(item => [item.phone, item.result]);
+
+
+
+		// 타이틀 행 추가
+		formattedData.unshift(headers[0]);
+
+		// 엑셀 생성
+		let workbook = XLSX.utils.book_new();
+		let worksheet = XLSX.utils.aoa_to_sheet(formattedData); // `aoa_to_sheet` 사용
+
+		XLSX.utils.book_append_sheet(workbook, worksheet, "Filtered Data");
+
+		// 엑셀 파일 다운로드
+		XLSX.writeFile(workbook, fileName);
+	}
+	
+/**
+ * @ 예약 취소
+ */
+function fnReservCancel(msgGroupId){
+	
+	var form = document.resCancelForm;
+	var loginVO = '${LoginVO}';
+	
+	form.msgGroupId.value = msgGroupId;
+	
+	if(loginVO == "" || loginVO == null){
+		
+		alert("로그인 후 이용이 가능합니다.");
+		return false;
+		
+	}
+	console.log('msgGroupId : ', msgGroupId);
+	var data = new FormData(form);
+	url = "/web/mjon/reservmsg/deleteReservMsgCancelDataAjax.do";
+	
+	if(confirm("정말 예약을 취소하시겠습니까?")){
+		
+		$.ajax({
+			type: "POST",
+			url: url,
+			data: data,
+			dataType:'json',
+			async: true,
+			processData: false,
+			contentType: false,
+			cache: false,
+			success: function (returnData, status) {
+				if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
+					if("fail"==returnData.result){
+						alert(returnData.message);
+						return false;
+					}
+				
+					alert("예약 발송이 정상적으로 취소 되었습니다.");
+					
+					location.reload(true);
+					
+				} else if(status== 'fail'){
+					alert(returnData.message);
+				}
+			},
+	        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');
+			}
+	    });
+		
+	}
+	
+}
+
+/**
+ * @알림톡 재전송
+ */
+function fnMjMsgReSendAll() {
+	
+	var form = document.reSendAllForm;
+
+	if (!confirm("알림톡 발송 화면으로 이동합니다.")) {
+		return;
+	}
+
+	// msgKind에 따른 action 설정
+	form.action = "/web/mjon/alimtalk/kakaoAlimtalkMsgDataView.do";
+	
+	form.submit();
+}
+
+
+function fn_rowBtnSH(tabText){
+	var $addReg = $('#addReg');
+	var $addRemove = $('#addRemove');
+	// addReg 주소록 등록
+	// addRemove 주소록 삭제
+	if(tabText == '전체'
+		|| tabText == '성공'){
+		$addReg.show();
+		$addRemove.hide();
+	}else if(tabText == '대기'){
+		$addReg.hide();
+		$addRemove.hide();
+	}else if(tabText == '실패' ){
+		$addReg.hide();
+		$addRemove.show();
+	}
+}
+
+function fnAddAddrNo(){
+	
+	
+	let url = "/web/mjon/addr/insertByAddrGrpDataAndAddrDataAjax.do";
+	
+
+	console.log($("#addrGrpIdInfo option:selected").val());
+	console.log($("#grpNm").val());
+	if ($("#addrGrpIdInfo option:selected").val() == "NEW" 
+				&& $("#grpNm").val() == "") {
+		alert("저장할 그룹을 선택하거나 새 그룹명을 입력해주세요.");
+		return false;		
+	}
+
+    // 필터링된 데이터 가져오기 (탭 필터 적용)
+    let filteredData = getFilteredDataByTab();
+
+	console.log('filteredData : ', filteredData)
+	
+    // phone 필드 데이터만 추출
+    let addrPhones = filteredData.map(row => row.phone);
+// 	console.log('addrPhones : ', addrPhones)
+
+	if(addrPhones.length < 1){
+		alert('해당 탭에 데이터가 없습니다.');
+		return false;
+	}
+	
+	// 주소록 그룹명 가져오기
+	let addrGrpNm = $('#grpNm').val();
+	let addrGrpId = $("#addrGrpIdInfo option:selected").val();
+	
+	// 데이터 객체 생성
+	let data = {
+		addrPhones : addrPhones
+		, addrGrpNm : addrGrpNm
+		, addrGrpId : addrGrpId
+	};
+
+	if(!confirm("연락처 정보를 주소록에 등록 하시겠습니까?")){
+		return false;
+	}
+	
+
+	$.ajax({
+		type: "POST",
+		url: url,
+		data: JSON.stringify(data),
+		dataType: "json",
+		contentType: "application/json",
+		async: false,
+		processData: false,
+		success: function(data) {
+			
+			if(data.status == 'BAD_REQUEST'){
+				alert(data.message);
+				return false;
+			}
+			
+
+			// 성공 메세지
+			alert(data.message);
+			// 그룹등록 팝업 닫기
+			$('.grpClose').click();
+			
+		},
+		error: function(error) {
+			alert("오류가 발생하였습니다.")
+			console.error("에러 발생:", error);
+		}
+	});
+}
+
+function fnDelAddrNo(){
+	
+	
+	let url = "/web/mjon/addr/deleteAddrNoDataAjax.do";
+	
+
+    // 필터링된 데이터 가져오기 (탭 필터 적용)
+    let filteredData = getFilteredDataByTab();
+
+    // phone 필드 데이터만 추출
+    let addrPhones = filteredData.map(row => row.phone);
+	console.log('addrPhones : ', addrPhones)
+
+	if(addrPhones.length < 1){
+		alert('주소록에 살제할 연락처가 없습니다.');
+		return false;
+	}
+	
+	// 데이터 객체 생성
+	let data = {
+		addrPhones: addrPhones
+	};
+	
+	let selectedTab = $(".type4 .tabType3 .tab.active button").text().trim();
+	if(!confirm("발송"+selectedTab+" 번호를 주소록에서 삭제하시겠습니까?\n(모든 주소록 그룹에서 삭제)")){
+		return false;
+	}
+	
+	$.ajax({
+		type: "POST",
+		url: url,
+		data: JSON.stringify(data),
+		dataType: "json",
+		contentType: "application/json",
+		async: false,
+		processData: false,
+		success: function(data) {
+			
+			if(data.status == 'BAD_REQUEST'){
+				alert(data.message);
+				return false;
+			}
+			
+
+			// 성공 메세지
+			alert(data.message);
+			
+		},
+		error: function(error) {
+			alert("오류가 발생하였습니다.")
+			console.error("에러 발생:", error);
+		}
+	});
+}
+/**
+ * @description 현재 선택된 탭(`result` 필터) 기준으로 데이터를 필터링
+ * @returns {Array} 필터링된 데이터 리스트
+ */
+// function getFilteredDataByTab() {
+// 	// 현재 적용된 모든 필터 가져오기
+// 	let filters = $tbDtailList.getFilters();
+	
+// 	// 현재 모든 데이터 가져오기 (전체 데이터에서 필터 적용)
+// 	let allData = $tbDtailList.getData();
+	
+// 	// 현재 적용된 필터에서 "result" 필터만 찾기
+// 	let tabFilter = filters.find(filter => filter.field === "result");
+	
+// 	// 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시)
+// 	return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true);
+// }
+ function getFilteredDataByTab() {
+	    // 현재 표시된(필터링된) 행들을 가져오기
+	    let filteredRows = $tbDtailList.getRows('active');
+	    
+	    // 행의 데이터를 배열로 반환
+	    return filteredRows.map(row => row.getData());
+	}
+
+ 
+
+//주소록 그룹정보 불러오기
+function getAddrGroupList() {
+  $.ajax({
+      type : "POST",
+      async : false,
+      url : "/web/mjon/addr/addrGroupListAjax.do",
+      data : {},
+      dataType:'json',
+      success : function(data) {
+			//alert(JSON.stringify(data.addrGroupList));
+
+			// Show Html
+			getAddrGroupListShow(data.addrGroupList);
+      },
+      error : function(xhr, status, error) {
+          alert(error);
+          return false;
+      }
+  });	    	
+}
+	
+//Show Html
+function getAddrGroupListShow(jsonList) {
+	var sHtml = "";
+	sHtml += "<option value='NEW'>그룹추가</option>";
+	sHtml += "<option value='0'>그룹미지정</option>";
+	sHtml += "<option value='bookmark'>자주보내는 번호</option>";
+	for (var j = 0; j < jsonList.length; j++) {
+		sHtml += "	<option value='" + $.trim(jsonList[j].addrGrpId) + "' />" + $.trim(jsonList[j].addrGrpNm) + "</option>";
+	}
+	    	
+	$("#addrGrpIdInfo").html(sHtml);
+}
+
+function previewPhone(){
+	$("#previewPhone").load("/web/kakao/sent/selectKakaoSentDetailViewPhoneAjax.do", $(document.resPopForm).serialize() ,function(response, status, xhr){
+		if (status === 'success') {
+			$(this).html(response);
+		}
+	});
+}
+
+</script>
+<div class="inner">
+
+	<input id="msgGroupId" type="hidden" value="${result.msgGroupId}"/>
+
+	<!-- send top -->
+	<div class="send_top">
+		<!-- 결제관리 - 요금 사용내역 -->
+		<div class="rev_admin_cont serv_content current">
+			<div class="heading">
+				<h2>발송결과 상세</h2>						
+				<button type="button" class="button junk" data-tooltip="popupJunk" style="right:0;">통신사 스팸규격안내</button>
+			</div>
+
+			<!-- 발송결과 상세 및 미리보기-->
+		 
+			<div class="send_general">
+				<!-- 발송결과 상세 정보 -->
+				<div class="resultcont_left">
+                          <!--발송정보-->
+                          <div class="res_info">
+                              <div class="res_info_in">
+                                  <div class="res_info_top clearfix">
+								<p>발송정보</p>
+                                      <p><button type="button" class="btnType btnType3" onclick="fnMjMsgReSendAll();">재전송</button></p>
+                                  </div>
+                                  <div class="res_info_btm">
+                                      <dl>
+                                          <dt>발송일시</dt>
+                                          <dd>${result.reqDate}</dd>
+                                      </dl>
+                                      <c:if test="${result.reserveYn eq 'Y' }">
+										<dl><!-- 예약 시 -->
+											<dt>등록일시</dt>
+											<dd>${result.regDate}</dd>
+										</dl>
+										</c:if>
+                                      <dl>
+                                          <dt>형태</dt>
+                                          <dd>
+                                          	<c:if test="${result.msgType eq '8'}">알림톡</c:if>
+											<c:if test="${result.msgType eq '9'}">친구톡</c:if>
+										  </dd>
+                                      </dl>
+                                      <dl>
+                                          <dt>발송건수</dt>
+                                          <dd><span class="c_222"><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /></span>건</dd>
+                                      </dl>
+									  <dl>
+		                                  <dt>채널정보</dt>
+		                                  <dd><c:out value="${result.yellowId}"/></dd>
+		                              </dl>
+									  <dl>
+										  <dt>진행상황
+											<!--  예약인 경우 --> 
+											<c:if test="${result.reserveYn eq 'Y'}">
+													<div class="icon_wrap">
+														<div class="re">예약</div>
+													<!-- 예약일때만 분할이 있음 -->
+													<c:if test="${result.divideYn eq 'Y'}">
+														<div class="di_info">
+															<button class="di">분할</button>
+															<div class="di_hover_layer">
+																<strong>${result.divideText }</strong>
+															</div>
+														</div>
+													</c:if>
+													</div>
+											</c:if>
+											<!--//  예약인 경우 --> 
+											</dt>
+											<dd>
+											
+											<c:choose>
+												<c:when test="${result.statusCd eq '04' }">
+													예약취소(<c:out value="${result.canceldate }" />)
+												</c:when>
+												<c:when test="${result.statusCd ne '03' }">
+													<ec:code codeId="ITN057" code="${result.statusCd }" />
+												</c:when>
+												<c:otherwise>
+													<p><button class="btnType btnType20" onClick="javascript:fnReservCancel('${result.msgGroupId}'); return false;">예약취소</button></p>
+												</c:otherwise>
+											</c:choose>
+											</dd>
+										</dl>
+                                  </div>
+							<div class="res_info_btm">
+                                      <dl>
+                                          <dt class="btm_charge">발송요금(합계)</dt>
+                                          <dd><span class="stcharge">
+                                          <c:if test="${result.totPrice ne '-'}">
+											  <fmt:formatNumber value="${result.totPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
+									      </c:if>
+										  <c:if test="${result.totPrice eq '-'}">
+											  0
+										  </c:if>
+										  </span>원</dd>											
+									<!--<dd><span class="stcharge">-</span>원</dd>--><!-- 예역취소 후 금액은 하이픈 처리--> 
+                                      </dl>
+                                      <div class="charge_line">
+									<dl>
+										<dt class="charge_title">· 카카오톡</dt>
+										<dd><span class="c_222">
+											<fmt:formatNumber value="${result.successPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
+										</span>원</dd>
+									</dl>
+									<dl>
+										<dt class="charge_title">· 대체문자</dt>
+										<dd><span class="c_222">
+											<fmt:formatNumber value="${result.kakaoResendSuccPrice}" type="number" groupingUsed="true" minFractionDigits="0" maxFractionDigits="1" />
+										</span>원</dd>
+									</dl>
+								</div>
+                                  </div>
+                              </div>                                
+                          </div>
+                           <!--// 발송정보-->
+                          <!--상세결과-->
+                          <div class="res_info">
+                              <div class="res_info_in">
+                                  <div class="res_info_top clearfix" style="padding:0 0 10px 0;">
+                                      <p>상세결과</p>
+                                      <p></p>
+                                  </div>
+							<div class="res_num">
+								<div class="res_info_btm1">
+									<dl>
+										<dt>전체건수</dt>
+										<dd><a href="#" data-tooltip="rev_popup04"><span class="c_222_g"><fmt:formatNumber value="${result.msgGroupCnt}" type="number" groupingUsed="true" /></span>건</a></dd>
+									</dl>
+								</div>
+								<div class="res_info_btm1">
+									<dl>
+										<dt>성공건수</dt>
+										<dd><span class="c_002c9a_g"><fmt:formatNumber value="${result.successCount}" type="number" groupingUsed="true" /></span>건(${result.successPct})</dd>
+									</dl>
+								</div>
+							</div>
+							<div class="res_num">	
+								<div class="res_info_btm1">
+									<dl>
+										<dt>대기건수</dt>
+										<dd><span class="c_666_g"><fmt:formatNumber value="${result.waitCount}" type="number" groupingUsed="true" /></span>건(${result.waitingPct})</dd>
+									</dl>
+								</div>
+								<div class="res_info_btm1">
+									<dl>
+										<dt>실패건수</dt>
+										<dd><span class="c_e40000_g"><fmt:formatNumber value="${result.failCount}" type="number" groupingUsed="true" /></span>건(${result.failedPct})</dd>
+									</dl>
+								</div>
+							</div>
+							<p class="table_bottom_txt">* 전체건수를 클릭하면 받는 사람 상세정보를 확인하실 수 있습니다.</p>
+                              </div>
+                          </div>
+                          <!--// 상세결과-->
+				</div>
+                      <!--// 발송결과 상세 정보 -->
+
+				<!-- 발송결과 미리보기 -->
+				<div class="resultcont_right" id="previewPhone">
+					
+				</div>
+				<!--// 발송결과 미리보기 -->
+			</div>			
+	
+			<!--// 발송결과 상세 및 미리보기-->
+
+			<!-- 목록-->
+			<div class="btn_list_type1">
+				<button class="btnType btnType17">목록</button>
+			</div>
+			<!--// 목록-->
+
+		</div>
+	</div>
+	<!--// send top -->
+</div>
+
+
+
+	<!-- 발송대상리스트 팝업 -->
+	<div class="tooltip-wrap">
+		<div class="popup-com ad_layer rev_popup04" tabindex="0" data-tooltip-con="rev_popup04" data-focus="rev_popup04" data-focus-prev="rev_popup04-close" style="width:530px;">
+			<div class="popup_heading">
+				<p>발송대상 리스트</p>
+				<button type="button" class="tooltip-close listClose" data-focus="rev_popup04-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in">
+				<div class="popup_search_type2">							
+					<label for="" class="label">검색종류 선택</label>
+					<div class="title">수신번호</div>
+					<label for="" class="label">검색어입력</label>
+					<input type="text" class="send_text" id="searchInput" placeholder="3자 이상 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='3자 이상 입력하세요.'">
+					<button type="button" id="searchBtn" class="btnType btnType2" style="width:63px; margin:0;">검색</button>
+				</div>
+
+				<div class="list_tab_wrap2 type4">
+					<ul class="tabType3" id="tabType" name="tabType">
+						<li class="tab active"><button type="button" id="initTab" title="선택됨">전체</button></li>
+						<li class="tab"><button type="button">대기</button></li>
+						<li class="tab"><button type="button">성공</button></li>
+						<li class="tab"><button type="button">실패</button></li>
+					</ul>
+				</div>	
+				
+				<div class="tb_wrap" id="detailPopup" style="min-height:200px;">
+						<!-- 타블레이터 영역 -->
+				</div>	
+				
+				<div class="table_btn clearfix">
+					<div class="table_btn_left">
+						<button type="button" onclick="fn_downloadFilteredExcel()" class="excel_btn btnType"><i class="downroad"></i>엑셀 다운로드</button>
+						<button type="button" id="addReg" data-tooltip="rev_popup02" class="btnType btnType14"><i class="add_img"></i>주소록 등록</button>
+						<button type="button" onclick="fnDelAddrNo()" id="addRemove" class="btnType btnType15"><i class="remove_img"></i>주소록에서 번호 삭제</button>
+					</div>
+				</div>
+			</div>
+			<div class="popup_btn_wrap2" style="margin: -40px auto 30px auto;">
+				<button type="button" class="tooltip-close listClose" data-focus="adr_popup01-close"  data-focus-next="popup02">닫기</button>                      
+			</div>
+
+		</div>
+	</div>
+	<!-- //발송대상 리스트 안내 팝업 -->
+	
+	<!-- 주소록에 등록 팝업 -->
+	<div class="tooltip-wrap">
+		<div class="popup-com adr_layer rev_popup02" tabindex="0" data-tooltip-con="rev_popup02" data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 510px;">
+			<div class="popup_heading">
+				<p>주소록에 등록</p>
+				<button type="button" class="tooltip-close grpClose" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in">				
+				<table class="layer_tType1 style1">
+					<caption>주소록 그룹선택 표</caption>
+					<colgroup>
+						<col style="width: 80px">
+						<col style="width: auto">
+					</colgroup>
+					<tbody>
+						<tr>
+							<th>그룹 선택</th>
+							<td>
+								<label for="" class="label">그룹 선택</label>
+								<select id="addrGrpIdInfo" name="addrGrpIdInfo">
+								</select>
+								<label for="" class="label">그룹명 입력</label>
+								<input type="text" id="grpNm" placeholder="새 그룹명을 입력해주세요." maxlength="24" onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'" class="inputLight">
+							</td>
+						</tr>
+					</tbody>
+				</table>
+				<div class="popup_btn_wrap2">
+					<button type="button" onclick="fnAddAddrNo()">등록</button>
+					<button type="button" class="tooltip-close grpClose" data-focus="rev_popup02-close" data-focus-next="rev_popup02">닫기</button>
+				</div>				
+			</div>
+		</div>
+	</div>
+	<!--// 주소록에 등록 팝업 -->
+	
+	<!-- 이전 리스트 상태(검색조건, 페이징) 그대로 가기 위한 form -->
+	<form id="goList" name="goList" method="post" action="/web/mjon/msgsent/selectMsgSentView.do">
+		<input type="hidden" name="pageIndex" value="<c:out value="${searchVO.pageIndex}" />" />
+		<input type="hidden" name="searchSortCnd" value="<c:out value='${searchVO.searchSortCnd }' />" />
+		<input type="hidden" name="searchSortOrd" value="<c:out value='${searchVO.searchSortOrd }' />" />
+		<input type="hidden" name="searchCondition01" value="<c:out value='${searchVO.searchCondition01 }' />" />
+		<input type="hidden" name="searchCondition02" value="<c:out value='${searchVO.searchCondition02 }' />" />
+		<input type="hidden" name="searchStartDate" value="<c:out value='${searchVO.searchStartDate }' />" />
+		<input type="hidden" name="searchEndDate" value="<c:out value='${searchVO.searchEndDate }' />" />
+		<input type="hidden" name="searchCondition" value="<c:out value='${searchVO.searchCondition }' />" />
+		<input type="hidden" name="searchKeyword" value="<c:out value='${searchVO.searchKeyword }' />" />
+		<input type="hidden" name="pageUnit" value="<c:out value='${searchVO.pageUnit }' />" />
+	</form>
+	
+	<!-- 예약 취소 -->
+	<form id="resCancelForm" name="resCancelForm" method="post">
+		<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
+	</form>	
+
+	<!-- 재발송 form -->
+	<form name="reSendAllForm" method="post">
+		<input type="hidden" name="msgResendAllFlag" value="Y"/>
+		<input type="hidden" name="msgResendAllGroupId" value="${result.msgGroupId}"/>
+		<input type="hidden" name="msgResendAllYellowId" value="${result.yellowId}"/>
+		<input type="hidden" name="msgResendAllTmpKey" value="${result.msgNoticetalkTmpKey}"/>
+	</form>
+	
+	<form id="resPopForm" name="resPopForm" method="post">
+		<input type="hidden" id="msgGroupId" name="msgGroupId" value="${result.msgGroupId}"/>
+<!-- 		<input type="hidden" id="msgId" name="msgId" value=""/> -->
+	</form>
+
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
@@ -45,20 +45,6 @@
 	threefulstday = prevMonth(3);
 	threefuledday = today();
 	
-	/* 목록 정렬 항목 아이콘 표시 */ 
-	/* var searchSortCnd = $("[name='searchSortCnd']").val();
-	var searchSortOrd = $("[name='searchSortOrd']").val();
-	
-	if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd  != undefined && searchSortOrd  != undefined) {
-		var $sort_div = $("#sort_"+ searchSortCnd);
-		var sortClass = 'sortBtn' ;
-		
-		if (searchSortOrd == "desc") sortClass = "sortBtnDesc";
-		
-		$sort_div.replaceClass('sortBtn' , sortClass) ;
-		$sort_div.attr("sortOrd", searchSortOrd);
-	} */
-
 	// 정렬 항목 이벤트
 	$(document).on('click', '.sort', function (){
 		listSortOrd(this);
@@ -100,6 +86,9 @@
 		linkPage(1);
 		
 	});
+	
+	//발송건수 셋
+	cntSet();
 	
 });
 
@@ -147,56 +136,16 @@
 	form.pageIndex.value = pageNo;
 	
 	var sendData =  $(document.searchForm).serializeArray();
-	$(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
+// 	$(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
+	$(".msgSentAllLoad tbody:first").html('<tr><td colspan="12">LOADING...</td></tr>');
 	$(".msgSentAllLoad").load("/web/kakao/sent/selectKakaoSentListViewAjax.do", sendData ,function(response, status, xhr){
+		if (status === 'success') {
+	        $(this).html(response);
+	    }
 	});
 	
 }
 
-//선택 삭제 실행
-
-/* 
-function fnDelete(){
-	
-	var msgId = [];
-	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
-		alert("한 개 이상의 전송 내역을 선택하세요");
-		return;
-	}
-	
-	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
-		var disabledChk = $(this).prop('disabled');
-		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
-			msgId[index] = $(this).val();
-		}
-	});
-	
-	if(msgId.length > 0){
-		
-		//22.04.25 구글 독스 alert 기준으로 이지우가 수정
-		// if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다."))
-		if(confirm("선택한 목록을 삭제하시겠습니까?")){
-			
-			document.searchForm.msgGroupIdList.value = msgId;
-			var sendData =  $(document.searchForm).serializeArray();
-			
-			$(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
-			});
-			
-// 			var form = document.searchForm;
-// 			form.action="/web/mjon/msgsent/selectMsgSentView.do";
-// 			form.submit();
-		}
-		
-	}else{
-		
-		alert("삭제할 문자를 선택해 주세요.");
-		return false;
-		
-	}
-	
-}
- */
 //상세보기 버튼 실행
 function fnRevDetailPop(msgGroupId, msgId){
 	document.resPopForm.msgGroupId.value = msgGroupId;
@@ -204,20 +153,11 @@
 	var sendData =  $(document.resPopForm).serializeArray();
 	
 	var form = document.searchForm;
-	if (form.listType.value == "privateList") {
-		// 개인별
-		$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailData2Ajax.do", sendData ,function(response, status, xhr){
-			$('#tooltopClick').trigger('click');
-		});
-	}
-	else {
-		// 전송건별
-		$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
-			// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
-			popupTab($('#atBtn'),'1');
-			$('#tooltopClick').trigger('click');
-		});		
-	}
+	$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
+		// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
+		popupTab($('#atBtn'),'1');
+		$('#tooltopClick').trigger('click');
+	});		
 	
 }
 
@@ -231,12 +171,6 @@
 	$tab.siblings("li.btn_tab").removeClass("active");
 	$tab.siblings("li.tab").find("button").removeAttr("title");
 	
-	if(pageType == 'fail'){
-		form.listType.value = "privateList";
-		$(".tab_depth1").hide();
-	} else {
-		$(".tab_depth1").show();
-	}
 	form.stateType.value = pageType;
 	
 	linkPage(1);
@@ -311,182 +245,6 @@
 	
 });
 
-$(document).on('click', '.msgPrivateList', function(){
-	
-	var form = document.searchForm;
-	form.listType.value = "privateList";
-	linkPage(1);
-	
-});
-
-
-function fnDeleteAddrNo(listType){
-	
-	var msgId = [];
-	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
-		alert("한 개 이상의 전송 내역을 선택하세요");
-		return;
-	}
-	
-	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
-		
-		var disabledChk = $(this).prop('disabled');
-		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
-			
-			msgId[index] = $(this).val();
-			
-		}
-		
-	});
-	
-	if(msgId.length > 0){
-		
-		//22.04.25 구글 독스 alert 기준으로 이지우가 수정
-		/* if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ */
-		if(confirm("선택하신 번호를 주소록에서 삭제하시겠습니까?")){
-			
-			var form = document.searchForm;
-			
-			form.msgGroupIdList.value = msgId;
-			form.listType.value = listType;
-			
-			var data = new FormData(form);
-			url = "/web/mjon/msgsent/deleteAddrNoDataAjax.do";
-			
-			$.ajax({
-				type: "POST",
-				url: url,
-				data: data,
-				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);
-							return false;
-							
-						}else if("loginFail"==returnData.result){
-							
-							alert(returnData.message);
-							return false;
-							
-						}else if(returnData.resultCnt == '0'){
-							
-							alert("주소록에 삭제할 연락처가 없습니다.");
-							return false;
-							
-						}else{
-							
-							alert(returnData.message);
-							return false;
-							
-						}
-					
-					} else if(status== 'fail'){
-						alert(returnData.message);
-					}
-				},
-				error: function (e) { alert("주소록 삭제에 실패하였습니다."); console.log("ERROR : ", e); }
-			});
-			
-		}
-		
-	}else{
-		
-		alert("삭제할 문자를 선택해 주세요.");
-		return false;
-		
-	}
-	
-}
-
-function fnAddBlockNo(listType){
-	
-	var msgId = [];
-	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
-		alert("선택된 항목이 없습니다.");
-		return;
-	}
-	
-	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
-		
-		var disabledChk = $(this).prop('disabled');
-		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
-			
-			msgId[index] = $(this).val();
-			
-		}
-		
-	});
-	
-	if(msgId.length > 0){
-		
-		//if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){
-			
-			var form = document.searchForm;
-			
-			form.msgGroupIdList.value = msgId;
-			form.listType.value = listType;
-			
-			var data = new FormData(form);
-			url = "/web/mjon/msgsent/insertAddBlockNoDataAjax.do";
-			
-			$.ajax({
-				type: "POST",
-				url: url,
-				data: data,
-				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);
-							return false;
-							
-						}else if("loginFail"==returnData.result){
-							
-							alert(returnData.message);
-							return false;
-							
-						}else if(returnData.resultCnt == '0'){
-							
-							alert("주소록에 삭제할 연락처가 없습니다.");
-							return false;
-							
-						}else{
-							
-							alert(returnData.message);
-							return false;
-							
-						}
-					
-					} else if(status== 'fail'){
-						alert(returnData.message);
-					}
-				},
-				error: function (e) { alert("수신거부번호 등록에 실패하였습니다."); console.log("ERROR : ", e); }
-			});
-			
-		//}
-		
-	}else{
-		
-		alert("수신거부번호를 등록할 문자를 선택해 주세요.");
-		return false;
-		
-	}
-	
-	
-}
-
 function fnReSendMsg(){
 	
 	var msgSeq = [];
@@ -514,27 +272,6 @@
 	
 }
 
-function fnMsgSFDetailList(msgGroupId, resultType){
-	
-	var form = document.resPopForm;
-	form.msgGroupId.value = msgGroupId;
-	form.resultType.value = resultType;
-	
-	//만들려는 팝업의 크기
-	var popup_wid = '1280';
-	var popup_ht = '700';
-
-	var popup_left = (window.screen.width / 2) - (popup_wid / 2);
-	var popup_top =(window.screen.height / 2) - (popup_ht / 2);
-
-	$("#resPopForm").attr("target","msgSFDetailPop");
-	
-	window.open('', 'msgSFDetailPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
-	$("#resPopForm").attr({"action":"/web/kakao/sent/selectKakaoSentSFDetailListAjax.do", "method":"post"}).submit();
-	
-}
-
-
 /* 사용내역서 클릭 시 내역서 새창 팝업 오픈  */
 function fnShowPrintPopup(tabType, type) { 
 	//만들려는 팝업의 크기
@@ -552,129 +289,6 @@
 	
 }
 
-function addrGroupDuplCnt() {
-	document.searchForm.addrGrpNm.value = $('#grpNm').val();
-	
-	var data = $('#searchForm').serialize();
-	//var data = new FormData(form);
-	
-	var flag = true;
-	var url = "/web/addr/selectDuplAddrGroupNameAjax.do";
-	
-	$.ajax({
-		async: false,
-		type: "post",
-		url: url,
-		data: data,
-		dataType:"JSON",
-//          contentType: false,
-//      	 processData: false,
-		cache: false,
-		success: function (returnData, status) {
-			if("dupl"==returnData.result1) {
-				flag = false;
-			}
-		},
-		error: function (e) {
-			alert("error");
-			console.log("ERROR : ", e); 
-		}
-	});
-	
-	return flag;
-}
-
-//주소록 그룹 등록 기능
-function fnAddAddrNo(){
-	
-	var addrGrpNm = $('#grpNm').val(); //입력 그룹 이름 불러오기
-	
-	var msgId = [];
-	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
-		alert("한 개 이상의 전송 내역을 선택하세요");
-		return;
-	}
-	
-	
-	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
-		
-		var disabledChk = $(this).prop('disabled');
-		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
-			
-			msgId[index] = $(this).val();
-			
-		}
-		
-	});
-	
-	if(msgId.length > 0 && addrGrpNm != ''){
-		
-
-		//주소록 그룹명 중복체크
-		if(!addrGroupDuplCnt()) {
-			alert("이미 등록되어있는 주소록입니다.");
-			return false;
-		}
-		
-		
-			var form = document.searchForm;
-			
-			form.msgGroupIdList.value = msgId;
-			form.addrGrpNm.value = addrGrpNm;
-			
-			var data = new FormData(form);
-			url = "/web/mjon/msgsent/insertAddAddrGrpDataAjax.do";
-			
-			$.ajax({
-				type: "POST",
-				url: url,
-				data: data,
-				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);
-							return false;
-							
-						}else if("loginFail"==returnData.result){
-							
-							alert(returnData.message);
-							return false;
-							
-						}else if(returnData.resultCnt == '0'){
-							
-							alert("주소록에 등록할 연락처가 없습니다.");
-							return false;
-							
-						}else{
-							
-							alert(returnData.message);
-							$('#grpNm').val(""); //입력한 그룹명 초기화
-							$(".tooltip-close").trigger("click");
-							return false;
-							
-						}
-					
-					} else if(status== 'fail'){
-						alert(returnData.message);
-					}
-				},
-				error: function (e) { alert("주소록 등록에 실패하였습니다."); console.log("ERROR : ", e); }
-			});
-	}else{
-		
-		alert("등록할 문자를 선택해 주세요.");
-		return false;
-		
-	}
-	
-}
-
 /* 윈도우팝업 열기 */
 function infoPop(pageUrl){
 	document.popForm.pageType.value = pageUrl;
@@ -685,33 +299,90 @@
 	document.popForm.submit();
 }
 
+function cntSet(){
+
+	$('#ntceBgnde').val($('#startDate').val());
+	$('#ntceEndde').val($('#endDate').val());
+	
+	$.ajax({
+        url: '/web/kakao/sent/selectKakaoSentViewTotalSumAjax.do',
+        type: 'POST',
+//         contentType: 'application/json',
+        contentType: false,
+        processData: false,
+        data: new FormData(document.searchForm),
+        success: function(response) {
+			
+			cntView('allCnt', response.allCnt);
+			cntView('atCnt', response.atCnt);
+			//cntView('ftCnt', response.ftCnt);
+        },
+        error: function(error) {
+        	alert("error");
+        },
+        beforeSend : function(xmlHttpRequest) {
+        	//로딩창 show
+        	$('#lodingBefore').show();
+			$('#lodingAfter').hide();
+		},
+		complete : function(xhr, textStatus) {
+        	//로딩창 hide
+			$('#lodingBefore').hide();
+			$('#lodingAfter').show();
+		}
+    });
+}
+
+function cntView(type, obj){
+	$('#'+type+' span[name="allCnt"]').text(obj.allCount.toLocaleString());
+    $('#'+type+' span[name="waitCnt"]').text(obj.waitCount.toLocaleString());
+    $('#'+type+' span[name="succCnt"]').text(obj.successCount.toLocaleString());
+    $('#'+type+' span[name="failCnt"]').text(obj.failCount.toLocaleString());
+}
+
+//선택 삭제 실행
+function fnDelete(){
+	
+	var msgId = [];
+	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
+		alert("한 개 이상의 전송 내역을 선택하세요");
+		return;
+	}
+	
+	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
+		var disabledChk = $(this).prop('disabled');
+		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+			msgId[index] = $(this).val();
+		}
+	});
+	
+	console.log('msgId : ', msgId);
+	
+	if(msgId.length < 1){
+		alert("삭제할 문자를 선택해 주세요.");
+		return false;
+	}
+		
+		//22.04.25 구글 독스 alert 기준으로 이지우가 수정
+		/* if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다.")) */
+		if(confirm("선택한 목록을 삭제하시겠습니까?\n삭제한 목록은 복구가 불가합니다.")){
+			
+			document.searchForm.msgGroupIdList.value = msgId;
+			var sendData =  $(document.searchForm).serializeArray();
+			
+			$(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
+			});
+
+			alert("삭제되었습니다.");
+			var form = document.searchForm;
+			form.action="/web/kakao/sent/selectKakaoSentView.do";
+			form.submit();
+		}
+	
+}
+
 </script>
-	<!-- 문자내용 팝업 data-tooltip: rev_popup01 -->
-	<div class="tooltip-wrap">
-		<div class="popup-com adr_layer kakao_rev_popup rev_popup01" tabindex="0" data-tooltip-con="rev_popup01"
-			data-focus="rev_popup01" data-focus-prev="rev_popup01-close" style="width: 440px;">
-			<div class="popup_heading">
-				<p>문자내용</p>
-				<button type="button" class="tooltip-close" data-focus="rev_popup01-close"><img
-						src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
-			</div>
-			<div class="layer_in">
-				
-				<!-- 팝업 상세내용 노출  -->
-				<div id="msgSentDetailPopLoad" >
-				</div>
-				<div class="popup_btn_wrap2" style="justify-content: center;">
-					<button type="button" class="tooltip-close" data-focus="rev_popup01-close"
-						data-focus-next="rev_popup01">닫기</button>
-				</div>
-			</div>
-		</div>
-	</div>
-	<!-- //문자내용 팝업 data-tooltip: rev_popup01 -->
-	
-	
-	
-	
+
 	
 	<!-- 그룹등록 팝업 data-tooltip:rev_popup02 -->
 	<div class="tooltip-wrap">
@@ -763,154 +434,19 @@
 					<input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 -->
 					<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 -->
 					<input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 -->
-				
-				<!-- 각 통계별 총 건수 -->
-				<c:set var="totAllCnt" value="0"/><!-- 전체 건수 -->
-				<c:set var="totAtCnt" value="0"/><!-- 알림톡 건수 -->
-				<c:set var="totFtCnt" value="0"/><!-- 친구톡 건수 -->
-				
-				<!-- 각 통계별 성공, 실패 건수 처리 -->
-				<c:set var="waitAllCnt" value="0"/><!-- 전체 대기 건수 -->
-				<c:set var="succAllCnt" value="0"/><!-- 전체 성공 건수 -->
-				<c:set var="failAllCnt" value="0"/><!-- 전체 실패 건수 -->
-				<c:set var="waitAtCnt" value="0"/><!-- 알림톡 대기 건수 -->
-				<c:set var="succAtCnt" value="0"/><!-- 알림톡 성공 건수 -->
-				<c:set var="failAtCnt" value="0"/><!-- 알림톡 실패 건수 -->
-				<c:set var="waitFtCnt" value="0"/><!-- 친구톡 대기 건수 -->
-				<c:set var="succFtCnt" value="0"/><!-- 친구톡 성공 건수 -->
-				<c:set var="failFtCnt" value="0"/><!-- 친구톡 실패 건수 -->
-				<!-- 발송대기 건수가 있으면 이것도 발송 실패건수로 일단 집계한다. -->
-				<c:forEach var="totalMsgCnt" items="${totalMsgCnt}" varStatus="status">
+					<input type="hidden" id="ntceBgnde" name="ntceBgnde" value=""/>
+					<input type="hidden" id="ntceEndde" name="ntceEndde" value=""/>
+					<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
 					
-					<!-- 전체 갯수 구하기 -->
-					<c:set var="totAllCnt" value="${totAllCnt + totalMsgCnt.msgResultCnt}"/>
-						
-					<!-- 전체 대기 갯수 -->
-					<c:if test="${totalMsgCnt.msgResultSts == 'W'}">
-						<c:set var="waitAllCnt" value="${waitAllCnt + totalMsgCnt.msgResultCnt}"/>
-					</c:if>
-					
-					<!-- 전체 성공 갯수 -->
-					<c:if test="${totalMsgCnt.msgResultSts == 'S'}">
-						<c:set var="succAllCnt" value="${succAllCnt + totalMsgCnt.msgResultCnt}"/>
-					</c:if>
-					
-					<!-- 전체 실패 갯수 -->
-					<c:if test="${totalMsgCnt.msgResultSts == 'F'}">
-						<c:set var="failAllCnt" value="${failAllCnt + totalMsgCnt.msgResultCnt}"/>
-					</c:if>
-					
-				</c:forEach>
-				
-				<!-- 알림톡 처리 -->
-				<c:forEach var="atCnt" items="${atCnt}" varStatus="status">
-					
-					<!-- 단문 전체 갯수 구하기 -->
-					<c:set var="totAtCnt" value="${totAtCnt + atCnt.msgResultCnt}"/>
-					
-					<!-- 단문 대기 갯수 구하기 -->
-					<c:if test="${atCnt.msgResultSts == 'W'}">
-						<c:set var="waitAtCnt" value="${waitAtCnt + atCnt.msgResultCnt}"/>
-					</c:if>
-					
-					<!-- 단문 성공 갯수 구하기 -->
-					<c:if test="${atCnt.msgResultSts == 'S'}">
-						<c:set var="succAtCnt" value="${succAtCnt + atCnt.msgResultCnt}"/>
-					</c:if>
-					
-					<!-- 단문 실패 갯수 구하기 -->
-					<c:if test="${atCnt.msgResultSts == 'F'}">
-						<c:set var="failAtCnt" value="${failAtCnt + atCnt.msgResultCnt}"/>
-					</c:if>
-					
-				</c:forEach>
-				
-				<!-- 친구톡 처리 -->
-				<c:forEach var="ftCnt" items="${ftCnt}" varStatus="status">
-					
-					<!-- 장문 전체 갯수 구하기 -->
-					<c:set var="totFtCnt" value="${totFtCnt + ftCnt.msgResultCnt}"/>
-					
-					<!-- 장문 대기 갯수 구하기 -->
-					<c:if test="${ftCnt.msgResultSts == 'W'}">
-						<c:set var="waitFtCnt" value="${waitFtCnt + ftCnt.msgResultCnt}"/>
-					</c:if>
-					
-					<!-- 장문 성공 갯수 구하기 -->
-					<c:if test="${ftCnt.msgResultSts == 'S'}">
-						<c:set var="succFtCnt" value="${succFtCnt + ftCnt.msgResultCnt}"/>
-					</c:if>
-					
-					<!-- 장문 실패 갯수 구하기 -->
-					<c:if test="${ftCnt.msgResultSts == 'F'}">
-						<c:set var="failFtCnt" value="${failFtCnt + ftCnt.msgResultCnt}"/>	
-					</c:if>
-					
-				</c:forEach>
 			<div class="rev_content kakao_rev_content" id="tab5_2">
-				<div class="rev_admin">
-					<div class="rev_admin_in">
-						<div class="rev_admin_top clearfix">
-							<p>전체</p>
-							<p><span><fmt:formatNumber value="${totAllCnt}" pattern="#,###"/></span> 건</p>
-						</div>
-						<div class="rev_admin_btm">
-							<dl>
-								<dt>대기</dt>
-								<dd><span class="c_002c9a"><fmt:formatNumber value="${waitAllCnt}" pattern="#,###"/></span>건</dd>
-							</dl>
-							<dl>
-								<dt>성공</dt>
-								<dd><span class="c_002c9a"><fmt:formatNumber value="${succAllCnt}" pattern="#,###"/></span>건</dd>
-							</dl>
-							<dl>
-								<dt>실패</dt>
-								<dd><span class="c_e40000"><fmt:formatNumber value="${failAllCnt}" pattern="#,###"/></span>건</dd>
-							</dl>
-						</div>
-					</div>
-					<div class="rev_admin_in">
-						<div class="rev_admin_top clearfix">
-							<p>알림톡</p>
-							<p><span><fmt:formatNumber value="${totAtCnt}" pattern="#,###"/></span> 건</p>
-						</div>
-						<div class="rev_admin_btm">
-							<dl>
-								<dt>대기</dt>
-								<dd><span class="c_002c9a"><fmt:formatNumber value="${waitAtCnt}" pattern="#,###"/></span>건</dd>
-							</dl>
-							<dl>
-								<dt>성공</dt>
-								<dd><span class="c_002c9a"><fmt:formatNumber value="${succAtCnt}" pattern="#,###"/></span>건</dd>
-							</dl>
-							<dl>
-								<dt>실패</dt>
-								<dd><span class="c_e40000"><fmt:formatNumber value="${failAtCnt}" pattern="#,###"/></span>건</dd>
-							</dl>
-						</div>
-					</div>
-					<%-- <div class="rev_admin_in">
-						<div class="rev_admin_top clearfix">
-							<p>친구톡</p>
-							<p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p>
-						</div>
-						<div class="rev_admin_btm">
-							<dl>
-								<dt>대기</dt>
-								<dd><span class="c_002c9a"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd>
-							</dl>
-							<dl>
-								<dt>성공</dt>
-								<dd><span class="c_002c9a"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd>
-							</dl>
-							<dl>
-								<dt>실패</dt>
-								<dd><span class="c_e40000"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd>
-							</dl>
-						</div>
-					</div> --%>
+			
+				<!-- 발송결과 개선 : 문구추가 -->
+				<div class="titBox_result">
+					<p>- 최대 3개월간의 발송내역만 확인하실 수 있습니다.</p>
+					<p>- 전송내역이 필요한 경우 기간 내에 다운로드하여 주시기 바랍니다.</p>
 				</div>
-				
+				<!--// 발송결과 개선 : 문구추가 -->
+			
 				<div class="excel_middle">
 					<div class="select_btnWrap clearfix">
 						<div class="btn_left">
@@ -931,6 +467,8 @@
 						<div class="btn_right">
 							<label for="searchCondition" class="label">발신번호 선택 == ${kakaoSentVO.searchCondition}</label>
 							<select name="searchCondition" id="searchCondition" class="selType2">
+								<option value="4" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >채널ID</option>
+								<option value="5" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >내용</option>
 								<option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option>
 							</select>
 							<div class="search">
@@ -941,6 +479,91 @@
 						</div>
 					</div>
 				</div>
+				
+				<div class="rev_admin" id="lodingBefore">
+					<div class="rev_admin_in">
+						<div class="rev_admin_top clearfix">
+							<p>전체</p>
+							<p></p>
+						</div>
+						<div class="rev_admin_btm admin_btm">
+							<table class="tType4"><tbody><tr><td>LOADING...</td></tr></tbody></table>
+						</div>
+					</div>
+					<div class="rev_admin_in">
+						<div class="rev_admin_top clearfix">
+							<p>알림톡</p>
+							<p></p>
+						</div>
+						<div class="rev_admin_btm admin_btm">
+							<table class="tType4"><tbody><tr><td>LOADING...</td></tr></tbody></table>
+						</div>
+					</div>
+				</div>
+				
+				<div class="rev_admin" id="lodingAfter" style="display:none;">
+					<div class="rev_admin_in" id="allCnt">
+						<div class="rev_admin_top clearfix">
+							<p>전체</p>
+							<p><span name="allCnt">0</span> 건</p>
+						</div>
+						<div class="rev_admin_btm">
+							<dl>
+								<dt>대기</dt>
+								<dd><span class="c_002c9a" name="waitCnt">0</span>건</dd>
+							</dl>
+							<dl>
+								<dt>성공</dt>
+								<dd><span class="c_002c9a" name="succCnt">0</span>건</dd>
+							</dl>
+							<dl>
+								<dt>실패</dt>
+								<dd><span class="c_e40000" name="failCnt">0</span>건</dd>
+							</dl>
+						</div>
+					</div>
+					<div class="rev_admin_in" id="atCnt">
+						<div class="rev_admin_top clearfix">
+							<p>알림톡</p>
+							<p><span name="allCnt">0</span> 건</p>
+						</div>
+						<div class="rev_admin_btm">
+							<dl>
+								<dt>대기</dt>
+								<dd><span class="c_002c9a" name="waitCnt">0</span>건</dd>
+							</dl>
+							<dl>
+								<dt>성공</dt>
+								<dd><span class="c_002c9a" name="succCnt">0</span>건</dd>
+							</dl>
+							<dl>
+								<dt>실패</dt>
+								<dd><span class="c_e40000" name="failCnt">0</span>건</dd>
+							</dl>
+						</div>
+					</div>
+					<%-- <div class="rev_admin_in" id="ftCnt">
+						<div class="rev_admin_top clearfix">
+							<p>친구톡</p>
+							<p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p>
+						</div>
+						<div class="rev_admin_btm">
+							<dl>
+								<dt>대기</dt>
+								<dd><span class="c_002c9a" name="waitCnt"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+							<dl>
+								<dt>성공</dt>
+								<dd><span class="c_002c9a" name="succCnt"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+							<dl>
+								<dt>실패</dt>
+								<dd><span class="c_e40000" name="failCnt"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+						</div>
+					</div> --%>
+				</div>
+				
 				<div class="list_tab_wrap2 type4">
 					<!-- tab button -->
 					<ul class="list_tab">
@@ -953,22 +576,43 @@
 					</ul><!--// tab button -->
 				</div>
 				<!-- 예약관리 > 전체 -->
-					<div class="price_history_cont current" id="listTab_2">
+					<div class="price_history_cont current price_wrap" id="listTab_2">
 						<!-- tab button -->
 						<div class="table_tab_wrap">
-							<ul>
+							<!-- <ul>
 								<li class="tab active">
 								<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li>
 								<li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li>
 								<li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li>
 								<li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li>
-							</ul><!--// tab button -->
-							<div class="tab_depth1">
-								<a href="#none" class="on msgGgoupList">받는사람(전송건별)</a>
-								<a href="#none" style="display: none;"></a>
-								<a href="#none" class="msgPrivateList">받는사람(개인별)</a>
-								<div class="on_active">받는사람(전송건별)</div>
-							</div>
+							</ul> -->
+							<!--// tab button -->
+<!-- 							<div class="tab_depth1"> -->
+<!-- 								<a href="#none" class="on msgGgoupList">받는사람(전송건별)</a> -->
+<!-- 								<a href="#none" style="display: none;"></a> -->
+<!-- 								<a href="#none" class="msgPrivateList">받는사람(개인별)</a> -->
+<!-- 								<div class="on_active">받는사람(전송건별)</div> -->
+<!-- 							</div> -->
+							<ul>
+								<li class="tab active">
+									<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button>
+								</li>
+								<!-- <li class="tab">
+									<button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button>
+								</li>
+								<li class="tab">
+									<button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button>
+								</li>
+								<li class="tab">
+									<button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button>
+								</li> -->
+								<li class="tab">
+									<button type="button" onclick="fnListLoad('N','1'); return false;">즉시</button>
+								</li>
+								<li class="tab">
+									<button type="button" onclick="fnListLoad('Y','2'); return false;">예약</button>
+								</li>
+							</ul>
 						</div>
 						<!-- 발송관리 리스트 -->
 						<div class="table_cont current msgSentAllLoad" id="tableCont_1">
 
src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp (added)
+++ src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentView_back_250305.jsp
@@ -0,0 +1,996 @@
+<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
+<%@ page import="itn.com.cmm.LoginVO" %>
+<!-- <script src="/publish/js/content.js"></script> -->
+<script src="/publish/js/popupLayer.js"></script>
+
+<script type="text/javascript">
+
+var lastfulstday = "";		//전월 시작일
+var lastfuledday = "";		//전월 마지막일
+var thisfulstlday = "";		//당월 시작일
+var thisfuledtlday = "";	//당원 마지막일
+var threefulstday = "";		//3개월전 시작일
+var threefuledday = "";		//3개월전 마지막일
+
+$(document).ready(function(){
+	
+	//초기 전체 리스트 페이지 보여주기
+	var form = document.searchForm;
+	form.listType.value = "groupList";
+	linkPage(1);
+	
+	var date = new Date() ;
+	//이전달 첫날/마지막날 조회
+	if(date.getMonth()+1 == 1){
+		lastfulstday = date.getFullYear()-1 +  "/12" + "/01";
+		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()+"" ;
+		lastfuledday = lastfulstday + "/"+ new Date(date.getFullYear(), date.getMonth(), 0).getDate()+"" ;
+		lastfulstday += "/01" ;
+	}
+	
+	//당월 첫날/마지막날 조회
+	thisfulstlday = date.getFullYear() + "/" ;
+	thisfulstlday += date.getMonth()+1 < 10  ? "0"+ (date.getMonth()+1) : date.getMonth()+1+"" ;
+	thisfuledtlday = thisfulstlday + "/"+ new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()+"";
+	thisfulstlday += "/01" ;
+	
+	//3개월 이전 날짜 구해오기
+	threefulstday = prevMonth(3);
+	threefuledday = today();
+	
+	/* 목록 정렬 항목 아이콘 표시 */ 
+	/* var searchSortCnd = $("[name='searchSortCnd']").val();
+	var searchSortOrd = $("[name='searchSortOrd']").val();
+	
+	if (searchSortCnd != "" && searchSortOrd != "" && searchSortCnd  != undefined && searchSortOrd  != undefined) {
+		var $sort_div = $("#sort_"+ searchSortCnd);
+		var sortClass = 'sortBtn' ;
+		
+		if (searchSortOrd == "desc") sortClass = "sortBtnDesc";
+		
+		$sort_div.replaceClass('sortBtn' , sortClass) ;
+		$sort_div.attr("sortOrd", searchSortOrd);
+	} */
+
+	// 정렬 항목 이벤트
+	$(document).on('click', '.sort', function (){
+		listSortOrd(this);
+	});
+
+	//목록 정렬 항목 클릭
+	function listSortOrd(obj){
+		var sortOrd = $(obj).attr("sortOrd");
+		var sortCnd = $(obj).attr("id");
+		 
+		$("[name='searchSortCnd']").val(sortCnd.substring(5)); // 구분자 제거
+		if (sortOrd == "desc") $("[name='searchSortOrd']").val("asc");
+		else $("[name='searchSortOrd']").val("desc");
+		
+		linkPage('1');  //각 JSP마다 다를때 메소드 정의해 줘야됨
+	}
+	
+	
+	//전체선택 실행
+	var allChkSts = false;
+	$("#allCheck").click(function(){
+		
+		if(!allChkSts){// 전체선택이 해제되어 있을 경우
+			
+			$("input[name=msgSentDel]").prop("checked", true);
+			allChkSts = true;
+			
+		}else{
+			
+			$("input[name=msgSentDel]").prop("checked", false);
+			allChkSts = false;
+
+		}
+		
+	});
+	
+	$(document).on('change','#pageUnit', function(){
+		
+		linkPage(1);
+		
+	});
+	
+});
+
+//오늘날짜 구하기
+function today() {
+   var d = new Date();
+   return getDateStr(d);
+}
+
+//이전 날짜 구하기
+function prevDay(days) {
+   var d = new Date();
+   var dayOfMonth = d.getDate();
+   d.setDate(dayOfMonth - days);
+   return getDateStr(d);
+}
+	
+//이전 월 구하기
+function prevMonth(month) {
+   var d = new Date();
+   var monthOfYear = d.getMonth();
+   d.setMonth(monthOfYear - month);
+   return getDateStr(d);
+}
+
+//날짜 받아오기
+function getDateStr(myDate){
+   var year = myDate.getFullYear();
+   var month = ("0"+(myDate.getMonth()+1)).slice(-2);
+   var day = ("0"+myDate.getDate()).slice(-2);
+   return ( year + '/' + month + '/' + day );
+}
+
+//캘린더에 날짜 입력해 주기
+function setCalVal(val,targetObj){
+	$('input[name='+targetObj+']').val(val) ;
+}
+
+
+//검색 버튼 실행
+function linkPage(pageNo){
+	
+	var form = document.searchForm;
+	var stateType = form.stateType.value;
+	form.pageIndex.value = pageNo;
+	
+	var sendData =  $(document.searchForm).serializeArray();
+	$(".msgSentAllLoad").html('<div class="list_info"><table class="tType4"><tbody><tr><td colspan="12">LOADING...</td></tr></tbody></table></div>');
+	$(".msgSentAllLoad").load("/web/kakao/sent/selectKakaoSentListViewAjax.do", sendData ,function(response, status, xhr){
+	});
+	
+}
+
+//선택 삭제 실행
+
+/* 
+function fnDelete(){
+	
+	var msgId = [];
+	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
+		alert("한 개 이상의 전송 내역을 선택하세요");
+		return;
+	}
+	
+	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
+		var disabledChk = $(this).prop('disabled');
+		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+			msgId[index] = $(this).val();
+		}
+	});
+	
+	if(msgId.length > 0){
+		
+		//22.04.25 구글 독스 alert 기준으로 이지우가 수정
+		// if(confirm("선택한 발송문자를 삭제하시겠습니까? 삭제된 문자는 복구가 불가능 합니다."))
+		if(confirm("선택한 목록을 삭제하시겠습니까?")){
+			
+			document.searchForm.msgGroupIdList.value = msgId;
+			var sendData =  $(document.searchForm).serializeArray();
+			
+			$(".msgSentAllLoad").load("/web/mjon/msgsent/deleteMsgSentDataAjax.do", sendData ,function(response, status, xhr){
+			});
+			
+// 			var form = document.searchForm;
+// 			form.action="/web/mjon/msgsent/selectMsgSentView.do";
+// 			form.submit();
+		}
+		
+	}else{
+		
+		alert("삭제할 문자를 선택해 주세요.");
+		return false;
+		
+	}
+	
+}
+ */
+//상세보기 버튼 실행
+function fnRevDetailPop(msgGroupId, msgId){
+	document.resPopForm.msgGroupId.value = msgGroupId;
+	document.resPopForm.msgId.value = msgId;
+	var sendData =  $(document.resPopForm).serializeArray();
+	
+	var form = document.searchForm;
+	if (form.listType.value == "privateList") {
+		// 개인별
+		$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailData2Ajax.do", sendData ,function(response, status, xhr){
+			$('#tooltopClick').trigger('click');
+		});
+	}
+	else {
+		// 전송건별
+		$("#msgSentDetailPopLoad").load("/web/kakao/sent/selectKakaoSentDetailDataAjax.do", sendData ,function(response, status, xhr){
+			// 상세보기 클릭때마다 툴팁 1 tab이 열리게 설정
+			popupTab($('#atBtn'),'1');
+			$('#tooltopClick').trigger('click');
+		});		
+	}
+	
+}
+
+function fnListLoad(pageType, tabNum){
+	
+	var form = document.searchForm;
+	var $tab = $(".table_tab_wrap li").eq(tabNum); 	//
+	$tab.addClass("active");
+	$tab.find("button").attr("title", "선택됨");
+	$tab.siblings("li.tab").removeClass("active");
+	$tab.siblings("li.btn_tab").removeClass("active");
+	$tab.siblings("li.tab").find("button").removeAttr("title");
+	
+	if(pageType == 'fail'){
+		form.listType.value = "privateList";
+		$(".tab_depth1").hide();
+	} else {
+		$(".tab_depth1").show();
+	}
+	form.stateType.value = pageType;
+	
+	linkPage(1);
+	
+}
+
+// 전체/단문/장문/그림 탭 선택 처리
+function fnTabLoad(tabType, tabNum){
+	
+	var form = document.searchForm;
+	
+	form.tabType.value = tabType;
+	
+	//해당 탭의 전체 리스트 내역으로 불러오기
+	fnListLoad('all', '0');
+	var n=tabNum+1;
+	
+	//탭 선택 CSS 처리 
+	var $tab = $(".list_tab_wrap2 li:nth-child("+n+")"); 
+	var $tabPrev = $(".list_tab_wrap2 li:nth-child("+n+")").prev("li")
+	$tab.addClass("active");
+	$tab.find("button").attr("title", "선택됨");
+	$tab.siblings("li.tab").removeClass("active");
+	$tab.siblings("li.tab").find("button").removeAttr("title");
+
+	$tab.siblings("li:not(li:last-child)").find("button").css("border-right","1px solid #e5e5e5");
+	$tabPrev.find("button").css("border-right","0");
+	
+}
+
+function fnSearch(pageNo){
+	
+	var form = document.searchForm;
+	
+	form.pageIndex.value = pageNo ;
+	
+	
+	form.action="/web/kakao/sent/selectKakaoSentView.do";
+	form.submit();
+	
+}
+
+function fnExcelDownLoad(pageType, listType){
+	
+	var form = document.searchForm;
+	var loginVO = '${LoginVO}';
+	
+	form.stateType.value = pageType;
+	form.listType.value = listType;
+	
+	if(loginVO == "" || loginVO == null){
+		
+		alert("로그인 후 이용이 가능합니다.");
+		return false;
+		
+	}
+	
+	if(confirm("엑셀 다운로드를 하시겠습니까?")){
+		
+		form.action="/web/mjon/msgsent/kakaoSentExcelDownLoadAjax.do";
+		form.submit();
+	
+	}
+	
+}
+
+$(document).on('click', '.msgGgoupList', function(){
+	
+	var form = document.searchForm;
+	form.listType.value = "groupList";
+	linkPage(1);
+	
+});
+
+$(document).on('click', '.msgPrivateList', function(){
+	
+	var form = document.searchForm;
+	form.listType.value = "privateList";
+	linkPage(1);
+	
+});
+
+
+function fnDeleteAddrNo(listType){
+	
+	var msgId = [];
+	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
+		alert("한 개 이상의 전송 내역을 선택하세요");
+		return;
+	}
+	
+	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
+		
+		var disabledChk = $(this).prop('disabled');
+		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+			
+			msgId[index] = $(this).val();
+			
+		}
+		
+	});
+	
+	if(msgId.length > 0){
+		
+		//22.04.25 구글 독스 alert 기준으로 이지우가 수정
+		/* if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){ */
+		if(confirm("선택하신 번호를 주소록에서 삭제하시겠습니까?")){
+			
+			var form = document.searchForm;
+			
+			form.msgGroupIdList.value = msgId;
+			form.listType.value = listType;
+			
+			var data = new FormData(form);
+			url = "/web/mjon/msgsent/deleteAddrNoDataAjax.do";
+			
+			$.ajax({
+				type: "POST",
+				url: url,
+				data: data,
+				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);
+							return false;
+							
+						}else if("loginFail"==returnData.result){
+							
+							alert(returnData.message);
+							return false;
+							
+						}else if(returnData.resultCnt == '0'){
+							
+							alert("주소록에 삭제할 연락처가 없습니다.");
+							return false;
+							
+						}else{
+							
+							alert(returnData.message);
+							return false;
+							
+						}
+					
+					} else if(status== 'fail'){
+						alert(returnData.message);
+					}
+				},
+				error: function (e) { alert("주소록 삭제에 실패하였습니다."); console.log("ERROR : ", e); }
+			});
+			
+		}
+		
+	}else{
+		
+		alert("삭제할 문자를 선택해 주세요.");
+		return false;
+		
+	}
+	
+}
+
+function fnAddBlockNo(listType){
+	
+	var msgId = [];
+	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
+		alert("선택된 항목이 없습니다.");
+		return;
+	}
+	
+	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
+		
+		var disabledChk = $(this).prop('disabled');
+		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+			
+			msgId[index] = $(this).val();
+			
+		}
+		
+	});
+	
+	if(msgId.length > 0){
+		
+		//if(confirm("선택한 수신번호를 주소록에서 삭제하시겠습니까? 삭제된 주소록은 복구가 불가능 합니다.")){
+			
+			var form = document.searchForm;
+			
+			form.msgGroupIdList.value = msgId;
+			form.listType.value = listType;
+			
+			var data = new FormData(form);
+			url = "/web/mjon/msgsent/insertAddBlockNoDataAjax.do";
+			
+			$.ajax({
+				type: "POST",
+				url: url,
+				data: data,
+				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);
+							return false;
+							
+						}else if("loginFail"==returnData.result){
+							
+							alert(returnData.message);
+							return false;
+							
+						}else if(returnData.resultCnt == '0'){
+							
+							alert("주소록에 삭제할 연락처가 없습니다.");
+							return false;
+							
+						}else{
+							
+							alert(returnData.message);
+							return false;
+							
+						}
+					
+					} else if(status== 'fail'){
+						alert(returnData.message);
+					}
+				},
+				error: function (e) { alert("수신거부번호 등록에 실패하였습니다."); console.log("ERROR : ", e); }
+			});
+			
+		//}
+		
+	}else{
+		
+		alert("수신거부번호를 등록할 문자를 선택해 주세요.");
+		return false;
+		
+	}
+	
+	
+}
+
+function fnReSendMsg(){
+	
+	var msgSeq = [];
+	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
+		alert("선택된 항목이 없습니다.");
+		return;
+	}
+	
+	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
+		
+		var disabledChk = $(this).prop('disabled');
+		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+			
+			msgSeq[index] = $(this).val();
+		}
+		
+	});
+	
+	var form = document.reSendForm;
+	form.msgSeqList.value = msgSeq;
+	form.msgResendFlag.value = "Y";
+	
+	form.action="/web/mjon/msgdata/selectMsgDataView.do";
+	form.submit();
+	
+}
+
+function fnMsgSFDetailList(msgGroupId, resultType){
+	
+	var form = document.resPopForm;
+	form.msgGroupId.value = msgGroupId;
+	form.resultType.value = resultType;
+	
+	//만들려는 팝업의 크기
+	var popup_wid = '1280';
+	var popup_ht = '700';
+
+	var popup_left = (window.screen.width / 2) - (popup_wid / 2);
+	var popup_top =(window.screen.height / 2) - (popup_ht / 2);
+
+	$("#resPopForm").attr("target","msgSFDetailPop");
+	
+	window.open('', 'msgSFDetailPop', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top );
+	$("#resPopForm").attr({"action":"/web/kakao/sent/selectKakaoSentSFDetailListAjax.do", "method":"post"}).submit();
+	
+}
+
+
+/* 사용내역서 클릭 시 내역서 새창 팝업 오픈  */
+function fnShowPrintPopup(tabType, type) { 
+	//만들려는 팝업의 크기
+	var popup_wid = '840';
+	var popup_ht = '900';
+
+	var popup_left = (window.screen.width / 2) - (popup_wid / 2);
+	var popup_top =(window.screen.height / 2) - (popup_ht / 2);
+
+	$("#tabType").val(tabType);
+	$("#searchForm").attr("target","msgSentPrint");
+	
+	window.open('', 'msgSentPrint', 'width='+ popup_wid +', height='+ popup_ht +', left=' + popup_left + ', top='+ popup_top +',scrollbars=1');
+	$("#searchForm").attr({"action":"/web/kakao/sent/printKakaoSentDataAjax.do", "method":"post"}).submit();
+	
+}
+
+function addrGroupDuplCnt() {
+	document.searchForm.addrGrpNm.value = $('#grpNm').val();
+	
+	var data = $('#searchForm').serialize();
+	//var data = new FormData(form);
+	
+	var flag = true;
+	var url = "/web/addr/selectDuplAddrGroupNameAjax.do";
+	
+	$.ajax({
+		async: false,
+		type: "post",
+		url: url,
+		data: data,
+		dataType:"JSON",
+//          contentType: false,
+//      	 processData: false,
+		cache: false,
+		success: function (returnData, status) {
+			if("dupl"==returnData.result1) {
+				flag = false;
+			}
+		},
+		error: function (e) {
+			alert("error");
+			console.log("ERROR : ", e); 
+		}
+	});
+	
+	return flag;
+}
+
+//주소록 그룹 등록 기능
+function fnAddAddrNo(){
+	
+	var addrGrpNm = $('#grpNm').val(); //입력 그룹 이름 불러오기
+	
+	var msgId = [];
+	if($("input:checkbox[name='msgSentDel']").is(":checked")==false){
+		alert("한 개 이상의 전송 내역을 선택하세요");
+		return;
+	}
+	
+	
+	$("input:checkbox[name='msgSentDel']:checked").each(function(index){
+		
+		var disabledChk = $(this).prop('disabled');
+		if(!disabledChk){ //checkbox disabled 인 것은 제외하고 아이디 저장
+			
+			msgId[index] = $(this).val();
+			
+		}
+		
+	});
+	
+	if(msgId.length > 0 && addrGrpNm != ''){
+		
+
+		//주소록 그룹명 중복체크
+		if(!addrGroupDuplCnt()) {
+			alert("이미 등록되어있는 주소록입니다.");
+			return false;
+		}
+		
+		
+			var form = document.searchForm;
+			
+			form.msgGroupIdList.value = msgId;
+			form.addrGrpNm.value = addrGrpNm;
+			
+			var data = new FormData(form);
+			url = "/web/mjon/msgsent/insertAddAddrGrpDataAjax.do";
+			
+			$.ajax({
+				type: "POST",
+				url: url,
+				data: data,
+				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);
+							return false;
+							
+						}else if("loginFail"==returnData.result){
+							
+							alert(returnData.message);
+							return false;
+							
+						}else if(returnData.resultCnt == '0'){
+							
+							alert("주소록에 등록할 연락처가 없습니다.");
+							return false;
+							
+						}else{
+							
+							alert(returnData.message);
+							$('#grpNm').val(""); //입력한 그룹명 초기화
+							$(".tooltip-close").trigger("click");
+							return false;
+							
+						}
+					
+					} else if(status== 'fail'){
+						alert(returnData.message);
+					}
+				},
+				error: function (e) { alert("주소록 등록에 실패하였습니다."); console.log("ERROR : ", e); }
+			});
+	}else{
+		
+		alert("등록할 문자를 선택해 주세요.");
+		return false;
+		
+	}
+	
+}
+
+/* 윈도우팝업 열기 */
+function infoPop(pageUrl){
+	document.popForm.pageType.value = pageUrl;
+	document.popForm.action = "/web/pop/infoPop.do";
+	document.popForm.method = "post"; 
+	window.open("about:blank", 'infoPop', 'width=790, height=320, top=100, left=100, fullscreen=no, menubar=no, status=no, toolbar=no, titlebar=yes, location=no, scrollbars=1');
+	document.popForm.target = "infoPop";
+	document.popForm.submit();
+}
+
+</script>
+	<!-- 문자내용 팝업 data-tooltip: rev_popup01 -->
+	<div class="tooltip-wrap">
+		<div class="popup-com adr_layer kakao_rev_popup rev_popup01" tabindex="0" data-tooltip-con="rev_popup01"
+			data-focus="rev_popup01" data-focus-prev="rev_popup01-close" style="width: 440px;">
+			<div class="popup_heading">
+				<p>문자내용</p>
+				<button type="button" class="tooltip-close" data-focus="rev_popup01-close"><img
+						src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in">
+				
+				<!-- 팝업 상세내용 노출  -->
+				<div id="msgSentDetailPopLoad" >
+				</div>
+				<div class="popup_btn_wrap2" style="justify-content: center;">
+					<button type="button" class="tooltip-close" data-focus="rev_popup01-close"
+						data-focus-next="rev_popup01">닫기</button>
+				</div>
+			</div>
+		</div>
+	</div>
+	<!-- //문자내용 팝업 data-tooltip: rev_popup01 -->
+	
+	
+	
+	
+	
+	<!-- 그룹등록 팝업 data-tooltip:rev_popup02 -->
+	<div class="tooltip-wrap">
+		<div class="popup-com adr_layer rev_popup02" tabindex="0" data-tooltip-con="rev_popup02" data-focus="rev_popup02" data-focus-prev="rev_popup02-close" style="width: 500px;">
+			<div class="popup_heading">
+				<p>그룹등록</p>
+				<button type="button" class="tooltip-close" data-focus="rev_popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+			</div>
+			<div class="layer_in">
+				<div class="gorup_join_cont">
+					<p class="adr_pop_title">선택된 발송내역 전화번호를 그룹으로 등록합니다.</p>
+					<div class="group_input" style="margin-top: 0;">
+						<div class="input_left">그룹이름</div>
+						<div class="input_right">
+							<label for="grpNm" class="label">새 그룹명 입력</label>
+							<input type="text" id="grpNm" name="grpNm" placeholder="새 그룹명 입력" onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명 입력'" class="inputLight">
+						</div>
+					</div>
+					<div class="popup_btn_wrap2">
+						<button type="button" onclick="javascript:fnAddAddrNo(); return false;">저장</button>
+						<button type="button" class="tooltip-close" data-focus="rev_popup02-close" data-focus-next="rev_popup02">취소</button>                      
+					</div>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div class="inner">
+		<!-- send top -->
+		<div class="send_top">
+		<!-- 결제관리 - 요금 사용내역 -->
+			<div class="rev_admin_cont serv_content current">
+				<div class="heading">
+					<h2>발송결과</h2>
+					<button type="button" class="button info" onclick="infoPop('selectMsgSentView');">사용안내</button>
+					<button type="button" class="button junk" data-tooltip="popupJunk">통신사 스팸규격안내</button>
+				</div>
+				<div class="pay_tab_wrap">
+					<!-- tab button -->
+					<%@include file="/WEB-INF/jsp/web/kakao/include/KakaoSentTopMentTap.jsp" %>
+					<!--// tab button -->
+				</div>
+				<form id="searchForm" name="searchForm" method="post">
+					<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
+					<input type="hidden" id="msgGroupIdList" name="msgGroupIdList" value=""/>
+					<input type="hidden" name="searchSortCnd" value="<c:out value="${searchVO.searchSortCnd}" />" />
+					<input type="hidden" name="searchSortOrd" value="<c:out value="${searchVO.searchSortOrd}" />" />
+					<input type="hidden" id="tabType" name="tabType" value="all"/><!-- 탭 종류 -->
+					<input type="hidden" id="stateType" name="stateType" value="all"/><!-- 발송상태 종류 -->
+					<input type="hidden" id="listType" name="listType" value="groupList"/><!-- 리스트 종류 -->
+					<input type="hidden" id="addrGrpNm" name="addrGrpNm" value=""/><!-- 주소록 그룹 이름 -->
+					<input type="hidden" id="mberId" name="mberId" value="${LoginVO.id}"/><!-- 주소록 그룹 이름 -->
+				
+				<!-- 각 통계별 총 건수 -->
+				<c:set var="totAllCnt" value="0"/><!-- 전체 건수 -->
+				<c:set var="totAtCnt" value="0"/><!-- 알림톡 건수 -->
+				<c:set var="totFtCnt" value="0"/><!-- 친구톡 건수 -->
+				
+				<!-- 각 통계별 성공, 실패 건수 처리 -->
+				<c:set var="waitAllCnt" value="0"/><!-- 전체 대기 건수 -->
+				<c:set var="succAllCnt" value="0"/><!-- 전체 성공 건수 -->
+				<c:set var="failAllCnt" value="0"/><!-- 전체 실패 건수 -->
+				<c:set var="waitAtCnt" value="0"/><!-- 알림톡 대기 건수 -->
+				<c:set var="succAtCnt" value="0"/><!-- 알림톡 성공 건수 -->
+				<c:set var="failAtCnt" value="0"/><!-- 알림톡 실패 건수 -->
+				<c:set var="waitFtCnt" value="0"/><!-- 친구톡 대기 건수 -->
+				<c:set var="succFtCnt" value="0"/><!-- 친구톡 성공 건수 -->
+				<c:set var="failFtCnt" value="0"/><!-- 친구톡 실패 건수 -->
+				<!-- 발송대기 건수가 있으면 이것도 발송 실패건수로 일단 집계한다. -->
+				<c:forEach var="totalMsgCnt" items="${totalMsgCnt}" varStatus="status">
+					
+					<!-- 전체 갯수 구하기 -->
+					<c:set var="totAllCnt" value="${totAllCnt + totalMsgCnt.msgResultCnt}"/>
+						
+					<!-- 전체 대기 갯수 -->
+					<c:if test="${totalMsgCnt.msgResultSts == 'W'}">
+						<c:set var="waitAllCnt" value="${waitAllCnt + totalMsgCnt.msgResultCnt}"/>
+					</c:if>
+					
+					<!-- 전체 성공 갯수 -->
+					<c:if test="${totalMsgCnt.msgResultSts == 'S'}">
+						<c:set var="succAllCnt" value="${succAllCnt + totalMsgCnt.msgResultCnt}"/>
+					</c:if>
+					
+					<!-- 전체 실패 갯수 -->
+					<c:if test="${totalMsgCnt.msgResultSts == 'F'}">
+						<c:set var="failAllCnt" value="${failAllCnt + totalMsgCnt.msgResultCnt}"/>
+					</c:if>
+					
+				</c:forEach>
+				
+				<!-- 알림톡 처리 -->
+				<c:forEach var="atCnt" items="${atCnt}" varStatus="status">
+					
+					<!-- 단문 전체 갯수 구하기 -->
+					<c:set var="totAtCnt" value="${totAtCnt + atCnt.msgResultCnt}"/>
+					
+					<!-- 단문 대기 갯수 구하기 -->
+					<c:if test="${atCnt.msgResultSts == 'W'}">
+						<c:set var="waitAtCnt" value="${waitAtCnt + atCnt.msgResultCnt}"/>
+					</c:if>
+					
+					<!-- 단문 성공 갯수 구하기 -->
+					<c:if test="${atCnt.msgResultSts == 'S'}">
+						<c:set var="succAtCnt" value="${succAtCnt + atCnt.msgResultCnt}"/>
+					</c:if>
+					
+					<!-- 단문 실패 갯수 구하기 -->
+					<c:if test="${atCnt.msgResultSts == 'F'}">
+						<c:set var="failAtCnt" value="${failAtCnt + atCnt.msgResultCnt}"/>
+					</c:if>
+					
+				</c:forEach>
+				
+				<!-- 친구톡 처리 -->
+				<c:forEach var="ftCnt" items="${ftCnt}" varStatus="status">
+					
+					<!-- 장문 전체 갯수 구하기 -->
+					<c:set var="totFtCnt" value="${totFtCnt + ftCnt.msgResultCnt}"/>
+					
+					<!-- 장문 대기 갯수 구하기 -->
+					<c:if test="${ftCnt.msgResultSts == 'W'}">
+						<c:set var="waitFtCnt" value="${waitFtCnt + ftCnt.msgResultCnt}"/>
+					</c:if>
+					
+					<!-- 장문 성공 갯수 구하기 -->
+					<c:if test="${ftCnt.msgResultSts == 'S'}">
+						<c:set var="succFtCnt" value="${succFtCnt + ftCnt.msgResultCnt}"/>
+					</c:if>
+					
+					<!-- 장문 실패 갯수 구하기 -->
+					<c:if test="${ftCnt.msgResultSts == 'F'}">
+						<c:set var="failFtCnt" value="${failFtCnt + ftCnt.msgResultCnt}"/>	
+					</c:if>
+					
+				</c:forEach>
+			<div class="rev_content kakao_rev_content" id="tab5_2">
+				<div class="rev_admin">
+					<div class="rev_admin_in">
+						<div class="rev_admin_top clearfix">
+							<p>전체</p>
+							<p><span><fmt:formatNumber value="${totAllCnt}" pattern="#,###"/></span> 건</p>
+						</div>
+						<div class="rev_admin_btm">
+							<dl>
+								<dt>대기</dt>
+								<dd><span class="c_002c9a"><fmt:formatNumber value="${waitAllCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+							<dl>
+								<dt>성공</dt>
+								<dd><span class="c_002c9a"><fmt:formatNumber value="${succAllCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+							<dl>
+								<dt>실패</dt>
+								<dd><span class="c_e40000"><fmt:formatNumber value="${failAllCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+						</div>
+					</div>
+					<div class="rev_admin_in">
+						<div class="rev_admin_top clearfix">
+							<p>알림톡</p>
+							<p><span><fmt:formatNumber value="${totAtCnt}" pattern="#,###"/></span> 건</p>
+						</div>
+						<div class="rev_admin_btm">
+							<dl>
+								<dt>대기</dt>
+								<dd><span class="c_002c9a"><fmt:formatNumber value="${waitAtCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+							<dl>
+								<dt>성공</dt>
+								<dd><span class="c_002c9a"><fmt:formatNumber value="${succAtCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+							<dl>
+								<dt>실패</dt>
+								<dd><span class="c_e40000"><fmt:formatNumber value="${failAtCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+						</div>
+					</div>
+					<%-- <div class="rev_admin_in">
+						<div class="rev_admin_top clearfix">
+							<p>친구톡</p>
+							<p><span><fmt:formatNumber value="${totFtCnt}" pattern="#,###"/></span> 건</p>
+						</div>
+						<div class="rev_admin_btm">
+							<dl>
+								<dt>대기</dt>
+								<dd><span class="c_002c9a"><fmt:formatNumber value="${waitFtCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+							<dl>
+								<dt>성공</dt>
+								<dd><span class="c_002c9a"><fmt:formatNumber value="${succFtCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+							<dl>
+								<dt>실패</dt>
+								<dd><span class="c_e40000"><fmt:formatNumber value="${failFtCnt}" pattern="#,###"/></span>건</dd>
+							</dl>
+						</div>
+					</div> --%>
+				</div>
+				
+				<div class="excel_middle">
+					<div class="select_btnWrap clearfix">
+						<div class="btn_left">
+							<span class="cal_label">기간선택</span>
+							<div class="calendar_wrap">
+								<input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="startDate" value="<c:out value='${kakaoSentVO.startDate}'/>" data-datecontrol="true">
+								<span class="dateEtc">~</span>
+								<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="endDate" value="<c:out value='${kakaoSentVO.endDate}'/>" data-datecontrol="true">
+							</div>
+							<!-- <button type="button">전월</button>
+							<button type="button">당월</button> -->
+							<button type="button" onclick="setCalVal(lastfulstday,'startDate');setCalVal( lastfuledday,'endDate'); return false;"  class="btnType btnType19">전월</button>
+							<button type="button" onclick="setCalVal(thisfulstlday,'startDate');setCalVal( thisfuledtlday,'endDate'); return false;"  class="btnType btnType19">당월</button>
+							<!-- <button type="button">3개월</button> -->
+							<button type="button" onclick="setCalVal(threefulstday,'startDate');setCalVal( threefuledday,'endDate'); return false;"  class="btnType btnType19">3개월</button>
+							<button type="button" class="btnType6" onClick="javascript:fnSearch(1); return false;">조회</button>
+						</div>
+						<div class="btn_right">
+							<label for="searchCondition" class="label">발신번호 선택 == ${kakaoSentVO.searchCondition}</label>
+							<select name="searchCondition" id="searchCondition" class="selType2">
+								<option value="3" <c:if test="${kakaoSentVO.searchCondition == '3'}">selected</c:if> >수신번호</option>
+							</select>
+							<div class="search">
+								<label for="id" class="label"></label>
+								<input type="text" id="searchKeyword" name="searchKeyword" value="<c:out value='${searchKeyword}'/>" placeholder="검색어를 입력하세요." onfocus="this.placeholder=''" onblur="this.placeholder='검색어를 입력하세요.'">
+								<button type="button" class="btnType btnType2" onClick="javascript:fnSearch(1); return false;">검색</button>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="list_tab_wrap2 type4">
+					<!-- tab button -->
+					<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>
+<%-- 						<c:if test="${fn:contains(pageContext.request.requestURL , 'localhost')  --%>
+<%-- 				        || 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>
+				<!-- 예약관리 > 전체 -->
+					<div class="price_history_cont current" id="listTab_2">
+						<!-- tab button -->
+						<div class="table_tab_wrap">
+							<ul>
+								<li class="tab active">
+								<button type="button" onclick="fnListLoad('all','0'); return false;">전체</button></li>
+								<li class="tab"><button type="button" onclick="fnListLoad('ready','1'); return false;">결과대기</button></li>
+								<li class="tab"><button type="button" onclick="fnListLoad('complete','2'); return false;">정상수신</button></li>
+								<li class="tab"><button type="button" onclick="fnListLoad('fail','3'); return false;">수신오류</button></li>
+							</ul><!--// tab button -->
+							<div class="tab_depth1">
+								<a href="#none" class="on msgGgoupList">받는사람(전송건별)</a>
+								<a href="#none" style="display: none;"></a>
+								<a href="#none" class="msgPrivateList">받는사람(개인별)</a>
+								<div class="on_active">받는사람(전송건별)</div>
+							</div>
+						</div>
+						<!-- 발송관리 리스트 -->
+						<div class="table_cont current msgSentAllLoad" id="tableCont_1">
+						</div><!-- //전체 종료 -->
+						<!-- table -->
+					</div>
+				</form>
+				</div>
+			</div>
+		</div><!--// send top -->
+	</div>
+	<form id="resPopForm" name="resPopForm" method="post">
+		<input type="hidden" id="msgGroupId" name="msgGroupId" value=""/>
+		<input type="hidden" id="msgId" name="msgId" value=""/>
+		<input type="hidden" id="fileCnt" name="fileCnt" value=""/>
+		<input type="hidden" id="resultType" name="resultType" value="S"/>
+	</form>
+	<form id="reSendForm" name="reSendForm" method="post">
+		<input type="hidden" id="msgSeqList" name="msgSeqList" value=""/>
+		<input type="hidden" id="msgResendFlag" name="msgResendFlag" value="N"/>
+	</form>
+	<form name="popForm" id="popForm" method="post">
+		<input type="hidden" name="pageType" id="pageType" value=""/> 
+	</form>
+	(No newline at end of file)
src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgsent/MsgSentDetailView.jsp
@@ -610,6 +610,7 @@
 	// 탭 필터 적용하여 데이터 필터링 (수신번호 필터는 무시)
 	return allData.filter(row => tabFilter ? row.result.includes(tabFilter.value) : true);
 }
+ 
 
  
 
Add a comment
List