From 9ce4990c5512bee4deff5cb13d04c25f30abd1be Mon Sep 17 00:00:00 2001 From: subsub Date: Thu, 26 Jun 2025 11:02:43 +0900 Subject: [PATCH 01/23] =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=ED=83=80=EC=9D=B4=ED=8B=80=20=EB=84=98?= =?UTF-8?q?=EC=96=B4=EA=B0=80=EB=8A=94=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/content.css | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/webapp/publish/css/content.css b/src/main/webapp/publish/css/content.css index a9c07c5d..8f4e07f4 100644 --- a/src/main/webapp/publish/css/content.css +++ b/src/main/webapp/publish/css/content.css @@ -1623,7 +1623,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px .kakaotalkset_cont .kakao_template_list .template_cont .allimtalk_content .template_text+.btn_kakao_type{margin-top: 8px;} .kakaotalkset_cont .kakao_template_list .template_cont .allimtalk_content .btn_kakao_channel{width: calc(100% - 20px); height: 40px; font-size: 15px; border-radius: 5px; background-color: #ffea00;} .kakaotalkset_cont .kakao_template_list .template_cont .allimtalk_content .btn_kakao_type{width: calc(100% - 20px); height: 40px; font-size: 15px; border-radius: 5px; background-color: #ededed;} -.kakaotalkset_cont .kakao_template_list .kakao_template_info{ font-size: 14px; color: #555; padding: 10px 0 0 10px;} +.kakaotalkset_cont .kakao_template_list .kakao_template_info{ font-size: 14px; color: #555; padding: 10px 0 0 4px;} .kakaotalkset_cont .kakao_template_list .kakao_template_info dl{display: flex; padding: 6px 0;} .kakaotalkset_cont .kakao_template_list .kakao_template_info dt{position: relative; width: 76px; margin: 0 13px 0 0;} .kakaotalkset_cont .kakao_template_list .kakao_template_info dt::after{position: absolute; content: " "; width: 1px; height: 12px; background-color: #d5d5d5; right: 0; top: 2px;} @@ -1804,8 +1804,9 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px .kakao_use_guide_cont .qna{margin: 0 0 50px 0;} /* 친구톡 */ -.friend_template_content .kakao_template_list .kakao_template_info dt{width: 50px;} -.friend_template_content .kakao_template_list .kakao_template_info dd{width: calc(100% - 50px);} +.friend_template_content .kakao_template_list .kakao_template_info dt{width: 60px;margin:0 7px 0 0;} +.friend_template_content .kakao_template_list .kakao_template_info dd{width: calc(100% - 60px);letter-spacing:-0.5px;} +.friend_template_content .kakao_template_list .kakao_template_info dl:first-child dd{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;} .kakaotalkset_cont .friend_template_content .kakao_template_list .template_cont .template_text{color: #555; font-size: 14px; font-weight: 400;} .kakaotalkset_cont .friend_talk_wrap .send_left{padding: 0 0 100px 0;} .friend_talk_wrap .friend_template_add_wrap .template_name{width: 100%;} From eca7f57a41c60b4eba12bb86d5376d60b8dc6f09 Mon Sep 17 00:00:00 2001 From: subsub Date: Thu, 26 Jun 2025 14:43:25 +0900 Subject: [PATCH 02/23] =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/content.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/webapp/publish/css/content.css b/src/main/webapp/publish/css/content.css index 8f4e07f4..412099c6 100644 --- a/src/main/webapp/publish/css/content.css +++ b/src/main/webapp/publish/css/content.css @@ -1635,6 +1635,7 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px .kakaotalkset_cont .kakao_template_list .kakao_template_info .btn_wrap button:first-child{margin: 0 2px 0 0;} .kakaotalkset_cont .kakao_template_list .kakao_template_info .btn_wrap button:last-child{margin: 0 0 0 2px;} .kakaotalkset_cont .list_content{display: none;} +.kakaotalkset_cont .list_content td{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;} .kakaotalkset_cont .thumbnail_content.current{display: block;} .kakaotalkset_cont .template_sample_content_wrap .btn_wrap{text-align: center; margin: 10px 0 0 0;} .kakaotalkset_cont .template_sample_content_wrap .btn_template_use{width: 136px; text-align: center; border-radius: 100px; font-size: 16px;} From 6bc68150e31e4e1818bd411de87c5fe844c6cf0c Mon Sep 17 00:00:00 2001 From: JIWOO Date: Fri, 27 Jun 2025 17:15:25 +0900 Subject: [PATCH 03/23] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20-=20?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=20=EB=B0=9C=EC=86=A1=20=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?=EC=83=81=ED=83=9C=20=EC=A1=B0=EA=B1=B4=20=EB=B3=80=EA=B2=BD(?= =?UTF-8?q?=EC=B4=9D=20=EA=B1=B4=EC=88=98=3D=3D=EC=84=B1=EA=B3=B5or?= =?UTF-8?q?=EC=8B=A4=ED=8C=A8=20=EA=B1=B4=EC=88=98=20->=20=EC=B4=9D=20?= =?UTF-8?q?=EA=B1=B4=EC=88=98=3D=3D=EC=84=B1=EA=B3=B5+=EC=8B=A4=ED=8C=A8?= =?UTF-8?q?=20=EA=B1=B4=EC=88=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java index 60105a6e..037f6548 100644 --- a/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java +++ b/src/main/java/itn/let/mjo/msgsent/service/impl/MjonMsgSentServiceImpl.java @@ -841,8 +841,8 @@ public class MjonMsgSentServiceImpl extends EgovAbstractServiceImpl implements && result.getDiffMin() < -5 // 예약 시간이 5분 이상인 것들만 ) { returnCode = "03"; // 예약대기 코드 ( 예약취소 버튼 노출 ) - } else if (result.getMsgGroupCnt().equals(result.getResultSValue()) - || result.getMsgGroupCnt().equals(result.getResultFValue())) { + } else if (Integer.parseInt(result.getMsgGroupCnt()) == Integer.parseInt(result.getResultSValue()) + Integer.parseInt(result.getResultFValue()) + ) { returnCode = "02"; // 완료 코드 } else { returnCode = "01"; // 진행중 코드 From 921cad89b1294665d0b6976692eede311a8cf633 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Mon, 30 Jun 2025 11:40:29 +0900 Subject: [PATCH 04/23] =?UTF-8?q?=EA=B0=9C=EB=B0=9C=EC=84=9C=EB=B2=84=20DB?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD=20->=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=9E=84=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../egovframework/egovProps/globals_dev.properties | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/resources/egovframework/egovProps/globals_dev.properties b/src/main/resources/egovframework/egovProps/globals_dev.properties index f5f8f648..621c1f23 100644 --- a/src/main/resources/egovframework/egovProps/globals_dev.properties +++ b/src/main/resources/egovframework/egovProps/globals_dev.properties @@ -28,10 +28,13 @@ Globals.Env = dev # mysql Globals.DriverClassName=com.mysql.jdbc.Driver -Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon -#Globals.Url=jdbc:mysql://139.150.73.12:3306/mjon +Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon Globals.UserName= mjonUr -Globals.Password= mjon!@#$ +Globals.Password= itntest123 +#Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon +#Globals.Url=jdbc:mysql://139.150.73.12:3306/mjon +#Globals.UserName= mjonUr +#Globals.Password= mjon!@#$ # mysql-prod #Globals.DriverClassName=com.mysql.jdbc.Driver From cef142035139df4e051e6b969c24a8a68ed6104d Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Mon, 30 Jun 2025 12:44:04 +0900 Subject: [PATCH 05/23] =?UTF-8?q?DB=EC=A0=95=EB=B3=B4=20=EC=9B=90=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../egovframework/egovProps/globals_dev.properties | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/resources/egovframework/egovProps/globals_dev.properties b/src/main/resources/egovframework/egovProps/globals_dev.properties index 9fffb6c2..f5f8f648 100644 --- a/src/main/resources/egovframework/egovProps/globals_dev.properties +++ b/src/main/resources/egovframework/egovProps/globals_dev.properties @@ -28,13 +28,10 @@ Globals.Env = dev # mysql Globals.DriverClassName=com.mysql.jdbc.Driver -Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon +Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon +#Globals.Url=jdbc:mysql://139.150.73.12:3306/mjon Globals.UserName= mjonUr Globals.Password= mjon!@#$ -#Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon -#Globals.Url=jdbc:mysql://139.150.73.12:3306/mjon -#Globals.UserName= mjonUr -#Globals.Password= mjon!@#$ # mysql-prod #Globals.DriverClassName=com.mysql.jdbc.Driver From 4feb34dce7a082eaa6c8fe0d211a1a14fefeef1f Mon Sep 17 00:00:00 2001 From: JIWOO Date: Thu, 3 Jul 2025 17:35:25 +0900 Subject: [PATCH 06/23] =?UTF-8?q?=EC=9D=B4=EC=A7=80=EC=9A=B0=20DB=20?= =?UTF-8?q?=EC=A0=91=EC=86=8D=20=EC=A0=95=EB=B3=B4=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?mjon=20>=20mjon=5Fadvc(UTF8MB4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/egovframework/egovProps/globals_dev.properties | 2 +- .../resources/egovframework/egovProps/globals_local.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/egovframework/egovProps/globals_dev.properties b/src/main/resources/egovframework/egovProps/globals_dev.properties index f5f8f648..cd784129 100644 --- a/src/main/resources/egovframework/egovProps/globals_dev.properties +++ b/src/main/resources/egovframework/egovProps/globals_dev.properties @@ -28,7 +28,7 @@ Globals.Env = dev # mysql Globals.DriverClassName=com.mysql.jdbc.Driver -Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon +Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon_advc #Globals.Url=jdbc:mysql://139.150.73.12:3306/mjon Globals.UserName= mjonUr Globals.Password= mjon!@#$ diff --git a/src/main/resources/egovframework/egovProps/globals_local.properties b/src/main/resources/egovframework/egovProps/globals_local.properties index 370b98c5..26bb8ef5 100644 --- a/src/main/resources/egovframework/egovProps/globals_local.properties +++ b/src/main/resources/egovframework/egovProps/globals_local.properties @@ -28,7 +28,7 @@ Globals.Env = local # mysql Globals.DriverClassName=com.mysql.jdbc.Driver -Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon +Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon_advc #Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon Globals.UserName= mjonUr Globals.Password= mjon!@#$ From 2dfb2fed27a47da8f5c2fc22b337b26fc3e80f6d Mon Sep 17 00:00:00 2001 From: subsub Date: Wed, 9 Jul 2025 11:48:17 +0900 Subject: [PATCH 07/23] =?UTF-8?q?=EC=B9=B4=ED=86=A1=EB=B0=9C=EC=86=A1=20>?= =?UTF-8?q?=20=EC=B9=B4=EC=B9=B4=EC=98=A4=ED=86=A1=20=EC=86=8C=EA=B0=9C=20?= =?UTF-8?q?>=20=EC=B9=9C=EA=B5=AC=ED=86=A1=20=EC=86=8C=EA=B0=9C=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/content.css | 70 +- .../kakao_intro_cont/friendtalk_use1.png | Bin 0 -> 20509 bytes .../kakao_intro_cont/friendtalk_use2.png | Bin 0 -> 28279 bytes .../kakao_intro_cont/friendtalk_use3.png | Bin 0 -> 34724 bytes .../kakao_intro_cont/phone_friendtalk.png | Bin 0 -> 48133 bytes .../kakao_intro_cont/text_friendtalk.png | Bin 0 -> 11614 bytes .../webapp/publish/kakao_allimtalk_intro.html | 851 ++++++++++-------- src/main/webapp/publish/layout/_header.html | 3 +- 8 files changed, 525 insertions(+), 399 deletions(-) create mode 100644 src/main/webapp/publish/images/kakao_intro_cont/friendtalk_use1.png create mode 100644 src/main/webapp/publish/images/kakao_intro_cont/friendtalk_use2.png create mode 100644 src/main/webapp/publish/images/kakao_intro_cont/friendtalk_use3.png create mode 100644 src/main/webapp/publish/images/kakao_intro_cont/phone_friendtalk.png create mode 100644 src/main/webapp/publish/images/kakao_intro_cont/text_friendtalk.png diff --git a/src/main/webapp/publish/css/content.css b/src/main/webapp/publish/css/content.css index 412099c6..fdbe1745 100644 --- a/src/main/webapp/publish/css/content.css +++ b/src/main/webapp/publish/css/content.css @@ -2048,9 +2048,56 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px .kakao_intro_cont .note .note-title p span{padding-right: 10px;} /*유의사항_목록*/ .kakao_intro_cont .note ul{line-height: 26px; font-weight: 300; font-size: 16px; color: #666; background-color: #fff; border-radius: 10px; padding: 25px 53px;} -.kakao_intro_cont .note ul li:nth-child(4){font-size: 15px; color: #999; padding-left: 10px; margin-top: -3px;} -.kakao_intro_cont .note ul li:nth-child(5){font-weight: 400; font-size: 14px; color: #fff; margin: 3px 0 7px 10px; background-color: #002c9a; width: 260px; height: 32px; line-height: 31px; text-align: center; border-radius: 5px;} -.kakao_intro_cont .note ul li:nth-child(5):hover{box-shadow: 0 0 8px rgba(0,0,0,0.5);} +.kakao_intro_cont :not(.friendtalk) .note ul li:nth-child(4){font-size: 15px; color: #999; padding-left: 10px; margin-top: -3px;} +.kakao_intro_cont :not(.friendtalk) .note ul li:nth-child(5){font-weight: 400; font-size: 14px; color: #fff; margin: 3px 0 7px 10px; background-color: #002c9a; width: 260px; height: 32px; line-height: 31px; text-align: center; border-radius: 5px;} +.kakao_intro_cont :not(.friendtalk) .note ul li:nth-child(5):hover{box-shadow: 0 0 8px rgba(0,0,0,0.5);} + +/* 친구톡 소개 */ +.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li:nth-child(1){margin:0 0 45px 0;} +.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li{margin:0 0 19px 0;} +.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li p:nth-child(2){display:flex;line-height:1;height:auto;justify-content:center;align-items:center;padding:22px 0 18px 0;font-family:'GmarketSansMedium';} +.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li p:nth-child(2) span{display:inline-block;font-family:'GmarketSansBold';margin:0 4px;} +.kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li:nth-child(4) p:nth-child(2){height:auto;line-height:1;padding:24px 0 18px 0;} +.kakao_intro_cont .friendtalk .kakao_intro .con .intro .phone{width:auto;height:100%;margin:-20px 0 0 -15px;} + +.kakao_intro_cont .friendtalk .kakao_intro .fight .wrap{max-width:1024px;gap:50px;justify-content:center;} +.kakao_intro_cont .friendtalk .kakao_intro .con .fight .fight-title{width:250px;} +.kakao_intro_cont .friendtalk .kakao_intro .vs{display:flex;width:calc((100% - 200px) / 2);flex-direction:column;align-items:center;gap:20px;} +.kakao_intro_cont .friendtalk .kakao_intro .vs.vs_title{width:100px;} +.kakao_intro_cont .friendtalk .kakao_intro .vs .title{height:34px;padding:5px 30px 3px;border-radius:35px;background:#E4E6EA;font-family:'GmarketSansBold';color:#666;font-size:20px;line-height:35px;} +.kakao_intro_cont .friendtalk .kakao_intro .vs.vs_title ul{padding:20px 0;} +.kakao_intro_cont .friendtalk .kakao_intro .vs.vs_title .title{background:transparent;font-family:'GmarketSansMedium';} +.kakao_intro_cont .friendtalk .kakao_intro .vs.vs_title ul li{background:transparent;font-family:'GmarketSansMedium';} +.kakao_intro_cont .friendtalk .kakao_intro .fight .vs .box{display:flex;width:100%;padding:20px;background:#fff;border-radius:20px;box-shadow:0 0 10px rgba(0,0,0,0.1);align-items:center;flex-direction:column;box-sizing:border-box;} +.kakao_intro_cont .friendtalk .kakao_intro .vs ul li{display:flex;height:51px;margin:4px 0;font-size:20px;font-family:'GmarketSansBold';color:#666;letter-spacing:-.85px;text-align:center;justify-content:center;align-items:center;flex-wrap:wrap;gap:0;} +.kakao_intro_cont .friendtalk .kakao_intro .vs .box ul li span{display:block;width:100%;font-size:16px;font-weight:400;margin:-10px 0 0 0;} + +.kakao_intro_cont .friendtalk .kakao_intro .friendtalk_vs .title{background:#ffcc33;color:#222;} +.kakao_intro_cont .friendtalk .friendtalk_vs .box{border:1px solid #222;} +.kakao_intro_cont .friendtalk .friendtalk_vs .box ul li{color:#222;} +.kakao_intro_cont .friendtalk .friendtalk_vs .box ul li span{color:#666;} + +.friendtalk_use{display:flex;max-width:1024px;margin:50px 0;justify-content:space-between;} +.friendtalk_use li{text-align:center;width:calc((1024px / 3) - 20px);} +.friendtalk_use .title{display:inline-flex;height:43px;font-size:20px;font-weight:bold;color:#002c9a;text-align:center;background:#fff;padding:0 23px;margin:0 auto 20px auto;border:2px solid #002c9a;border-radius:35px;justify-content:center;align-items:center;} +.friendtalk_use img{margin:0 0 20px 0;} +.friendtalk_use .explan_text{display:table-cell;width:100%;height:100px;line-height:1.4;padding:0 20px;background:#fff;border-radius:10px;box-sizing:border-box;vertical-align:middle;} +.friendtalk_use li:first-child .explan_text{display:flex;align-items:center;justify-content:center;} +.friendtalk_use .explan_text span{font-weight:bold;} + +.friendtalk .service .kakao_use_guide{display: flex; margin: 50px 0; gap: 30px;} +.friendtalk .service .kakao_use_guide li{position: relative; display:flex; width: calc((100% - 60px)/3); background-color: #fff; border-radius: 20px; padding: 0 0 30px 0; text-align: center; overflow: hidden;flex-direction: column;gap: 20px;} +.friendtalk .service .kakao_use_guide .title{display:flex;width:100%;height:50px;font-size:19px;background:#002c9a;color:#fff;justify-content:center;align-items:center;letter-spacing:1px;} +.friendtalk .service .kakao_use_guide .title span{font-weight:bold;font-size:22px;} +.friendtalk .service .kakao_use_guide li i{display: block; width: 128px; height: 128px; margin: 10px auto 10px auto; background-color: #F3F6FB; border-radius: 100%; background-repeat: no-repeat; background-position: center;} +.friendtalk .service .kakao_use_guide li.guide_01 i{background-image: url(/publish/images/content/icon_kakao_guide01.png);} +.friendtalk .service .kakao_use_guide li.guide_02 i{background-image: url(/publish/images/content/icon_kakao_guide02.png);} +.friendtalk .service .kakao_use_guide li.guide_03 i{background-image: url(/publish/images/content/icon_kakao_guide04.png);} +.friendtalk .service .kakao_use_guide li .guide_title{font-family: 'GmarketSansBold'; font-size: 24px;} +.friendtalk .service .kakao_use_guide li .guide_info{display: block; height: 120px; font-size: 18px; font-weight: 300; color: #444; line-height: 1.3; padding: 0 20px;} + +.kakao_intro_cont .friendtalk .note b{font-weight:400;color:#e40000;} + /* api - 소개 */ .send_top .api_guide_cont {background-color: #fff;padding: 30px 40px;border-radius: 10px;} @@ -2520,6 +2567,23 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px .kakao_intro_cont .service .con .service-03 .text .icon img{margin-top: 24px;} .kakao_intro_cont .service .con .service-04 .text .icon img{margin-top: 24px;} + /* 친구톡 소개 */ + .kakao_intro_cont .friendtalk .kakao_intro .con .intro{gap:30px;} + .kakao_intro_cont .friendtalk .kakao_intro .con .intro .phone{width:42%;height:auto;} + .kakao_intro_cont .friendtalk .kakao_intro .con .intro ul li p:nth-child(2){font-size:18px;;} + .kakao_intro_cont .friendtalk .kakao_intro .vs ul li{font-size:18px;} + .kakao_intro_cont .friendtalk .kakao_intro .vs .box ul li span{font-size:14px;} + .friendtalk_use{gap:20px;} + .friendtalk_use .title{height:36px;font-size:16px;} + .friendtalk_use img{width:100%;} + .friendtalk_use li:first-child .explan_text{white-space:nowrap;} + + .friendtalk .service .kakao_use_guide .title{font-size:16px;} + .friendtalk .service .kakao_use_guide .title span{font-size:20px;} + .friendtalk .service .kakao_use_guide li .guide_title{font-size:22px;} + .friendtalk .service .kakao_use_guide li .guide_info{font-size:16px;} + .kakao_intro_cont .service .guide a{font-size: 20px;} + /*발송결과_select버튼*/ .select_btnWrap .btn_right .search .send_text{width: 170px;} diff --git a/src/main/webapp/publish/images/kakao_intro_cont/friendtalk_use1.png b/src/main/webapp/publish/images/kakao_intro_cont/friendtalk_use1.png new file mode 100644 index 0000000000000000000000000000000000000000..4b667c465fb4f1e80a0e01c659561ca0ca5d434d GIT binary patch literal 20509 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/publish/images/kakao_intro_cont/friendtalk_use2.png b/src/main/webapp/publish/images/kakao_intro_cont/friendtalk_use2.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc9f7f0c456bf86802bf9ad43c1c5ebcb6aafb6 GIT binary patch literal 28279 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/publish/images/kakao_intro_cont/friendtalk_use3.png b/src/main/webapp/publish/images/kakao_intro_cont/friendtalk_use3.png new file mode 100644 index 0000000000000000000000000000000000000000..10a79413acd2b313c9a78c65d00b36202fb741d0 GIT binary patch literal 34724 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 literal 0 HcmV?d00001 diff --git a/src/main/webapp/publish/images/kakao_intro_cont/text_friendtalk.png b/src/main/webapp/publish/images/kakao_intro_cont/text_friendtalk.png new file mode 100644 index 0000000000000000000000000000000000000000..b4e4c2cb78d21673b2af3623a9e617e5f32aaf4e GIT binary patch literal 11614 zcma*NWmp_b*ENg>32wnH_~7mi!QCA~a2qUmaJK-1+u$w<6C^-z!UP{AXz;<^?aev& zbH3l-kFKuntE;+dU#r$$ReQ&2X((Z1l4BwuAYd!Mlh;8&K+^tO*F{JBTlTQ)JpR35 zc)Tt0tayy#Xj*Iupe?I9en&TrHSC6K z-LvMi<||IW*G}>wv$IzXrZ>+gH^DcZBpBhe=;5@#xJ5;)_6KOHcjD};tj7^JN>R*Z z1-o*jc26fReuACW_BS7&@LsO%pF@R03&llad^wC|k#`GKH&<5pl~JwI{^hH;b@5Gd%G3h|fj3V=Dfx4Cyp-}uI=4&iwIrSzYo5bxq`D@v{gmG>|8#!> zR|R3z-*b{(mv#UX3IDYv_g$HN{y?s&!A|&gfltQF-xak00(j;- z=)r%-g(6cW>=Ij!C>nFWCw6EiRy0Vs?7Kb1fsxxp2;*Cor>Sx+liKuFtBs2#_~-Ky zum=i^wre#cF2tc6KFco=Fj&DxqBV9Y=}htz_F7g&KI31zWkw1F#LyYuO9$4fbBrZ~RF~%tEj7k6j}j?fcPG9&Loob+RfbsF+O{(<=7cu72xcND;x4P(>&DnkVF2({|2OOzl~>xc ze?mIqIV2k=Sc?HiwkCz{6zp5w9R1{uqV8LGU9T>#t!32D9|1MVz0oLpf0D6CnX8h6IJJTDKZme{@FP_XU(21 zmSZt0ffLfO9y~T3r5EnRqy%T+>QR&0a!=nFC;aCZ)}qZrDU*3M(ePc6`qhp=?2z&6 zCp(%c(r)Fi4MCLV4ZeqB2@kB)v&zZ z3!k>>m(Fnn)4GrwC2+6xJW}hvt^CWbB$xzZp?$w48Eu?OCA#r!sVnDgGeYS!_)tYn zQFe3g{~}}aKS*W^S_H(^91%S+KYtNDP$H3F0C;yd<-ijF;OiTI5dCwtFNyY(3;4HB zg8-&mCmo53lz%)t7nhJqWT*WIV5qhp;X_;HW~K_0lKq{wUKlz)dQ@3!Gr!rHOjXK; z|9^;}xVp-C51l^veVAUZj0e6vsEj+lr8bR5Td`{*=-RB8FS1XV)?DDdTHyr000m4z z&qKsgO*&VPg$`7mJ43p^&(?3B?0eqc8!;y|VDMsA=97l2%baX#J!%!g~r zR?0Jl#;(k~k3NuEx$u8{RgrFQ-1COM4Zr6SfK|20ynKSEM9RgOtGk(0r@Qng^jR`t z7ACc>pldjhrHtN>%e)=h7tMPE|L42xEDxfw}UuR*L@BRPrhxL6n z^s_uEm&IZja&RGIoEakj%dcfodp8MF$oIDx=x>#Z+bxS`^$5-Vh^G`(&FG?huDhkb z-V+}3ic@=%XEFT;%!03Zq+g(kQ4~kbyUu2^3i`2s8@yM8T6o--^~=ZN+v=U3G-By%rRsO`#(Ek2aKbKY7Ltj(s;I zCh+}x_rkfyzl zPC4fx@7lIz=F#{pkqSyMX-naLtAn$Iv^IX7~>LMi37upSi%L(N#hrXKz z>=)V@TC1G@x4d7!Zn9>PnP_VA=LnUkRuwPt+EfA4_z_B+N9MikHF9;%^tc3O!--uK z$f>-Peq*P!*w+i63mpIf(tW_5A zrGjTv4E`QS8eH97Tx2DIzCKvVDe|5i?B3*a04~o+li<@*GUhii*OXfQ62m0_-*g^# zg!p;16>z^e@uVc#3S5k~%db77O-Z%P!o!8|1O%FD-9cjaZU#wWp{socV2V|_%Y|=o z4RB${={}a8fYoPW^=`Wo$Wnw!OduSx;J6a4z#YU%zXO(_j3FSqd3}@VSP*bDF@0$eRMNy%^ zc3Z`BHRbg0&z31OdedX=tu8Aye2I&jsB+cmpc-S0`GV|bi|}YgCpgIO+cfgZcjy1; zN@(s+!q@lLv`@cUswF>i+(^OmF^ZfUM$e725C0rhGM&9CoI({{+>5+9D#OvukInB`VoDEBfEO8xJg z&}Wh*q#Mh!_M})8RI5Jo$17|`kOW_R|2D&nOIe(jo`Cv~Zop$hc0ObjZTyf*U7;+R zz=jAVgWY6Yv6;9DG!0z*{ytE^{I3=nOsy-;;_S%wHCXZ{F0T%&AdPH)>2<0&sB4E+ zzWnFLQ5dYUDqs{N(J<12W zdm*ge9bYnRDH3(9@DO$T=~s240fk6?bBw<${-;7>T?M8s4)nbR*s~?{&d>agd0Z2s zqY1rV6{v>}Bh?7ad)gg~|KnyAr&nPxer?lE@w9hlPD{RGAV!x!RU7Zi5n(mZHu%olvaT7tD{(fOhl)0sZ^3v*Z;H`&y#u167e1B(%bZGrB%AjwY zxC7|RE)R)TD0QI%P3Q^l;?xR7s?18vzXHd4Xi6|N#6I33$!>PD$tTs-;XwtLJyTg>!63;!owN+L9V5wT~rMFZm(1F}T-pp4#>^pW=+cI)kvUUCYUXAmVM)EG8k5=DSk(n;;#4|) z5fHOj^Awb#-G22&ruEfBe&)MN`J>hWWuEOfH~F7`me)|8UEOGw=}dT~w9V^9kKT>L zhZWpcFY{igPSX$kl~7MGMx*zHF+z54FXYYaXy?VqZkppINg)-N_v8<<+7qONOL-wF z=Ky^&pVdw84$>vG%w3%@(SYfe?g^iP>8c~v{et$^R_EIaw}Bf72t?(uz#2pQ$JzXd z)Y7%S-aLKpGPn4uzJ~4aTi#838o)VXd)8kM>Eqhd_me`lrS3R|jdP-8L$EFDZM!bd zAF@-4#eq-@#WULrX#ZmFXI&C@@kNwsR?AZ^PJ}*;gCuMdSV0~51eP?lNi{#iy>nKI z{yt|gAI<&xu=UZ(z}QXB@Q1z!s+F<&9VX66PXZSF3`pf1YPlvl<37s&Gn5loccCkM zX)JU2n)c!}{O+P>;s8)d(7)TVJ#c#3@%(A@x()LV@ z@aWM)oRN;>r+>75gK%!gyQN?Bkyt(lI0ds{eS@%M$gac-Q%FJ`s^SE#4e6+YX_s+I*jj ztlB#J9G?QWyG83)865ez*Xgwu0Fq^A-)^f;8&c5Lf!a^?xw@j!GI zI`P@Z*Ed&J5;PxH6cQXbJ1;`CincVAL}@`wzz<>mZn1FGkP)oAE|Go>T~~&@c#X1r z0mYAZs^7=EepuH&0h$MN};lrV2g zlT;Zo%c#IodU_UPP3^oM+{cdwet`8Ar%B+0<-&RSe5I@ z;4ls^<|hXjV88LFWSyO#sqUBkg6 z$e0&SZF>ZSr*_&t?42Fj4TIeh9(S`T7OcyyKV|NCL0b_dlQAVFt>TShH zAYb!cTX6o6DdEFi1eOPUra{kdmeVjRSLaY*;3(z$aaZhQE74OMQQJGA7sD=wy1w&0 z+;QLQ&0(%l@1|q_qa21~&DTp`?JcK{fKz5)+xXK&dxAJ;j3OSe(rRo?8rGJKnv8T9 ztKC^-oDD1#r2;;3C5b@wResriS1GmbWRMTM(E+?)-IL$gw^4{1CpNTDP9WhLH-hZ3 zTbAfF*=(ygnKsd$8ga+Ba7z!4IKuI7ycXBk~w)Tf{v8UZB{>Fv|?Z&1{75CqaSz0Ak2SZ)$g(qK% zhN=A{3j>ea(}x9?O~pwmL-GAsn{b2NU48*phEr(#lADW8E~r;&B*lsX*bdB$${Ie< zDKOD(>wRTx8rotvWja0d99zH%-CXogm$7?i9bkXC>*{bA?@QI#wjP~$B32YM&3bd- z)+J!;KX)NX=Iq5v92Sx<5mZDSe5oBzF(Xz@gVoUN5t!gR24ZScJDK6+yb$v{E^9OX zWw#IHG!22Qg!Wt{5)(GyO%P~n{K|ziCbYYhisPOJ9&q8tH_7q?9HAYHFI3pA1X{>) zf)b}QQ`Orl($;sIJ>5Lt~xGDv#+S}VJGAQ*j&xhq5u9s&_Hq?{bhv(O4 zRkz3Xs_9z~v-90*#1RUcW;c&c-{T~2{S0TikGrDUH{%)Q9tLK zOnwf;rW*{u>JAE<6J9Imd1O?uV_#b{oiDgdjb=5)ME@&?%;poH4(7|ayZG)3zgbk= z(1^-g|9I-!0w?76xUYR>-TZdtJU`?kq7@=!|3d)b>0_+`82d$n`{b*4bLP; z1ePVRh`)Lg?*})`UTWkf>!WKo{=Sr48K*Iq-@7V(X=l|szVtJbko%Ne5(2QL`hXC& z^=yx|?w7zM|1=D2sxzvea;z_H+KCpOK*|K)gx;f2iSNf_Y%fN93YfUx)P)i+FxBY~ zy#Lu3a)w`l0o`lE#$kd}TqRvn9N+o3_iM1+wH!6CrD)Qht^`-_cs8)_vWJ-lh3`zmuW&h z1=MS`%YHK>js?tYE)k?C$o;}U(D~wSi+qPYW5*+yoEdGumufTlhc*;H9ocWG!Jc`q)>H}Zjm9a}_PjCFwY!S2 z=1F`1XzdvkojYFQT!r)#Put?TwE85k`_XQ(LjP729!yHuM7eF`P_}qpM~KGUltIBq zrRVFn;u$joKjJY$%cq?rW~UTN457x;@i>Zdd^`D$WJU{YJ&q>|S#hnY`o1f2wc}tw z8KXoUy6maRHo0(cuzthd&@p-^R+rER^WYD#;V+t1K)uY9cZQ*1%tsg{nbF2RfaoJ$ zJX0=t5fPIE_qNKF-!{mIuR2}>r_nEdB=I`1a`gRwHI#0Z`M?}ZhBwld54)SCB zII%~yOU6hL^9eJsju`Ds2i-yb@~Ids_e;G2jXG(gV#&So6~xsGN%$)G&!dXKIX5#R zL!65cQwf6uA3rdmRoklKU^uq0s`m^%a&E=H2GNk=^l}K5m_O1WRV%^+_U-5X7;Ns^ zbaPX81OLDtrITEmjMG3qXIXf^%|LWzc4>b8OL4g!R?&nBzwqEtyaFl`=57S9DI0z{ zb0n;&^thV?C7nX}UE5aRvF9Jg`-1xhtl=;M^l!jV8EC9R!)BeKBCCYDRCRUt_YyH9 zUpbsrO;w@iY)ckG1z&JkCW{Y}I)3UP&%>rEQqu5Vn^ib@Z`q%a<+j}4W%&iW3$qI# z%@do#iRk3ytxe+hgn~fS!MDO6x7K6ihRcfydJ+QL3n=(>uHIvOrY&R#!mq;)hpLpf z_s_WUzaHh)0Gur+L)4Dd^im!EB)EQ}jd!;{*tky#1{?_S2UwqEBHb)og~8`YFR!n! zFS_8APlfeiu8+&EK>rF=XS3 zoG@ks0O8qsjJ;W=r>eIvY&V!lOmtawx$1oka;{cmf#&wS{&AE5>d6*gwc> z5Gs?@I`hMf4F_hHx4kQ$IeI=}GPI};-&G%Gi@|aQdV8}*zup$b?eUO*Tt}RKeR57@FeE;%w=CNy=?a44FQ!ftpiX!LcjEf6+{s7x znQIgfX?HQC`#qtrq>N6R`z{4%o2{O-!`7;P89E&F4&pQFhbe!GbbaelaMvI}(+=cA z)b(Af-i)cjGYoJ3SZs4=GXuY94l^I>5fu$O@vECVcU}nYN9<)SQDs)yt$$%jyb&>NLYDrm5 z*Ec;f->{lS|MQ)wW6L#(Yn*JvfExl7TO=D(j9apY*9d%xlHuwfS(+XsFeHP#tx{5q zwhq5Bj(efKp$00;sG+vswjuL#jl#GesoigSzIhh&=Dk8ZJ1b8a_mrO-ezD_*j%MOY zuK5ZGO7YrdpM1?1MjC~1iJ2jCt_c4W5ykzxFU^uvd;Mu~H>5s`tS-kBet#4IcowlS4F7#ztu9mI{@MY!D81*bUlfY4tC^pqb2|af=&Z(Pc?&{C#-bf6ja3^+ z&SdaqMvvVP{u|MXcU`n^Zs7PeGi)&QK=P|-Z9PSf7Xtz;OPp-{&F_SLk_&PT8A|1H ztZTt*H0@c1LniEJarO~VwaraC-E3Uy`q_YrNCW#;!jd~deC=my(rR>A!T_D7mh6_u zyi*;yuQPiHOr3%lQUJ}$&S*s?p{#(i9dEqA_z2)mCo8`L;hAVt9efU-`1Wt0qUX|K zK_A)CX^ReBJ&A4{pP>}!xvg(#cSyJ-ZbN>wA$Q_vD;kGtU+91J%%DWwcf+r!a%YD9 z#+)=`kBs<{_#~*(OUg=Ms!{Wb?dtVU8EN$G14ef&$0uopI{P&X&lMjCsPyb^?d)~o)bQIN zXKuBPC-(j11vWZYa= zGn!kqV~niEqpFgF7eQU=jgFViJ&e&{oS|D@wYS~D4)3>0L|R*+giZm}ONxm;LZG7f z4P~BE1wEeOz6@#^u3#7uO3fL}6G^?DcVb@4;vDkLPS0rAKh&DsP=F?n{>WgzgzasV zs2{pwtaL2lOz>}z68bpN_x3B%N2nU8RJK08tqA>-QiNx_P*N(NCan~^xM5pnni=0b zKc`V6<#E+Q(^29AUo5#Ua-B_hJU&rHoQL|!KGQL`S?^7Uo`3a1ZVrAULB=P7A5>^( zvGz57RU{w1R1{IE{>Duuhtg_FkLtbvO?0$Bh)F%|)d3#h@|>F*BSl>+`22&Z(Tst&tX#Zazl<}U-)4ZUF`I?Ql-n=Y!@n8M54W%ro;w!=KeB!h8(jD!W8+3wv~b?)J-#aVHCwrt_fd!e1q~BLhh;yLdXI zP7(N@WMpQT%%J+%nFOJVzUWm=x{Gkyi-+y?eC#yaehoX`bXS6_10k`kdo ziah{dTNIEAt1CBi5i2g5HBr^x7>6{2;PuDfrA+5~$Jw8>ZHckQi8JZKi@jE)UPeR* zxD*f{IJe;~EC%Eg=dfg2D?$0j+4?sXbW4LKE0@_k=7&4T8~W~_U?`LE{ysiQp4lV% z_I-C^TV;doMt{mjMg|Q#I^d&zUF`RPwr}day>O=RVzyOZfw(nC?Ao|4wzd1)i|f=? zsoUvgf)R!Co4dIOdaJzOCd1G7^&boLhnIYJz0t@RV(k9?*Z!?0c(}h>vxpR#MB?#&)OHh)b-}O z0+oNzM_?kokP@czQHkH5_J2M6$;==@W2C8OJbn=-Z9>@An5|5GrXv%sukMJ9g=1!E zO>QEVIodLsKRew*G8eAg7%rsG$6^ST)v(rnt-&1_>+_?=>#1+8{M_uX4S+M!*lit<%&O!>EN>0%=d=|nH+vXG`#7m~ zmJGv$-baK{6q~9?t1^<#PZf4mVrIT0=0t+Rl+smdN|YH|cY2PN0lLvY#0!e!3{Z0jw$} z_);vYek;L#bHMbEVWw2a{WgW{04+SNd!V>sIx*(Yz_gU{6Sv5ODegF5g)mWe6=r%% zQ~cDo^FQ4}4ZJRDfNHNw1C2t~@_;%NaE6PJH8CWoSIsWKMpM8c~Si9pyA7O%FEPu{`& z$R@Zw-oDAgZ^L?;6OSb|Lc#*l1;Cq)5RmpYNPtZ2M5FkM!}}zzL0pRBg(_tnwYAmN z)mseTm|Q6CHVht?1l4wGhjDuCzS&#eeyrrCjb=-%a+K&F#k3lRyh_=b;NB(;Y09=v z789WJSkB%-PC3M_H%=@zTvUGG$=(D99D#O_Y)-Y5ImabiFg zjZFd%)7%`h{}8|W0mDGW-8x#^%8R+rsoL)PiB>K_(}q}`7oU&K#v7UBZ{<(XdwClu zKJu&;;e9Lu!ED45+X&$^XFp#N1nkpeE-7Hx81ny8jvNmqCN`HZSrOSPpA|9xM+hYu zbY~+Ah}JJ)(j7K~J7C^gXHjImHltodA97K%&ng+16ALsNC4#ozab>;{-{n5Ds?gSD zllIXpoN|9tQxDJzq2w8u7-aU&{pV=1Kmel|H@1@dr_2-rDPNH_Cm0QsMQ_N3t5C+E#@Oz>X*>w*oq*zuv)3plsh^-SYyck4uq`bsoG@H5~ zu`zoUxm%BlDQY!ZMDnU>A#?ibdzcv8b6RD^Ud;yr?Ts1@1+~IYGfCic`6#k;a#CRu z6uo8}Y+}oj8OF%pZXG+~{aaId2%f)suVCq#9|X`Vb|dYWzc198(YA>@Ech*V`5jIa z2{#b|g#QK>5OG!8D=t_V$N5zY3do@01K0pnnF##8Vo_iSH>^7o3gPUa)lg*wsqdDY zNADqHXHoA*=zw~L9BXL$5f0S5#g(l`vf$@>8+v(t<#?EEJR%f@#jq1pon*y^ z4B?z9uJ5Vwh+)k#cODzX3o0`(uR))@@VHqY6byG}8AoXa=h3wcC}w6#u?B(~3?nzU zrNjZuGZ^%Ojh~%l6gly@8b|KNz%PG2v zlk`qMppZlhGcAbS66D)k7Yfw(0>ojWBxZ={;sPc#E}b*%!c=`~BE9{JKruTSv_0_h1F>fIosJ2}}LQVq1 zY}jdPLPloW`vQ@}Ds~0{QK)P#-NG*d{VU98T9vr3aA?MX{u~Z&-9k=cKarfEh;k;e zf47_!u-jY7&_9oR#~%R9IX?wgF41(?@EuGi3=sLn{i6^P$hV%P*Nc&20{}!7e`8xX z@#xb?E?qs|y4k~!3#rX*!&}eyO07Y=qxF^O=3nu?z5Z(RNMze5mTM9FY*d#{F+r<&4)pe z60P8sXa=Y;4RD$JG+fK|gP6qUo_@d^#HY=T7JJIq1q3mvkB>ayc^oSzq*Cmj6XncxYINm6*!Ck z23_-R-87Cy-ZEWo!Vk8BK^D956d4@tI)T!O+hPWD4Ggd(i{EC$^UFmixpcBuUOX5@ z!aHwQw%aA2;NXho2pi0#Z2(EzcMZnB?C8_lLDeH*phn_76FDp^2zp8Q33&6Jku;3w76)^$gXNm+3okQSnIPAnuYET@pW#fz zALBdhfI&g89B0Z0fGqW1QMT%dNk^O&JnOuW`(iHq_g-FJfj;!jV)iTO>tkSTSJGks z{L$=D&uZb?ayx9XwhfxX+*jR0)ZIfDSKA$8jUkZjEx+>!Z;X*TNz^QkE^PiVe5fA6 zru>RFbU&yJ!fJM(P-4iV=3@%|t=d&wH zGVa4$u&SP^G9ueZc-PU^%X_yX^UubGtGhC2!8b-IcoG;-n31Vh!}m)9o9Lq9Hb&oC z3~S;coZv};b9j5;OB+0aj+%9-(Bb{O|)1&UK)bPSi%e-5Kn^yX=>sy&%~T=I?o zBq8G8Eh#3KFE8+E>)=-*CrZt`?vkvUo?4Dt(&LDx96K)z9;wko^Iy#iHck0~Z}R#m zp(<|!?n2cRO{YoY0^dlaL!PvFh~*cMs495bqI@P}CxSPrZgeE2jAlhK-4^8HsR=dY z_P0x_RhUw~2wWItOa)m(L3|^<67w2tJo^PdTa#acF_kMry)|#sn>+6c_BXuthXX0D zS8H~|U1g2US9rM@qfY@3G0_428Bt7V=>nx1)s3}FsS_QsH*o}U&N$TKZx)QIA1JoP z^OLpNW=CWX$Rrta-%zc*-^KtKocQXewP&;f2zm664h}GE%{tC1NXx9yHlk{e)DXV*GE$w+PvKTo5YCE&n_d>*Ldp{T3Vkad_ z>K&5`;^bS@xi+qk3f5{}L>wr{2wsImTxT9o56Uz=h%-8Pa4b{g*NkKoU!i6%uD0qk zr%yz>mZ_kUuiyXv!iB91Q3+1j46^S_JqXZx4hIZGQ8FtNu{>@Bg?dpzfoqlaqx!4) ziV~S7vWU9`^G~Q2F%?~u!!_@}@1|&&?|lyHSj{X9x`BD#>=4daEc^=N)tEc{$OY6S zouh)Rh)}Uq|1a~4PDsX6ZTpb_f0@Gnrpf%9FY>?im;b+|NAAT7;u`Hoj}G;{;J@k6 O2+9f?@(r?9;r|cyZ;S8% literal 0 HcmV?d00001 diff --git a/src/main/webapp/publish/kakao_allimtalk_intro.html b/src/main/webapp/publish/kakao_allimtalk_intro.html index 78c034d9..2b18ffc1 100644 --- a/src/main/webapp/publish/kakao_allimtalk_intro.html +++ b/src/main/webapp/publish/kakao_allimtalk_intro.html @@ -23,161 +23,7 @@ - - - -
-
-

QUICK
MENU

-

QUICK

- - -
-
- - - - +
@@ -186,295 +32,510 @@
    -
  • +
  • -
  • +
- -
+ +
-

알림톡 소개

+

카카오톡 소개

-
-
-

알림톡이란?

+
    +
  • +
  • +
+ + +
+
+
+

알림톡이란?

+
+ + +
+
+
+
+ +
+ +
+ 핸드폰 + + +
    +
  • + 카카오톡 전용 기업 메시지 서비스  “알림톡” +
  • +
  • +

    1

    +

    1,000자 이내 텍스트 및 이미지 전송 가능

    +
  • +
  • +

    2

    +

    문자 메시지 대비 65% 이상 저렴

    +
  • +
  • +

    3

    +

    + 카톡 채널아이디를 추가하지 않은 이용자에게도
    + 전화번호만 있으면 메시지 전송 가능 +

    +
  • +
  • +

    4

    +

    발송실패 시 자동으로 문자 대체 발송

    +
  • +
  • +

    5

    +

    카카오 인증마크를 통해 신뢰도 높은 메시지 발송

    +
  • +
  • +

    6

    +

    발신자 브랜드의 이미지 및 신뢰도 상승 효과 달성

    +
  • +
+
+ + +
+
+
+

문자 VS 알림톡

+
+
+ +
+
+
+

문자

+
+ 문자 +

18원

+
+
+

VS

+
+

알림톡

+
+ 카카오 +

6.9원

+
+
+
+

문자 대비 65% 저렴

+
+
+
+
+
+

문자

+
+ 문자 +

90Byte

+
+
+

VS

+
+

알림톡

+
+ 카카오 +

1,000글자

+
+
+
+

바이트(byte)에 관계없이 무조건 1,000자(한/영) 발송

+
+
+
+ +
+
-
-
-
-
+ +
+
+

알림톡 활용 방법

+
-
- -
- 핸드폰 - - -
    -
  • - 카카오톡 전용 기업 메시지 서비스  “알림톡” -
  • -
  • -

    1

    -

    1,000자 이내 텍스트 및 이미지 전송 가능

    -
  • -
  • -

    2

    -

    문자 메시지 대비 65% 이상 저렴

    -
  • -
  • -

    3

    -

    - 카톡 채널아이디를 추가하지 않은 이용자에게도
    - 전화번호만 있으면 메시지 전송 가능 -

    -
  • -
  • -

    4

    -

    발송실패 시 자동으로 문자 대체 발송

    -
  • -
  • -

    5

    -

    카카오 인증마크를 통해 신뢰도 높은 메시지 발송

    -
  • -
  • -

    6

    -

    발신자 브랜드의 이미지 및 신뢰도 상승 효과 달성

    -
  • +
    +
    +
    +
    + +
    +
      + + + + + +
    + +
    금융,보험
    +
    기관,단체
    +
    여행
    +
    예약,예약
    +
    배송,배달
    +
    안내,이벤트
    - -
    -
    -
    -

    문자 VS 알림톡

    -
    -
    +
    -
    -
    -
    -

    문자

    -
    - 문자 -

    18원

    -
    -
    -

    VS

    -
    -

    알림톡

    -
    - 카카오 -

    6.9원

    -
    -
    -
    -

    문자 대비 65% 저렴

    -
    + +
    +
    +

    서비스 이용 방법

    +
    + +
    +
    +
    +
    + +
    +
    +
    +

    STEP 01

    -
    -
    -
    -

    문자

    -
    - 문자 -

    90Byte

    -
    +
    + -

    VS

    -
    -

    알림톡

    -
    - 카카오 -

    1,000글자

    -
    -
    -
    -

    바이트(byte)에 관계없이 무조건 1,000자(한/영) 발송

    +
    +
    +

    + 카카오톡 채널을 먼저 가입해주신 다음
    + 비즈니스 채널 전환 신청을 해주세요. +

    +

    + ※ 가입 후 카카오톡 채널 설정에서
    + 공개, 검색허용 설정을 하셔야 합니다. +

    +
    카카오톡 채널 가입하러 가기 아이콘
    - +
    + +
    +
    +
    +

    STEP 03

    +
    +
    + +
    +
    +

    + 알림톡 발송을 위해서는 사용하실 템플릿(메시지 내용)에 + 대한 카카오의 승인이 반드시 필요합니다. + 템플릿을 작성하신 후 심사요청을 진행해주세요. +

    +

    + ※ 템플릿 승인까지 최대 3일 소요 +

    +
    +
    알림톡 템플릿 등록하러 가기 아이콘
    +
    +
    +
    +
    +

    STEP 04

    +
    +
    + +
    +
    +

    + 템플릿이 승인되셨다면 문자온 알림톡을
    + 통해 메시지를 발송하실 수 있습니다. +

    +
    +
    알림톡 전송하기 아이콘
    +
    +
    +
    + + + +
    + + +
    +
    +

    유의사항 아이콘유의사항

    +
    +
      +
    • - 한글, 영문 구분 없이 최대 1,000자까지 전송 가능합니다.
    • +
    • - 알림톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.
    • +
    • - 알림톡에서 허용하는 영리목적이 없는 정보성 메시지에 해당하는지 여부는 스팸 관련 정보통신망법 안내서를 꼭 참고하시길 바랍니다.
    • +
    • (주문/예약 확인, 결제 내역, 배송 현황 메시지 등이 이에 해당하며 구독자 대상의 뉴스레터나 일반적인 공지문은 포함되지 않습니다.)
    • +
    • + 스팸 관련 정보통신망법 안내서 바로가기 +
    • +
    • - 부고, 답례, 초대장 등은 정보성 메시지가 아니므로 알림톡으로 보내실 수 없습니다.
    • +
    + - -
    -
    -

    알림톡 활용 방법

    + +
    +
    +
    +

    친구톡이란?

    +
    + + +
    +
    +
    +
    + +
    + +
    + 핸드폰 + +
      +
    • + 카카오톡 전용 기업 메시지 서비스  “알림톡” +
    • +
    • +

      1

      +

      광고성 메시지 발송 가능(광고 표기 및 수신거부 안내 포함)

      +
    • +
    • +

      2

      +

      채널 친구 추가된 사용자라면 누구에게나 발송 가능

      +
    • +
    • +

      3

      +

      + 1,000자 이내 텍스트 및 이미지 전송 가능 +

      +
    • +
    • +

      4

      +

      맞춤형 메시지 및 쿠폰, 링크 버튼 제공 가능

      +
    • +
    • +

      5

      +

      문자 메시지 대비 O % 이상 저렴

      +
    • +
    • +

      6

      +

      발송실패 시 대체문자 발송 기능 지원

      +
    • +
    • +

      7

      +

      클릭률/도달률 분석을 통한 마케팅 효율 강화

      +
    • +
    • +

      8

      +

      브랜드 친화적인 이미지 커스터마이징 가능

      +
    • +
    +
    + + +
    +
    +
    +

    알림톡 VS 친구톡

    +
    +
    + +
    +
    +
    알림톡
    +
    +
      +
    • 전화번호 보유자
    • +
    • 정보성 (예 : 주문, 예약, 안내 등)
    • +
    • 텍스트, 이미지 등
    • +
    • 최대 5개
    • +
    • 사전 승인 필요
    • +
    • 6.9원
    • +
    • 1,000자
    • +
    • 로고, 아이콘 형식만 가능
    • +
    +
    +
    + +
    +
    VS
    +
      +
    • 전송대상
    • +
    • 발송목적
    • +
    • 메세지 형태
    • +
    • 버튼 사용
    • +
    • 템플릿 승인
    • +
    • 비용
    • +
    • 길이제한
    • +
    • 이미지
    • +
    +
    + +
    +
    친구톡
    +
    +
      +
    • 채널 친구
    • +
    • 광고 및 마케팅성(예 : 이벤트, 쿠폰 등)
    • +
    • 텍스트, 기본이미지, 와이드 이미지형 등
    • +
    • 최대 5개
    • +
    • 별도 승인 없음 야간 발송 제한(20:50 ~ 익일 08:00)
    • +
    • 0.0원 ~ 0.0원
    • +
    • 1,000자
    • +
    • 가능
    • +
    +
    +
    +
    +
    +
    -
    -
    -
    -
    + +
    +
    +

    친구톡 유형

    +
    -
    -
      - - - - - - +
      +
      +
      +
      + +
        +
      • +
        텍스트형
        + +

        한/영 구분없이 1,000자 + 버튼 최대 5개

        +
      • +
      • +
        기본 이미지형
        + +

        한/영 구분없이 400자 + 이미지 1장 + 버튼 최대 5개

        +
      • +
      • +
        와이드 이미지형
        + +

        한/영 구분없이 76자 + 이미지 1장 + 버튼 최대 1개

        +
      -
      금융,보험
      -
      기관,단체
      -
      여행
      -
      예약,예약
      -
      배송,배달
      -
      안내,이벤트
    -
    - - -
    -
    -

    서비스 이용 방법

    -
    - -
    -
    -
    -
    - -
    -
    -
    -

    STEP 01

    -
    -
    - -
    -
    -

    - 카카오톡 채널을 먼저 가입해주신 다음
    - 비즈니스 채널 전환 신청을 해주세요. -

    -

    - ※ 가입 후 카카오톡 채널 설정에서
    - 공개, 검색허용 설정을 하셔야 합니다. -

    -
    -
    카카오톡 채널 가입하러 가기 아이콘
    -
    + +
    +
    +

    서비스 이용 방법

    -
    -
    -

    STEP 02

    -
    -
    - -
    -
    -

    - 가입하신 카카오톡 채널의 채널ID(채널이름)를
    - 채널ID 등록 메뉴에 등록해주세요. -

    -
    -
    채널 ID 등록하러 가기 아이콘
    -
    + +
    +
    +
    -
    - -
    -
    -
    -

    STEP 03

    -
    -
    - -
    -
    -

    - 알림톡 발송을 위해서는 사용하실 템플릿(메시지 내용)에 - 대한 카카오의 승인이 반드시 필요합니다. - 템플릿을 작성하신 후 심사요청을 진행해주세요. -

    -

    - ※ 템플릿 승인까지 최대 3일 소요 -

    -
    -
    알림톡 템플릿 등록하러 가기 아이콘
    -
    -
    -
    -
    -

    STEP 04

    -
    -
    - -
    -
    -

    - 템플릿이 승인되셨다면 문자온 알림톡을
    - 통해 메시지를 발송하실 수 있습니다. -

    -
    -
    알림톡 전송하기 아이콘
    -
    + +
      +
    • +
      STEP 01
      + +

      카카오톡 채널 가입

      + 카카오톡 채널 생성을 위한
      계정이 없으시다면, 카카오에서
      카카오톡 비즈니스 회원가입을
      먼저 + 진행해주세요.
      +
    • +
    • +
      STEP 02
      + +

      채널 ID 등록하러 가기

      + 가입하신 카카오톡 채널의 채널 ID(채널이름)를 채널 ID 등록 메뉴에 등록해주세요. +
    • +
    • +
      STEP 03
      + +

      친구톡 전송

      + 친구톡은 별도의 템플릿 심사 절차 없이, 즉시 발송 가능합니다. +
    • +
    + + +
    - -
    - 알림톡 이용가이드 보기 알림톡 이용가이드 화살표 + +
    +
    +

    유의사항 아이콘유의사항

    +
    +
      +
    • - (광고) 표기 여부는 선택 가능하나 , (광고)표기 해제에 따른 법령상 의무사항을 미 준수시에는 메시지 발송이 중단될 수 있습니다.
    • +
    • - 광고성 친구톡 메시지에는 “(광고) 표시 및 수신거부 방식”이 표시되며, 대체 문자의 경우에는 “(광고) 문구 및 080 무료수신거부 번호”가 자동으로 포함됩니다.
    • +
    • - 광고성 메시지의 발송 가능 시간은 08:00 ~ 20:50(한국시간) 입니다.
    • +
    • - 친구톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.
    • +
    • - 카카오정책 및 심의기준을 반드시 준수하여야 합니다.
    • +
    + - -
    -
    -

    유의사항 아이콘유의사항

    -
    -
      -
    • - 한글, 영문 구분 없이 최대 1,000자까지 전송 가능합니다.
    • -
    • - 알림톡 발송 실패에 따른 대체문자 발송 시 문자요금(단문, 장문, 그림)이 보유 캐시에서 차감됩니다.
    • -
    • - 알림톡에서 허용하는 영리목적이 없는 정보성 메시지에 해당하는지 여부는 스팸 관련 정보통신망법 안내서를 꼭 참고하시길 바랍니다.
    • -
    • (주문/예약 확인, 결제 내역, 배송 현황 메시지 등이 이에 해당하며 구독자 대상의 뉴스레터나 일반적인 공지문은 포함되지 않습니다.)
    • -
    • - 스팸 관련 정보통신망법 안내서 바로가기 -
    • -
    • - 부고, 답례, 초대장 등은 정보성 메시지가 아니므로 알림톡으로 보내실 수 없습니다.
    • -
    -
    - +
    -
    - +
    + \ No newline at end of file diff --git a/src/main/webapp/publish/layout/_header.html b/src/main/webapp/publish/layout/_header.html index 902b11dc..d82eed8e 100644 --- a/src/main/webapp/publish/layout/_header.html +++ b/src/main/webapp/publish/layout/_header.html @@ -156,8 +156,9 @@
    From 6b38e070bc415ca54b57f11c244b6b2531244b09 Mon Sep 17 00:00:00 2001 From: subsub Date: Wed, 9 Jul 2025 12:14:54 +0900 Subject: [PATCH 08/23] =?UTF-8?q?=EB=9D=84=EC=96=B4=EC=93=B0=EA=B8=B0=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/kakao_allimtalk_intro.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/publish/kakao_allimtalk_intro.html b/src/main/webapp/publish/kakao_allimtalk_intro.html index 2b18ffc1..6bee1ac7 100644 --- a/src/main/webapp/publish/kakao_allimtalk_intro.html +++ b/src/main/webapp/publish/kakao_allimtalk_intro.html @@ -454,7 +454,7 @@
  • 텍스트형
    -

    한/영 구분없이 1,000자 + 버튼 최대 5개

    +

    한/영 구분없이 1,000자 + 버튼 최대 5개

  • 기본 이미지형
    From de78c382dde80518ddc7c5341bcecee25228eb41 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Wed, 9 Jul 2025 12:56:06 +0900 Subject: [PATCH 09/23] =?UTF-8?q?gitignore=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 89e9faf6..3d148367 100644 --- a/.gitignore +++ b/.gitignore @@ -96,6 +96,9 @@ local.properties # End of https://www.gitignore.io/api/eclipse +# gemini +.gemini/ + # Maven target/ pom.xml.tag From e3020f5e04b01f5c3a3c87572f541a4ae7b26419 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Thu, 10 Jul 2025 14:25:49 +0900 Subject: [PATCH 10/23] =?UTF-8?q?=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EB=B0=9C?= =?UTF-8?q?=EC=86=A1=20=EC=8B=9C=20=EC=8A=A4=ED=8C=B8=EC=B9=98=ED=81=AC=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp index 2ad606ab..288ae3c3 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp @@ -3333,13 +3333,16 @@ function fnTestSend(){ return false; } + console.log('imgFilePath : ', imgFilePath); //그림문자가 아닌데 본문 비어있는지 확인 if(imgFilePath.length == 0) { if(msgForm.smsTxtArea.value == "") { alert("문자 내용을 입력해 주세요."); return false; } - }else{//문자내용에 스팸 단어 포함여부 체크 + } + /* else{//문자내용에 스팸 단어 포함여부 체크 + console.log(' : spam데이터 : '); var spmData = new FormData(msgForm); url = "/web/mjon/msgdata/selectSpamTxtChkAjax.do"; @@ -3383,7 +3386,7 @@ function fnTestSend(){ error: function (e) { alert("시스템 오류가 발생하였습니다."); console.log("ERROR : ", e); return false;} }); - } + } */ //단문 장문 그림(몇장인지) 판별하기 - 발송금액 계산 From 6c42092e440336483153bc0d8aa9d47d4067fd5c Mon Sep 17 00:00:00 2001 From: subsub Date: Fri, 11 Jul 2025 18:28:36 +0900 Subject: [PATCH 11/23] =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=EB=AA=85=20?= =?UTF-8?q?=EB=84=98=EC=96=B4=EA=B0=80=EB=8A=94=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/popupLayer.css | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/webapp/publish/css/popupLayer.css b/src/main/webapp/publish/css/popupLayer.css index 25a9f1b7..01345959 100644 --- a/src/main/webapp/publish/css/popupLayer.css +++ b/src/main/webapp/publish/css/popupLayer.css @@ -1063,6 +1063,7 @@ .template_choice_popup .kakao_template_list .kakao_template_info dl{display: flex; padding: 6px 0;} .template_choice_popup .kakao_template_list .kakao_template_info dt{position: relative; width: 76px; margin: 0 13px 0 0;} .template_choice_popup .kakao_template_list .kakao_template_info dt::after{position: absolute; content: " "; width: 1px; height: 12px; background-color: #d5d5d5; right: 0; top: 2px;} +.template_choice_popup .kakao_template_list .kakao_template_info dd{width:calc(100% - 76px);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;} .template_choice_popup .kakao_template_list .kakao_template_info dd span{color: #002c9a; font-weight: bold;} .template_choice_popup .kakao_template_list .cf_text{width: calc(100% - 31px); margin: 10px 0 30px 0; font-size: 14px; color: #666; text-align: right;} From 00dea76c5c18ed7a290fc232a39f734d99c43653 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Wed, 16 Jul 2025 17:39:19 +0900 Subject: [PATCH 12/23] =?UTF-8?q?=EA=B0=9C=EC=A0=95=EC=95=BD=EA=B4=80=2020?= =?UTF-8?q?24=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + src/main/webapp/WEB-INF/jsp/web/com/webCommonFooter.jsp | 2 +- src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp | 2 +- src/main/webapp/publish/layout/_header.html | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 3d148367..5512880c 100644 --- a/.gitignore +++ b/.gitignore @@ -201,3 +201,4 @@ fabric.properties rebel.xml /mvnw /mvnw.cmd +/.gemini.zip diff --git a/src/main/webapp/WEB-INF/jsp/web/com/webCommonFooter.jsp b/src/main/webapp/WEB-INF/jsp/web/com/webCommonFooter.jsp index 0a766c42..459e67ff 100644 --- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonFooter.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonFooter.jsp @@ -27,7 +27,7 @@ function footerSiteLinkPageTwoGo (){
    diff --git a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp index d5a05e8c..6a9f7fc6 100644 --- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp @@ -1666,7 +1666,7 @@ function actionLogin_end(){
    • 공지사항
    • -
    • 이용약관
    • +
    • 이용약관
    • 자주하는 질문
    • 1:1 문의
    • 불편신고
    • diff --git a/src/main/webapp/publish/layout/_header.html b/src/main/webapp/publish/layout/_header.html index d82eed8e..74325529 100644 --- a/src/main/webapp/publish/layout/_header.html +++ b/src/main/webapp/publish/layout/_header.html @@ -255,7 +255,7 @@
      • 공지사항
      • -
      • 이용약관
      • +
      • 이용약관
      • 자주하는 질문
      • 1:1 문의
      • 불편신고
      • From 4cea36d8fa7b4003d417f5d9f05f0c9822ccd55d Mon Sep 17 00:00:00 2001 From: subsub Date: Fri, 18 Jul 2025 18:16:46 +0900 Subject: [PATCH 13/23] =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20>=20?= =?UTF-8?q?=EB=8C=80=EC=B2=B4=EB=AC=B8=EC=9E=90=20=EC=9E=A5=EB=AC=B8,=20?= =?UTF-8?q?=EB=8B=A8=EB=AC=B8,=20=ED=8F=AC=ED=86=A0=EB=AC=B8=EC=9E=90=20?= =?UTF-8?q?=EC=9D=BC=20=EA=B2=BD=EC=9A=B0=20textarea=20height=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/content.css | 11 +- src/main/webapp/publish/js/content.js | 29 +++-- .../webapp/publish/kakao_friendtalk_send.html | 104 ++++++++++++++++-- 3 files changed, 125 insertions(+), 19 deletions(-) diff --git a/src/main/webapp/publish/css/content.css b/src/main/webapp/publish/css/content.css index fdbe1745..ee304cf7 100644 --- a/src/main/webapp/publish/css/content.css +++ b/src/main/webapp/publish/css/content.css @@ -1771,12 +1771,17 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px .kakaotalksend_cont .kakao_wrap .send_right .phone .phoneIn .text_preview{height: 78%;} .kakaotalksend_cont .kakao_wrap .kakao_template_text {display: flex;justify-content: space-between;} .kakaotalksend_cont .kakao_wrap .put_right .btn_popup_wrap{margin: 0 0 5px 0;} -.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left{height: 234px;} +.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left{position:relative;height: 234px;} .kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.long{height: 305px;} +.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.photo{height: 385px;} .kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left textarea{padding:0 5px;} -.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.short textarea{height: calc(100% - 105px);} -.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.long textarea{height: 220px;} +.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.short textarea{height: calc(100% - 82px);} +.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.short .ad_txt+textarea{height: calc(100% - 105px);} +.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.long textarea{height: calc(100% - 61px);} +.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.long .ad_txt+textarea{height: calc(100% - 86px);} +.kakaotalksend_cont .kakao_wrap .replace_send_wrap .put_left.photo .ad_txt+textarea{height: calc(100% - 184px);} .kakaotalksend_cont .kakao_wrap .replace_send_wrap .sub_ad_text p{padding:3px 10px 0 0;} + .kakaotalksend_cont .kakao_wrap .button_type_wrap{display: flex; border: 1px solid #e5e5e5; border-radius: 5px; padding: 10px 20px; margin: 10px 0 0 0;} .kakaotalksend_cont .kakao_wrap .button_type_wrap dt{width: 110px; font-weight: 400; padding: 8px 0 0 0;} .kakaotalksend_cont .kakao_wrap .button_type_wrap .button_type_input{width: 483px;} diff --git a/src/main/webapp/publish/js/content.js b/src/main/webapp/publish/js/content.js index 921b9966..fa03c0e8 100644 --- a/src/main/webapp/publish/js/content.js +++ b/src/main/webapp/publish/js/content.js @@ -542,16 +542,27 @@ $(document).ready(function () { "height": "calc(100% - 18px)" }); + $(".friend_talk_wrap .replace_send_wrap .put_left").each(function(idx, itm){ + if($(itm).is(".short") == true){ + //단문일 경우 + $(itm).find("textarea").css({ + "height": "calc(100% - 79px)" + }); + }else if($(itm).is(".photo") == true){ + //포토문자일 경우 + $(itm).find("textarea").css({ + "height": "calc(100% - 146px)" + }); + }else{ + // 장문일 경우 + $(itm).find("textarea").css({ + "height": "calc(100% - 59px)" + }); + } + + }) + - if($(".friend_talk_wrap .replace_send_wrap .put_left").is(".short") == true){ - $(".friend_talk_wrap .replace_send_wrap textarea").css({ - "height": "calc(100% - 79px)" - }); - }else{ - $(".friend_talk_wrap .replace_send_wrap textarea").css({ - "height": "calc(100% - 59px)" - }); - } } else { $(".ad_txt, .sub_ad_text p,.friend_talk_title,.kakao_block_text").show(); diff --git a/src/main/webapp/publish/kakao_friendtalk_send.html b/src/main/webapp/publish/kakao_friendtalk_send.html index 63ddff4b..52ae646c 100644 --- a/src/main/webapp/publish/kakao_friendtalk_send.html +++ b/src/main/webapp/publish/kakao_friendtalk_send.html @@ -778,15 +778,13 @@
          -
          -

          (광고)

          -
          +
          +

          (광고)

          +
          +
          -
          -

          무료거부 0808800858

          -

          0 / @@ -805,7 +803,99 @@

          - +

          * 현재 [단문] 0건 발송 가능합니다.

          + + + + 내용 + +
          +
          + +
            + + +
            +

            (광고)

            +
            + +
            +
            +

            + 0 / + + 90byte +

            + 장문 +
            +
            +
            +
            + +
            + +
            +
            + +
            +

            * 현재 [단문] 0건 발송 가능합니다.

            + + + + 내용 + +
            +
            + +
              +
            • +
              + thumb1 +
              + + +
            • +
            • +
              + thumb1 +
              + + +
            • +
            • +
              + thumb1 +
              + + +
            • +
            + + +
            +

            (광고)

            +
            + +
            +
            +

            + 0 / + + 90byte +

            + 그림 +
            +
            +
            +
            + +
            + +
            +
            + +
            +

            * 현재 [단문] 0건 발송 가능합니다.

            From 5bd4c8ba3723f935cc92e25984ec02b0a5234fcd Mon Sep 17 00:00:00 2001 From: ijunho Date: Mon, 21 Jul 2025 11:08:40 +0900 Subject: [PATCH 14/23] =?UTF-8?q?=EC=9B=B9=EC=84=9C=EB=B2=84=20=EA=B5=90?= =?UTF-8?q?=EC=B2=B4,=20=EC=84=B8=EC=85=98=EC=84=9C=EB=B2=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80,=20=EB=B3=B8=EC=9D=B8=EC=9D=B8=EC=A6=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20=20-=20http1.1=20->=20http2.0=20=EC=9B=B9=EC=84=9C?= =?UTF-8?q?=EB=B2=84=20=EA=B5=90=EC=B2=B4=20=20-=20valkey=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=20-=20=EB=B3=B8=EC=9D=B8=EC=9D=B8=EC=A6=9D=20?= =?UTF-8?q?=EB=AA=A8=EB=93=88=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 53 +- .../com/cmm/session/HttpSessionConfig.java | 39 + .../cert/phone/service/CertPhoneService.java | 7 +- .../cert/phone/service/MberCertPhoneVO.java | 83 +- .../cert/phone/service/impl/CertPhoneDAO.java | 9 + .../service/impl/CertPhoneServiceImpl.java | 37 + .../phone/web/CertPhoneWebController.java | 45 ++ .../fax/addr/web/FaxAddrGroupController.java | 38 +- .../let/mjo/addr/web/AddrGroupController.java | 37 +- .../itn/let/mjo/test/web/TestController.java | 8 +- .../let/uat/uia/web/EgovLoginController.java | 146 ++-- .../let/uat/uia/web/EgovMypageController.java | 102 ++- .../itn/let/uat/uia/web/KmcCertChecker.java | 752 +++--------------- .../egovProps/globals_dev.properties | 16 +- .../egovProps/globals_local.properties | 7 +- .../egovProps/globals_prod.properties | 7 +- .../let/cert/MjonCertPhone_SQL_mysql.xml | 37 +- .../jsp/web/addr/AddrGroupListAjax.jsp | 4 +- .../jsp/web/cop/bbs/include/mberSecession.jsp | 4 +- .../jsp/web/fax/addr/FaxAddrGroupListAjax.jsp | 4 +- .../WEB-INF/jsp/web/login/findUserId.jsp | 4 +- .../web/login/humanPageAuthenticatedPage.jsp | 4 +- .../jsp/web/login/test_usrCheckTerms.jsp | 4 +- .../WEB-INF/jsp/web/login/usrCheckTerms.jsp | 33 +- .../jsp/web/login/usrCheckTerms_back2.jsp | 4 +- .../jsp/web/user/mberCompanyInfoChange.jsp | 4 +- .../WEB-INF/jsp/web/user/mberInfoChange.jsp | 4 +- .../WEB-INF/jsp/web/user/mberInfoIndex.jsp | 4 +- .../WEB-INF/jsp/web/user/mberSecession.jsp | 4 +- .../WEB-INF/jsp/web/user/mberSecureLogin.jsp | 4 +- .../jsp/web/user/sendNumberManageRegister.jsp | 4 +- .../web/user/sendNumberManage_bak220502.jsp | 4 +- src/main/webapp/WEB-INF/web.xml | 10 +- src/main/webapp/publish/js/common.js | 18 + .../publish/kmc/kmcis_web_sample_step02.jsp | 4 +- 35 files changed, 688 insertions(+), 856 deletions(-) create mode 100644 src/main/java/itn/com/cmm/session/HttpSessionConfig.java create mode 100644 src/main/java/itn/let/cert/phone/web/CertPhoneWebController.java diff --git a/pom.xml b/pom.xml index 7a7f5633..fd1e0201 100644 --- a/pom.xml +++ b/pom.xml @@ -54,28 +54,8 @@ - mvn2 - https://repo1.maven.org/maven2/ - - true - - - true - - - - egovframe - https://www.egovframe.go.kr/maven/ - - true - - - false - - - - egovframe2 - http://maven.egovframe.kr:8080/maven/ + maven-public + http://nexus.iten.co.kr:9999/repository/maven-public/ true @@ -83,12 +63,6 @@ false - - - jitpack.io - https://jitpack.io - - @@ -568,7 +542,28 @@ provided - + + + + + + org.springframework.session + spring-session + 1.3.1.RELEASE + + + redis.clients + jedis + 2.9.0 + + + + org.springframework.data + spring-data-redis + 1.8.11.RELEASE + + + diff --git a/src/main/java/itn/com/cmm/session/HttpSessionConfig.java b/src/main/java/itn/com/cmm/session/HttpSessionConfig.java new file mode 100644 index 00000000..43fbb1db --- /dev/null +++ b/src/main/java/itn/com/cmm/session/HttpSessionConfig.java @@ -0,0 +1,39 @@ +package itn.com.cmm.session; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; + +@Configuration +@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800) // 세션 timeout 설정 +public class HttpSessionConfig { + + @Value("#{globalSettings['Globals.valkey.ip']}") + private String ip; + + @Value("#{globalSettings['Globals.valkey.port']}") + private int port; + + @Value("#{globalSettings['Globals.valkey.password']}") + private String password; + + @Bean + public JedisConnectionFactory connectionFactory() { + JedisConnectionFactory factory = new JedisConnectionFactory(); + factory.setHostName(this.ip); + factory.setPort(this.port); + factory.setPassword(this.password); + factory.afterPropertiesSet(); + return factory; + } + + @Bean + public RedisTemplate redisTemplate() { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory()); + return template; + } +} diff --git a/src/main/java/itn/let/cert/phone/service/CertPhoneService.java b/src/main/java/itn/let/cert/phone/service/CertPhoneService.java index 42b80989..90ae82de 100644 --- a/src/main/java/itn/let/cert/phone/service/CertPhoneService.java +++ b/src/main/java/itn/let/cert/phone/service/CertPhoneService.java @@ -2,7 +2,10 @@ package itn.let.cert.phone.service; import java.util.List; +import javax.servlet.http.HttpServletRequest; + import itn.let.mail.service.StatusResponse; +import itn.let.uat.uia.service.AuthCertVO; import itn.let.uat.uia.web.SendLogVO; public interface CertPhoneService { @@ -34,9 +37,9 @@ public interface CertPhoneService { public StatusResponse selectSysMsgLogCheck(MberCertPhoneVO mberCertPhoneVO); + public MberCertPhoneVO selectCertUrlCode(MberCertPhoneVO mberCertPhoneVO) throws Exception; - - + public StatusResponse insertCertLog(HttpServletRequest request) throws Exception; diff --git a/src/main/java/itn/let/cert/phone/service/MberCertPhoneVO.java b/src/main/java/itn/let/cert/phone/service/MberCertPhoneVO.java index 81eb9ae2..249ef0f2 100644 --- a/src/main/java/itn/let/cert/phone/service/MberCertPhoneVO.java +++ b/src/main/java/itn/let/cert/phone/service/MberCertPhoneVO.java @@ -34,8 +34,17 @@ public class MberCertPhoneVO extends UserDefaultVO{ private String checkNo; - - + private String trUrl; + private String urlCode; + private String url; + private String host; + private String name = ""; + private String phoneNo = ""; + private String phoneCorp = ""; + private String birthDay = ""; + private String gender = ""; + private String nation = "0"; + private String plusInfo = ""; public String getMberId() { @@ -74,6 +83,76 @@ public class MberCertPhoneVO extends UserDefaultVO{ public void setCheckNo(String checkNo) { this.checkNo = checkNo; } + public String getUrlCode() { + return urlCode; + } + public void setUrlCode(String urlCode) { + this.urlCode = urlCode; + } + public String getUrl() { + return url; + } + public void setUrl(String url) { + this.url = url; + } + public String getHost() { + return host; + } + public void setHost(String host) { + this.host = host; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public String getPhoneNo() { + return phoneNo; + } + public void setPhoneNo(String phoneNo) { + this.phoneNo = phoneNo; + } + public String getPhoneCorp() { + return phoneCorp; + } + public void setPhoneCorp(String phoneCorp) { + this.phoneCorp = phoneCorp; + } + public String getBirthDay() { + return birthDay; + } + public void setBirthDay(String birthDay) { + this.birthDay = birthDay; + } + public String getGender() { + return gender; + } + public void setGender(String gender) { + this.gender = gender; + } + public String getNation() { + return nation; + } + public void setNation(String nation) { + this.nation = nation; + } + public String getPlusInfo() { + return plusInfo; + } + public void setPlusInfo(String plusInfo) { + this.plusInfo = plusInfo; + } + public String getTrUrl() { + return trUrl; + } + public void setTrUrl(String trUrl) { + this.trUrl = trUrl; + } + + + + diff --git a/src/main/java/itn/let/cert/phone/service/impl/CertPhoneDAO.java b/src/main/java/itn/let/cert/phone/service/impl/CertPhoneDAO.java index da5e107a..2c9d022c 100644 --- a/src/main/java/itn/let/cert/phone/service/impl/CertPhoneDAO.java +++ b/src/main/java/itn/let/cert/phone/service/impl/CertPhoneDAO.java @@ -6,6 +6,7 @@ import org.springframework.stereotype.Repository; import egovframework.rte.psl.dataaccess.EgovAbstractDAO; import itn.let.cert.phone.service.MberCertPhoneVO; +import itn.let.uat.uia.service.AuthCertVO; @Repository("CertPhoneDAO") public class CertPhoneDAO extends EgovAbstractDAO { @@ -38,4 +39,12 @@ public class CertPhoneDAO extends EgovAbstractDAO { public int countSysMsgLogCheck(MberCertPhoneVO mberCertPhoneVO) { return (int) select("mberCertPhoneVO.countSysMsgLogCheck", mberCertPhoneVO); } + + public MberCertPhoneVO selectCertUrlCode(MberCertPhoneVO mberCertPhoneVO) { + return (MberCertPhoneVO) select("certPhoneDAO.selectCertUrlCode", mberCertPhoneVO); + } + + public void insertCertLog(AuthCertVO authCertVO) throws Exception { + insert("certPhoneDAO.insertCertLog", authCertVO); + } } diff --git a/src/main/java/itn/let/cert/phone/service/impl/CertPhoneServiceImpl.java b/src/main/java/itn/let/cert/phone/service/impl/CertPhoneServiceImpl.java index 2fae49c5..3f32264b 100644 --- a/src/main/java/itn/let/cert/phone/service/impl/CertPhoneServiceImpl.java +++ b/src/main/java/itn/let/cert/phone/service/impl/CertPhoneServiceImpl.java @@ -1,17 +1,25 @@ package itn.let.cert.phone.service.impl; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; +import java.util.Date; import java.util.List; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import egovframework.rte.fdl.cmmn.EgovAbstractServiceImpl; +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import itn.com.cmm.LoginVO; +import itn.com.cmm.util.IpUtil; +import itn.com.utl.fcc.service.EgovStringUtil; import itn.let.cert.phone.service.CertPhoneService; import itn.let.cert.phone.service.MberCertPhoneVO; import itn.let.mail.service.StatusResponse; +import itn.let.uat.uia.service.AuthCertVO; @Service("CertPhoneService") public class CertPhoneServiceImpl extends EgovAbstractServiceImpl implements CertPhoneService { @@ -99,6 +107,35 @@ public class CertPhoneServiceImpl extends EgovAbstractServiceImpl implements Cer return new StatusResponse(HttpStatus.OK, "", LocalDateTime.now()); } + @Override + public MberCertPhoneVO selectCertUrlCode(MberCertPhoneVO mberCertPhoneVO) { + return certPhoneDAO.selectCertUrlCode(mberCertPhoneVO); + } + + @Override + public StatusResponse insertCertLog(HttpServletRequest request) throws Exception { + try { + //로그인 권한정보 불러오기 + LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + + //KMC 본인인증 로그 insert + AuthCertVO authCertVO = new AuthCertVO(); + authCertVO.setMberId(userId); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + authCertVO.setCertDate(sdf.format(new Date())); + authCertVO.setCertType("본인인증 시도"); + authCertVO.setCertIpaddr(IpUtil.getClientIP(request)); + + certPhoneDAO.insertCertLog(authCertVO); + } catch (Exception e) { + System.out.println("본인인증 시도 로그 실패"); + } + + return new StatusResponse(HttpStatus.OK, "", LocalDateTime.now()); + } + + } diff --git a/src/main/java/itn/let/cert/phone/web/CertPhoneWebController.java b/src/main/java/itn/let/cert/phone/web/CertPhoneWebController.java new file mode 100644 index 00000000..3aeccb1f --- /dev/null +++ b/src/main/java/itn/let/cert/phone/web/CertPhoneWebController.java @@ -0,0 +1,45 @@ +package itn.let.cert.phone.web; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.ModelAndView; + +import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; +import itn.com.cmm.LoginVO; +import itn.com.utl.fcc.service.EgovStringUtil; +import itn.let.cert.phone.service.CertPhoneService; +import itn.let.cert.phone.service.MberCertPhoneVO; +import itn.let.mail.service.StatusResponse; +import itn.let.mjo.msg.service.MjonMsgVO; +import itn.let.mjo.msgdata.service.MjonMsgDataService; +import itn.let.mjo.msgdata.service.MjonMsgReturnVO; +import itn.let.uat.uia.service.AuthCertVO; +import itn.let.uat.uia.web.SendLogVO; + +@Controller +public class CertPhoneWebController { + + @Resource(name = "CertPhoneService") + private CertPhoneService certPhoneService; + + @RequestMapping(value = {"/web/cert/log/insertCertLog.do"}) + public ResponseEntity insertCertLog(HttpServletRequest request) throws Exception { + + + + + + + return ResponseEntity.ok().body(new StatusResponse(HttpStatus.OK, certPhoneService.insertCertLog(request), LocalDateTime.now())); + } +} \ No newline at end of file diff --git a/src/main/java/itn/let/fax/addr/web/FaxAddrGroupController.java b/src/main/java/itn/let/fax/addr/web/FaxAddrGroupController.java index ae341a0d..2031477c 100644 --- a/src/main/java/itn/let/fax/addr/web/FaxAddrGroupController.java +++ b/src/main/java/itn/let/fax/addr/web/FaxAddrGroupController.java @@ -21,6 +21,7 @@ import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.utl.fcc.service.EgovStringUtil; +import itn.let.cert.phone.service.MberCertPhoneVO; import itn.let.fax.addr.service.FaxAddrGroupService; import itn.let.fax.addr.service.FaxAddrGroupVO; import itn.let.fax.addr.service.FaxAddrService; @@ -52,6 +53,9 @@ public class FaxAddrGroupController { @Resource(name = "mberManageService") private EgovMberManageService mberManageService; + @Resource(name = "KmcCertChecker") + private KmcCertChecker kmcCertCheck; + /** * 팩스 주소록 그룹 리스트 @@ -544,21 +548,25 @@ public class FaxAddrGroupController { modelAndView.setViewName("jsonView"); try { - KmcCertChecker kmcCertCheck = new KmcCertChecker(); - - // mberId null일경우 ""로 - mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId())); - - // kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - } else { - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } - - AuthCertVO certVO = kmcCertCheck.authCertCheckEight(serverNm + "/web/cop/kmc/authRequestAddrSubmitAjax.do", - mberManageVO.getMberId()); +// KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// +// // mberId null일경우 ""로 +// mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId())); +// +// // kmc 본인인증 실/개발 서버 구분 +// String serverNm = ""; +// if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { +// serverNm = request.getScheme() + "://219.240.88.15:8095"; +// } else { +// serverNm = request.getScheme() + "://www.munjaon.co.kr"; +// } + + + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAddrSubmitAjax.do"); + mberCertPhoneVO.setPlusInfo(mberManageVO.getMberId()); + + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); modelAndView.addObject("tr_cert", certVO.getTr_cert()); modelAndView.addObject("tr_url", certVO.getTr_url()); diff --git a/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java b/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java index d024024b..4ecb759b 100644 --- a/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java +++ b/src/main/java/itn/let/mjo/addr/web/AddrGroupController.java @@ -25,6 +25,7 @@ import itn.com.cmm.EgovMessageSource; import itn.com.cmm.LoginVO; import itn.com.cmm.util.RedirectUrlMaker; import itn.com.utl.fcc.service.EgovStringUtil; +import itn.let.cert.phone.service.MberCertPhoneVO; import itn.let.mjo.addr.service.AddrGroupService; import itn.let.mjo.addr.service.AddrGroupVO; import itn.let.mjo.addr.service.AddrService; @@ -72,6 +73,9 @@ public class AddrGroupController { @Resource(name = "mberManageService") private EgovMberManageService mberManageService; + @Resource(name = "KmcCertChecker") + private KmcCertChecker kmcCertCheck; + /** * 주소록 그룹 리스트 * @param addrGroupVO @@ -933,21 +937,24 @@ public class AddrGroupController { modelAndView.setViewName("jsonView"); try { - KmcCertChecker kmcCertCheck = new KmcCertChecker(); - - // mberId null일경우 ""로 - mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId())); - - // kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - } else { - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } - - AuthCertVO certVO = kmcCertCheck.authCertCheckEight(serverNm + "/web/cop/kmc/authRequestAddrSubmitAjax.do", - mberManageVO.getMberId()); +// KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// +// // mberId null일경우 ""로 +// mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId())); +// +// // kmc 본인인증 실/개발 서버 구분 +// String serverNm = ""; +// if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { +// serverNm = request.getScheme() + "://219.240.88.15:8095"; +// } else { +// serverNm = request.getScheme() + "://www.munjaon.co.kr"; +// } + + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAddrSubmitAjax.do"); + mberCertPhoneVO.setPlusInfo(mberManageVO.getMberId()); + + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); modelAndView.addObject("tr_cert", certVO.getTr_cert()); modelAndView.addObject("tr_url", certVO.getTr_url()); diff --git a/src/main/java/itn/let/mjo/test/web/TestController.java b/src/main/java/itn/let/mjo/test/web/TestController.java index a0c0b42e..f052cccc 100644 --- a/src/main/java/itn/let/mjo/test/web/TestController.java +++ b/src/main/java/itn/let/mjo/test/web/TestController.java @@ -894,11 +894,11 @@ public class TestController { serverNm = request.getScheme() + "://munjaon.co.kr"; } - AuthCertVO certVO = kmcCertCheck.authCertCheck(serverNm + "/web/cop/kmc/authRequestAjax.do"); +// AuthCertVO certVO = kmcCertCheck.authCertCheck(serverNm + "/web/cop/kmc/authRequestAjax.do"); - model.addAttribute("tr_cert", certVO.getTr_cert()); - model.addAttribute("tr_url", certVO.getTr_url()); - model.addAttribute("tr_add", certVO.getTr_add()); +// model.addAttribute("tr_cert", certVO.getTr_cert()); +// model.addAttribute("tr_url", certVO.getTr_url()); +// model.addAttribute("tr_add", certVO.getTr_add()); } diff --git a/src/main/java/itn/let/uat/uia/web/EgovLoginController.java b/src/main/java/itn/let/uat/uia/web/EgovLoginController.java index eed122fa..fdc173c5 100644 --- a/src/main/java/itn/let/uat/uia/web/EgovLoginController.java +++ b/src/main/java/itn/let/uat/uia/web/EgovLoginController.java @@ -252,6 +252,10 @@ public class EgovLoginController { @Resource(name = "CertIpService") private CertIpService certIpService; + @Resource(name = "KmcCertChecker") + private KmcCertChecker kmcCertCheck; + + private static final Logger logger = LoggerFactory.getLogger(MjonMsgDataController.class); /* 문자온 사용자 로그인 시작 */ @@ -319,21 +323,21 @@ public class EgovLoginController { // 핸드폰인증만 사용할 시 if (joinSettingVO.getJoinCertType().equals("M")) { - KmcCertChecker kmcCertCheck = new KmcCertChecker(); - - // kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - }else if(request.getRequestURL().toString().contains("www.")){ - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } - else { - serverNm = request.getScheme() + "://munjaon.co.kr"; - } - - AuthCertVO certVO = kmcCertCheck.authCertCheck(serverNm + "/web/cop/kmc/authRequestAjax.do"); - +// KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// +// String serverNm = request.getScheme() + "://" + request.getServerName(); +// if(request.getServerPort() != 80 +// && request.getServerPort() != 443) { +// serverNm += ":" + request.getServerPort(); +// } +// +// AuthCertVO certVO = kmcCertCheck.authCertCheck(serverNm + "/web/cop/kmc/authRequestAjax.do"); +// + + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAjax.do"); + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); + model.addAttribute("tr_cert", certVO.getTr_cert()); model.addAttribute("tr_url", certVO.getTr_url()); model.addAttribute("tr_add", certVO.getTr_add()); @@ -363,19 +367,29 @@ public class EgovLoginController { ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("jsonView"); - KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// KmcCertChecker kmcCertCheck = new KmcCertChecker(); // kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - } else { - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } +// String serverNm = ""; +// if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { +// serverNm = request.getScheme() + "://219.240.88.15:8095"; +// } else { +// serverNm = request.getScheme() + "://www.munjaon.co.kr"; +// } + + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestAjax.do"); + mberCertPhoneVO.setName(mberManageVO.getMberNm()); + mberCertPhoneVO.setPhoneNo(mberManageVO.getMoblphonNo()); + mberCertPhoneVO.setGender(mberManageVO.getSexdstnCode()); + mberCertPhoneVO.setNation(mberManageVO.getNationality()); + mberCertPhoneVO.setBirthDay(mberManageVO.getBirth()); + + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); - AuthCertVO certVO = kmcCertCheck.authCertCheckTwo(serverNm + "/web/cop/kmc/authRequestAjax.do", - mberManageVO.getMberNm(), mberManageVO.getMoblphonNo(), mberManageVO.getSexdstnCode(), - mberManageVO.getNationality(), mberManageVO.getBirth()); +// AuthCertVO certVO = kmcCertCheck.authCertCheckTwo(serverNm + "/web/cop/kmc/authRequestAjax.do", +// mberManageVO.getMberNm(), mberManageVO.getMoblphonNo(), mberManageVO.getSexdstnCode(), +// mberManageVO.getNationality(), mberManageVO.getBirth()); System.out.println("++++++++++++ 세션체크222 ::: " + (MberManageVO) session.getAttribute("mberSession")); @@ -3991,26 +4005,42 @@ public class EgovLoginController { // modelAndView.addObject("status", "fail"); try { - KmcCertChecker kmcCertCheck = new KmcCertChecker(); - - // mberId null일경우 ""로 - mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId())); - - // kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if (request.getServerName().contains("119.193.215.98") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://119.193.215.98:8095"; - } else { - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } - String authRUrl = serverNm + mberManageVO.getAuthRUrl(); +// KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// +// // mberId null일경우 ""로 +// mberManageVO.setMberId(EgovStringUtil.isNullToString(mberManageVO.getMberId())); +// +// // kmc 본인인증 실/개발 서버 구분 +// String serverNm = ""; +// if (request.getServerName().contains("119.193.215.98") || request.getServerName().contains("localhost")) { +// serverNm = request.getScheme() + "://119.193.215.98:8095"; +// } else { +// serverNm = request.getScheme() + "://www.munjaon.co.kr"; +// } +// String authRUrl = serverNm + mberManageVO.getAuthRUrl(); +// +// AuthCertVO certVO = kmcCertCheck.authCertCheckThree(authRUrl, mberManageVO); +// +// + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/cop/kmc/authRequestFindIdPwAjax.do"); + mberCertPhoneVO.setName(mberManageVO.getMberNm()); + mberCertPhoneVO.setPhoneNo(mberManageVO.getMoblphonNo()); + + String plusInfo = ""; + plusInfo += mberManageVO.getMberId(); + if(StringUtils.isNotEmpty(mberManageVO.getPassword())) + { + plusInfo = plusInfo + ",,," + mberManageVO.getPassword(); + } + mberCertPhoneVO.setPlusInfo(plusInfo); + + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); - AuthCertVO certVO = kmcCertCheck.authCertCheckThree(authRUrl, mberManageVO); - modelAndView.addObject("tr_cert", certVO.getTr_cert()); modelAndView.addObject("tr_url", certVO.getTr_url()); modelAndView.addObject("tr_add", certVO.getTr_add()); - + modelAndView.addObject("result", "success"); } catch (Exception e) { @@ -5386,28 +5416,16 @@ public class EgovLoginController { // 팝업에 넣을 이름과 핸드폰번호 조회 LoginVO KMCInfoVO = loginService.selectKMCInfo(loginVO); - // KMC 팝업 오픈 준비 - KmcCertChecker kmcCertCheck = new KmcCertChecker(); - String mberNm = KMCInfoVO.getMberNm(); - if ("c".equals(KMCInfoVO.getDept())) { - mberNm = KMCInfoVO.getManagerNm(); - } - String birth = KMCInfoVO.getBirth(); - String moblphonNo = KMCInfoVO.getMoblphonNo(); - String sexdstnCode = KMCInfoVO.getSexdstnCode(); - String nationality = KMCInfoVO.getNationality(); - String id = loginVO.getId(); - - // kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if (request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - } else { - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } - - AuthCertVO certVO = kmcCertCheck.authCertCheckFour(serverNm + "/web/cop/kmc/insertIPAjax.do", mberNm, - moblphonNo, sexdstnCode, nationality, birth, id); + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/cop/kmc/insertIPAjax.do"); + mberCertPhoneVO.setName("c".equals(KMCInfoVO.getDept()) ? KMCInfoVO.getManagerNm() : KMCInfoVO.getMberNm()); + mberCertPhoneVO.setBirthDay(KMCInfoVO.getBirth()); + mberCertPhoneVO.setPhoneNo(KMCInfoVO.getMoblphonNo()); + mberCertPhoneVO.setGender(KMCInfoVO.getSexdstnCode()); + mberCertPhoneVO.setNation(KMCInfoVO.getNationality()); + mberCertPhoneVO.setPlusInfo(loginVO.getId()); + + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); modelAndView.addObject("tr_cert", certVO.getTr_cert()); modelAndView.addObject("tr_url", certVO.getTr_url()); @@ -6121,7 +6139,7 @@ public class EgovLoginController { modelAndView.addObject("msg", msg); return modelAndView; - } + } diff --git a/src/main/java/itn/let/uat/uia/web/EgovMypageController.java b/src/main/java/itn/let/uat/uia/web/EgovMypageController.java index dd47e3ed..15e097a9 100644 --- a/src/main/java/itn/let/uat/uia/web/EgovMypageController.java +++ b/src/main/java/itn/let/uat/uia/web/EgovMypageController.java @@ -48,6 +48,7 @@ import itn.let.cert.ip.service.CertIpService; import itn.let.cert.ip.service.CertLoginLogService; import itn.let.cert.ip.service.MberCertIpVO; import itn.let.cert.ip.service.MberCertLoginLogVO; +import itn.let.cert.phone.service.MberCertPhoneVO; import itn.let.fax.user.service.FaxGroupDataVO; import itn.let.fax.user.service.FaxService; import itn.let.kakao.user.sent.service.KakaoSentService; @@ -181,6 +182,9 @@ public class EgovMypageController { @Resource(name = "CertIpService") private CertIpService certIpService; + @Resource(name = "KmcCertChecker") + private KmcCertChecker kmcCertCheck; + /** * 마이페이지 비밀번호 변경 탭 */ @@ -1447,17 +1451,21 @@ public class EgovMypageController { // 요청페이지가 개인정보 변경 펴이지 일경우 if(userManageVO.getUserTy().equals("userInfoCh")){ //System.out.println("휴대폰 인증 ***********************************************"); - KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// +// //kmc 본인인증 실/개발 서버 구분 +// String serverNm = ""; +// if(request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { +// serverNm = request.getScheme() + "://219.240.88.15:8095"; +// }else{ +// serverNm = request.getScheme() + "://www.munjaon.co.kr"; +// } - //kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if(request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - }else{ - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/user/selectKmcMberInfoAjax.do"); + mberCertPhoneVO.setPlusInfo(loginVO.getId()); - AuthCertVO certVO = kmcCertCheck.authCertCheckFive(serverNm + "/web/user/selectKmcMberInfoAjax.do", loginVO.getId()); + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); modelAndView.addObject("certVO", certVO); } @@ -1912,18 +1920,26 @@ public class EgovMypageController { name = loginVO.getManagerNm(); } - KmcCertChecker kmcCertCheck = new KmcCertChecker(); - - //kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if(request.getServerName().contains("119.193.215.98") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://119.193.215.98:8882"; - }else{ - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } +// KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// +// //kmc 본인인증 실/개발 서버 구분 +// String serverNm = ""; +// if(request.getServerName().contains("119.193.215.98") || request.getServerName().contains("localhost")) { +// serverNm = request.getScheme() + "://119.193.215.98:8882"; +// }else{ +// serverNm = request.getScheme() + "://www.munjaon.co.kr"; +// } //AuthCertVO certVO = kmcCertCheck.authCertCheckSix(serverNm + "/web/user/insertPhoneSendNumber.do", mjonMsgVO.getUserId(), mjonMsgVO.getCallFrom(), name); - AuthCertVO certVO = kmcCertCheck.authCertCheckSix(serverNm + "/web/user/selectPhoneNumberCertChkAjax.do", mjonMsgVO.getUserId(), mjonMsgVO.getCallFrom(), "", mjonMsgVO.getMyNameFlag()); + + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/user/selectPhoneNumberCertChkAjax.do"); + mberCertPhoneVO.setName(""); + mberCertPhoneVO.setPhoneNo(mjonMsgVO.getCallFrom()); + mberCertPhoneVO.setPlusInfo(mjonMsgVO.getUserId()+ "§" + mjonMsgVO.getMyNameFlag()); + + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); + modelAndView.addObject("certVO", certVO); /*}else if(mjonMsgVO.getPhmAuthType().equals("02") || mjonMsgVO.getPhmAuthType() == "02") { // ARS @@ -2923,17 +2939,21 @@ public class EgovMypageController { name = userInfo.getManagerNm(); } - KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// +// //kmc 본인인증 실/개발 서버 구분 +// String serverNm = ""; +// if(request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { +// serverNm = request.getScheme() + "://219.240.88.15:8095"; +// }else{ +// serverNm = request.getScheme() + "://www.munjaon.co.kr"; +// } - //kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if(request.getServerName().contains("219.240.88.15") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://219.240.88.15:8095"; - }else{ - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/user/selectMberSecessionAjax.do"); + mberCertPhoneVO.setName(name); - AuthCertVO certVO = kmcCertCheck.authCertCheckSeven(serverNm + "/web/user/selectMberSecessionAjax.do", name); + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); model.addAttribute("certVO", certVO); return "web/user/mberSecession"; @@ -3018,18 +3038,24 @@ public class EgovMypageController { * 보안인증 본인인증 기능추가 * 20241120 원영현 과장 추가 * */ - KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// KmcCertChecker kmcCertCheck = new KmcCertChecker(); +// +// //kmc 본인인증 실/개발 서버 구분 +// String serverNm = ""; +// if(request.getServerName().contains("192.168.0.60") || request.getServerName().contains("localhost")) { +// serverNm = request.getScheme() + "://192.168.0.60:8085"; +// }else{ +// serverNm = request.getScheme() + "://www.munjaon.co.kr"; +// } +// +// System.out.println("@@@ serverNm : " + serverNm); - //kmc 본인인증 실/개발 서버 구분 - String serverNm = ""; - if(request.getServerName().contains("192.168.0.60") || request.getServerName().contains("localhost")) { - serverNm = request.getScheme() + "://192.168.0.60:8085"; - }else{ - serverNm = request.getScheme() + "://www.munjaon.co.kr"; - } + MberCertPhoneVO mberCertPhoneVO = new MberCertPhoneVO(); + mberCertPhoneVO.setTrUrl("/web/user/selectSecurityAuthn.do"); + mberCertPhoneVO.setPlusInfo(loginVO.getId()); + + AuthCertVO certVO = kmcCertCheck.authCertCheck(mberCertPhoneVO, request); - System.out.println("@@@ serverNm : " + serverNm); - AuthCertVO certVO = kmcCertCheck.authCertCheckNine(serverNm + "/web/user/selectSecurityAuthn.do", loginVO.getId()); model.addAttribute("certVO", certVO); } diff --git a/src/main/java/itn/let/uat/uia/web/KmcCertChecker.java b/src/main/java/itn/let/uat/uia/web/KmcCertChecker.java index 3fe6f758..16c2aace 100644 --- a/src/main/java/itn/let/uat/uia/web/KmcCertChecker.java +++ b/src/main/java/itn/let/uat/uia/web/KmcCertChecker.java @@ -2,663 +2,147 @@ package itn.let.uat.uia.web; import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.Map; import java.util.Random; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; + import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import org.springframework.ui.ModelMap; import com.icert.comm.secu.IcertSecuManager; +import itn.let.cert.phone.service.CertPhoneService; +import itn.let.cert.phone.service.MberCertPhoneVO; import itn.let.uat.uia.service.AuthCertVO; import itn.let.uss.umt.service.MberManageVO; +@Component("KmcCertChecker") public class KmcCertChecker { + + @Resource(name = "CertPhoneService") + private CertPhoneService certPhoneService; //회원가입 시 인증수단을 휴대폰 본인인증만 했을 경우 사용 - public AuthCertVO authCertCheck(String trUrl) { - - AuthCertVO certVO = new AuthCertVO(); + public AuthCertVO authCertCheck( + MberCertPhoneVO mberCertPhoneVO + , HttpServletRequest request + ) { + //url 세팅 + mberCertPhoneVO = setMberCertPhoneVO(request, mberCertPhoneVO); //kmc step 01 데이터 - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); + //reqNum은 최대 40byte 까지 사용 가능 + String reqNum = getDay() + getRanNum(); //요청번호 + + String tr_cert = ""; + String cpId = "MJOM1001"; // 회원사ID + String urlCode = mberCertPhoneVO.getUrlCode(); // URL코드 + String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) + String date = getDay(); // 요청일시 + String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 + + +// String name = ""; // 성명 + String name = mberCertPhoneVO.getName(); // 성명 + String phoneNo = mberCertPhoneVO.getPhoneNo(); // 휴대폰번호 + String phoneCorp = mberCertPhoneVO.getPhoneCorp(); // 이동통신사 + if(phoneCorp == null) phoneCorp = ""; + String birthDay = mberCertPhoneVO.getBirthDay(); // 생년월일 + String gender = mberCertPhoneVO.getGender(); // 성별 + if(gender == null) gender = ""; + String nation = mberCertPhoneVO.getNation(); // 내외국인 구분 - 0:내국인, 1:외국인 + String plusInfo = mberCertPhoneVO.getPlusInfo(); // 추가DATA정보 + + + String extendVar = "0000000000000000"; // 확장변수 + //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- - Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; + String tr_url = getDomain(request) + mberCertPhoneVO.getTrUrl();// // 본인인증서비스 결과수신 POPUP URL + String tr_add = "N"; // IFrame사용여부 + + //01. 한국모바일인증(주) 암호화 모듈 선언 + IcertSecuManager seed = new IcertSecuManager(); - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } + //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) + String enc_tr_cert = ""; + tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; + enc_tr_cert = seed.getEnc(tr_cert, ""); - //reqNum은 최대 40byte 까지 사용 가능 - String reqNum = day + randomStr; //요청번호 - - String tr_cert = ""; - String cpId = "MJOM1001"; // 회원사ID - String urlCode = "001003"; // URL코드 - - //kmc 본인인증 실/개발 서버 구분 - if(trUrl.contains("119.193.215.98") || trUrl.contains("localhost")) { - urlCode = "005001"; - } - - String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) - String date = day; // 요청일시 - String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 - String name = ""; // 성명 - String phoneNo = ""; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - if(phoneCorp == null) phoneCorp = ""; - String birthDay = ""; // 생년월일 - String gender = ""; // 성별 - if(gender == null) gender = ""; - String nation = "0"; // 내외국인 구분 - 0:내국인, 1:외국인 - String plusInfo = ""; // 추가DATA정보 - String extendVar = "0000000000000000"; // 확장변수 - //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- + //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) + String hmacMsg = ""; + hmacMsg = seed.getMsg(enc_tr_cert); - String tr_url = trUrl;//"http://www.munjaon.co.kr/web/cop/kmc/authRequestAjax.do"; // 본인인증서비스 결과수신 POPUP URL - String tr_add = "N"; // IFrame사용여부 - - //01. 한국모바일인증(주) 암호화 모듈 선언 - IcertSecuManager seed = new IcertSecuManager(); - - //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) - String enc_tr_cert = ""; - tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; - enc_tr_cert = seed.getEnc(tr_cert, ""); - - //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) - String hmacMsg = ""; - hmacMsg = seed.getMsg(enc_tr_cert); - - //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) - tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); - - certVO.setTr_cert(tr_cert); - certVO.setTr_url(tr_url); - certVO.setTr_add(tr_add); - - return certVO; + //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) + tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); + + AuthCertVO authCertVO = new AuthCertVO(); + + authCertVO.setTr_cert(tr_cert); + authCertVO.setTr_url(tr_url); + authCertVO.setTr_add(tr_add); + + return authCertVO; } - //회원가입 시 인증수단을 ARS, 휴대폰 본인인증 했을 경우 사용 - public AuthCertVO authCertCheckTwo(String trUrl, String mberNm, String moblphonNo, String sexdstnCode, String nationality, String birth) { - - AuthCertVO certVO = new AuthCertVO(); - - //kmc step 01 데이터 - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; - - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } - - //reqNum은 최대 40byte 까지 사용 가능 - String reqNum = day + randomStr; //요청번호 - - String tr_cert = ""; - String cpId = "MJOM1001"; // 회원사ID - String urlCode = "001003"; // URL코드 - //kmc 본인인증 실/개발 서버 구분 - if(trUrl.contains("119.193.215.98") || trUrl.contains("localhost")) { - urlCode = "004001"; - } - String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) - String date = day; // 요청일시 - String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 - String name = mberNm; // 성명 - String phoneNo = moblphonNo; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - if(phoneCorp == null) phoneCorp = ""; - String birthDay = birth; // 생년월일 - String gender = sexdstnCode; // 성별 - if(gender == null) gender = ""; - String nation = nationality; // 내외국인 구분 - 0:내국인, 1:외국인 - String plusInfo = ""; // 추가DATA정보 - String extendVar = "0000000000000000"; // 확장변수 - //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- - - String tr_url = trUrl;//"http://www.munjaon.co.kr/web/cop/kmc/authRequestAjax.do"; // 본인인증서비스 결과수신 POPUP URL - String tr_add = "N"; // IFrame사용여부 - - //01. 한국모바일인증(주) 암호화 모듈 선언 - IcertSecuManager seed = new IcertSecuManager(); - - //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) - String enc_tr_cert = ""; - tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; - enc_tr_cert = seed.getEnc(tr_cert, ""); - - //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) - String hmacMsg = ""; - hmacMsg = seed.getMsg(enc_tr_cert); - - //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) - tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); - certVO.setTr_cert(tr_cert); - certVO.setTr_url(tr_url); - certVO.setTr_add(tr_add); - - return certVO; - } - //아이디 패스워드 찾기 본인인증 - public AuthCertVO authCertCheckThree(String trUrl, MberManageVO mberManageVO) { - - AuthCertVO certVO = new AuthCertVO(); - - //kmc step 01 데이터 - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; - - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } - - //reqNum은 최대 40byte 까지 사용 가능 - String reqNum = day + randomStr; //요청번호 - - String tr_cert = ""; - String cpId = "MJOM1001"; // 회원사ID - String urlCode = mberManageVO.getAuthRUrlCode(); // URL 인증 코드 - //kmc 본인인증 실/개발 서버 구분 - if(trUrl.contains("119.193.215.98") || trUrl.contains("localhost")) { - urlCode = "005002"; - } - String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) - String date = day; // 요청일시 - String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 - String name = mberManageVO.getMberNm(); // 성명 - String phoneNo = mberManageVO.getMoblphonNo(); // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - if(phoneCorp == null) phoneCorp = ""; - String birthDay = ""; // 생년월일 - String gender = ""; // 성별 - if(gender == null) gender = ""; - String nation = "0"; // 내외국인 구분 - 0:내국인, 1:외국인 - String plusInfo = mberManageVO.getMberId(); // 추가DATA정보 - if(StringUtils.isNotEmpty(mberManageVO.getPassword())) - { - plusInfo = plusInfo + ",,," + mberManageVO.getPassword(); - } - String extendVar = "0000000000000000"; // 확장변수 - //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- - - String tr_url = trUrl;//"http://www.munjaon.co.kr/web/cop/kmc/authRequestAjax.do"; // 본인인증서비스 결과수신 POPUP URL - String tr_add = "N"; // IFrame사용여부 - - //01. 한국모바일인증(주) 암호화 모듈 선언 - IcertSecuManager seed = new IcertSecuManager(); - - //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) - String enc_tr_cert = ""; - tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; - enc_tr_cert = seed.getEnc(tr_cert, ""); - - //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) - String hmacMsg = ""; - hmacMsg = seed.getMsg(enc_tr_cert); - - //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) - tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); - - certVO.setTr_cert(tr_cert); - certVO.setTr_url(tr_url); - certVO.setTr_add(tr_add); - - return certVO; - } - - //IP 체크해주기 - public AuthCertVO authCertCheckFour(String trUrl, String mberNm, String moblphonNo, String sexdstnCode, String nationality, String birth, String id) { - - AuthCertVO certVO = new AuthCertVO(); - - //kmc step 01 데이터 - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; - - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } - - //reqNum은 최대 40byte 까지 사용 가능 - String reqNum = day + randomStr; //요청번호 - - String tr_cert = ""; - String cpId = "MJOM1001"; // 회원사ID - String urlCode = "001006"; // URL코드 - //kmc 본인인증 실/개발 서버 구분 - if(trUrl.contains("119.193.215.98") || trUrl.contains("localhost")) { - urlCode = "005003"; - } - String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) - String date = day; // 요청일시 - String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 - String name = mberNm; // 성명 - String phoneNo = moblphonNo; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - if(phoneCorp == null) phoneCorp = ""; - String birthDay = birth; // 생년월일 - String gender = sexdstnCode; // 성별 - if(gender == null) gender = ""; - String nation = nationality; // 내외국인 구분 - 0:내국인, 1:외국인 - String plusInfo = id; // 추가DATA정보 - String extendVar = "0000000000000000"; // 확장변수 - //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- - - String tr_url = trUrl;//"http://www.munjaon.co.kr/web/cop/kmc/authRequestAjax.do"; // 본인인증서비스 결과수신 POPUP URL - String tr_add = "N"; // IFrame사용여부 - - //01. 한국모바일인증(주) 암호화 모듈 선언 - IcertSecuManager seed = new IcertSecuManager(); - - //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) - String enc_tr_cert = ""; - tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; - enc_tr_cert = seed.getEnc(tr_cert, ""); - - //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) - String hmacMsg = ""; - hmacMsg = seed.getMsg(enc_tr_cert); - - //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) - tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); - - certVO.setTr_cert(tr_cert); - certVO.setTr_url(tr_url); - certVO.setTr_add(tr_add); - - return certVO; - } - - //마이페이지 휴대폰 변경 기능 본인인증에 사용 - public AuthCertVO authCertCheckFive(String trUrl, String id) { - - AuthCertVO certVO = new AuthCertVO(); - - //kmc step 01 데이터 - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; - - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } - - //reqNum은 최대 40byte 까지 사용 가능 - String reqNum = day + randomStr; //요청번호 - - String tr_cert = ""; - String cpId = "MJOM1001"; // 회원사ID - String urlCode = "001009"; // URL코드 - //kmc 본인인증 실/개발 서버 구분 - if(trUrl.contains("119.193.215.98") || trUrl.contains("localhost")) { - urlCode = "005005"; - } - String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) - String date = day; // 요청일시 - String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 - String name = ""; // 성명 - String phoneNo = ""; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - if(phoneCorp == null) phoneCorp = ""; - String birthDay = ""; // 생년월일 - String gender = ""; // 성별 - if(gender == null) gender = ""; - String nation = ""; // 내외국인 구분 - 0:내국인, 1:외국인 - String plusInfo = id; // 추가DATA정보 - String extendVar = "0000000000000000"; // 확장변수 - //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- - - String tr_url = trUrl;//"http://www.munjaon.co.kr/web/cop/kmc/authRequestAjax.do"; // 본인인증서비스 결과수신 POPUP URL - String tr_add = "N"; // IFrame사용여부 - - //01. 한국모바일인증(주) 암호화 모듈 선언 - IcertSecuManager seed = new IcertSecuManager(); - - //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) - String enc_tr_cert = ""; - tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; - enc_tr_cert = seed.getEnc(tr_cert, ""); - - //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) - String hmacMsg = ""; - hmacMsg = seed.getMsg(enc_tr_cert); - - //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) - tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); - - certVO.setTr_cert(tr_cert); - certVO.setTr_url(tr_url); - certVO.setTr_add(tr_add); - - return certVO; - } - - // 마이페이지 발신번호 관리 > 발신번호 등록 시 사용 - public AuthCertVO authCertCheckSix(String trUrl, String id, String moblphonNo, String mberNm, String myNameFlag) { - - AuthCertVO certVO = new AuthCertVO(); - - //kmc step 01 데이터 - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; - - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } - - //reqNum은 최대 40byte 까지 사용 가능 - String reqNum = day + randomStr; //요청번호 - - String tr_cert = ""; - String cpId = "MJOM1001"; // 회원사ID - String urlCode = "001007"; // URL코드 - //kmc 본인인증 실/개발 서버 구분 - if(trUrl.contains("119.193.215.98") || trUrl.contains("localhost")) { - urlCode = "006005"; - } - String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) - String date = day; // 요청일시 - String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 - String name = mberNm; // 성명 - String phoneNo = moblphonNo; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - if(phoneCorp == null) phoneCorp = ""; - String birthDay = ""; // 생년월일 - String gender = ""; // 성별 - if(gender == null) gender = ""; - String nation = ""; // 내외국인 구분 - 0:내국인, 1:외국인 - String plusInfo = id + "§" + myNameFlag; // 추가DATA정보 - String extendVar = "0000000000000000"; // 확장변수 - //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- - - String tr_url = trUrl;//"http://www.munjaon.co.kr/web/cop/kmc/authRequestAjax.do"; // 본인인증서비스 결과수신 POPUP URL - String tr_add = "N"; // IFrame사용여부 - - //01. 한국모바일인증(주) 암호화 모듈 선언 - IcertSecuManager seed = new IcertSecuManager(); - - //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) - String enc_tr_cert = ""; - tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; - enc_tr_cert = seed.getEnc(tr_cert, ""); - - //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) - String hmacMsg = ""; - hmacMsg = seed.getMsg(enc_tr_cert); - - //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) - tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); - - certVO.setTr_cert(tr_cert); - certVO.setTr_url(tr_url); - certVO.setTr_add(tr_add); - - return certVO; - } - - //마이패이지 회원탈퇴 > 본인인증으로 회원탈퇴에 사용 - public AuthCertVO authCertCheckSeven(String trUrl, String mberNm) { - - AuthCertVO certVO = new AuthCertVO(); - - //kmc step 01 데이터 - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; - - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } - - //reqNum은 최대 40byte 까지 사용 가능 - String reqNum = day + randomStr; //요청번호 - - String tr_cert = ""; - String cpId = "MJOM1001"; // 회원사ID - String urlCode = "001010"; // URL코드 - //kmc 본인인증 실/개발 서버 구분 - if(trUrl.contains("119.193.215.98") || trUrl.contains("localhost")) { - urlCode = "005006"; - } - String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) - String date = day; // 요청일시 - String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 - String name = mberNm; // 성명 - String phoneNo = ""; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - if(phoneCorp == null) phoneCorp = ""; - String birthDay = ""; // 생년월일 - String gender = ""; // 성별 - if(gender == null) gender = ""; - String nation = ""; // 내외국인 구분 - 0:내국인, 1:외국인 - String plusInfo = ""; // 추가DATA정보 - String extendVar = "0000000000000000"; // 확장변수 - //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- - - String tr_url = trUrl;//"http://www.munjaon.co.kr/web/cop/kmc/authRequestAjax.do"; // 본인인증서비스 결과수신 POPUP URL - String tr_add = "N"; // IFrame사용여부 - - //01. 한국모바일인증(주) 암호화 모듈 선언 - IcertSecuManager seed = new IcertSecuManager(); - - //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) - String enc_tr_cert = ""; - tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; - enc_tr_cert = seed.getEnc(tr_cert, ""); - - //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) - String hmacMsg = ""; - hmacMsg = seed.getMsg(enc_tr_cert); - - //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) - tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); - - certVO.setTr_cert(tr_cert); - certVO.setTr_url(tr_url); - certVO.setTr_add(tr_add); - - return certVO; - } - - //아이디 패스워드 찾기 본인인증 - public AuthCertVO authCertCheckEight(String trUrl, String idParam) { - - AuthCertVO certVO = new AuthCertVO(); - - //kmc step 01 데이터 - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; - - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } - - //reqNum은 최대 40byte 까지 사용 가능 - String reqNum = day + randomStr; //요청번호 - - String tr_cert = ""; - String cpId = "MJOM1001"; // 회원사ID - String urlCode = "001012"; // URL코드 - //kmc 본인인증 실/개발 서버 구분 - if(trUrl.contains("119.193.215.98") || trUrl.contains("localhost")) { - urlCode = "005008"; - } - String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) - String date = day; // 요청일시 - String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 - String name = ""; // 성명 - String phoneNo = ""; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - if(phoneCorp == null) phoneCorp = ""; - String birthDay = ""; // 생년월일 - String gender = ""; // 성별 - if(gender == null) gender = ""; - String nation = "0"; // 내외국인 구분 - 0:내국인, 1:외국인 - String plusInfo = idParam; // 추가DATA정보 - String extendVar = "0000000000000000"; // 확장변수 - //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- - - String tr_url = trUrl;//"http://www.munjaon.co.kr/web/cop/kmc/authRequestAjax.do"; // 본인인증서비스 결과수신 POPUP URL - String tr_add = "N"; // IFrame사용여부 - - //01. 한국모바일인증(주) 암호화 모듈 선언 - IcertSecuManager seed = new IcertSecuManager(); - - //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) - String enc_tr_cert = ""; - tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; - enc_tr_cert = seed.getEnc(tr_cert, ""); - - //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) - String hmacMsg = ""; - hmacMsg = seed.getMsg(enc_tr_cert); - - //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) - tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); - - certVO.setTr_cert(tr_cert); - certVO.setTr_url(tr_url); - certVO.setTr_add(tr_add); - - return certVO; + private String getDomain(HttpServletRequest request) { + String serverNm = request.getScheme() + "://" + request.getServerName(); + if(request.getServerPort() != 80 + && request.getServerPort() != 443) { + serverNm += ":" + request.getServerPort(); } - - - // 마이페이지 보안인증 - public AuthCertVO authCertCheckNine(String trUrl, String id) { - - AuthCertVO certVO = new AuthCertVO(); - - //kmc step 01 데이터 - //날짜 생성 - Calendar today = Calendar.getInstance(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - String day = sdf.format(today.getTime()); - - Random ran = new Random(); - //랜덤 문자 길이 - int numLength = 6; - String randomStr = ""; - - for (int i = 0; i < numLength; i++) { - //0 ~ 9 랜덤 숫자 생성 - randomStr += ran.nextInt(10); - } - - //reqNum은 최대 40byte 까지 사용 가능 - String reqNum = day + randomStr; //요청번호 - - String tr_cert = ""; - String cpId = "MJOM1001"; // 회원사ID - String urlCode = "001014"; // URL코드 - //kmc 본인인증 실/개발 서버 구분 - - System.out.println("@@@@@ trUrl : " + trUrl); - if(trUrl.contains("192.168.0.60") || trUrl.contains("localhost")) { - urlCode = "010001"; - } - String certNum = reqNum; // 요청번호 ( 본인인증 요청시 중복되지 않게 생성해야함. (예-시퀀스번호) ) - String date = day; // 요청일시 - String certMet = "M"; // 본인인증방법 - M:휴대폰 본인인증, C:신용카드인증, P:공인인증서 인증 - String name = ""; // 성명 - String phoneNo = ""; // 휴대폰번호 - String phoneCorp = ""; // 이동통신사 - if(phoneCorp == null) phoneCorp = ""; - String birthDay = ""; // 생년월일 - String gender = ""; // 성별 - if(gender == null) gender = ""; - String nation = ""; // 내외국인 구분 - 0:내국인, 1:외국인 - String plusInfo = id; // 추가DATA정보 - String extendVar = "0000000000000000"; // 확장변수 - //End-tr_cert 데이터 변수 선언 --------------------------------------------------------------- - - String tr_url = trUrl;//"http://www.munjaon.co.kr/web/cop/kmc/authRequestAjax.do"; // 본인인증서비스 결과수신 POPUP URL - String tr_add = "N"; // IFrame사용여부 - - //01. 한국모바일인증(주) 암호화 모듈 선언 - IcertSecuManager seed = new IcertSecuManager(); - - //02. 1차 암호화 (tr_cert 데이터변수 조합 후 암호화) - String enc_tr_cert = ""; - tr_cert = cpId +"/"+ urlCode +"/"+ certNum +"/"+ date +"/"+ certMet +"/"+ birthDay +"/"+ gender +"/"+ name +"/"+ phoneNo +"/"+ phoneCorp +"/"+ nation +"/"+ plusInfo +"/"+ extendVar; - enc_tr_cert = seed.getEnc(tr_cert, ""); - - //03. 1차 암호화 데이터에 대한 위변조 검증값 생성 (HMAC) - String hmacMsg = ""; - hmacMsg = seed.getMsg(enc_tr_cert); - - //04. 2차 암호화 (1차 암호화 데이터, HMAC 데이터, extendVar 조합 후 암호화) - tr_cert = seed.getEnc(enc_tr_cert + "/" + hmacMsg + "/" + extendVar, ""); - - certVO.setTr_cert(tr_cert); - certVO.setTr_url(tr_url); - certVO.setTr_add(tr_add); - - return certVO; + return serverNm; } + + private String getDay() { + Calendar today = Calendar.getInstance(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + String day = sdf.format(today.getTime()); + + return day; + } + + private String getRanNum() { + Random ran = new Random(); + //랜덤 문자 길이 + int numLength = 6; + String randomStr = ""; + + for (int i = 0; i < numLength; i++) { + //0 ~ 9 랜덤 숫자 생성 + randomStr += ran.nextInt(10); + } + + return randomStr; + } + + private MberCertPhoneVO setMberCertPhoneVO( + HttpServletRequest request + , MberCertPhoneVO mberCertPhoneVO + ) { + mberCertPhoneVO.setUrl(mberCertPhoneVO.getTrUrl()); + mberCertPhoneVO.setHost(getDomain(request)); + + MberCertPhoneVO tmpMberCertPhoneVO = new MberCertPhoneVO(); + try { + tmpMberCertPhoneVO = certPhoneService.selectCertUrlCode(mberCertPhoneVO); + } catch (Exception e) { + System.out.println(e.getMessage()); + } + + if(tmpMberCertPhoneVO != null) { + mberCertPhoneVO.setUrl(tmpMberCertPhoneVO.getUrl()); + mberCertPhoneVO.setHost(tmpMberCertPhoneVO.getHost()); + mberCertPhoneVO.setUrlCode(tmpMberCertPhoneVO.getUrlCode()); + } + + return mberCertPhoneVO; + } + + } diff --git a/src/main/resources/egovframework/egovProps/globals_dev.properties b/src/main/resources/egovframework/egovProps/globals_dev.properties index 621c1f23..c062cbaf 100644 --- a/src/main/resources/egovframework/egovProps/globals_dev.properties +++ b/src/main/resources/egovframework/egovProps/globals_dev.properties @@ -27,14 +27,11 @@ Globals.Env = dev # mysql -Globals.DriverClassName=com.mysql.jdbc.Driver -Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon -Globals.UserName= mjonUr -Globals.Password= itntest123 -#Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon +Globals.DriverClassName=org.mariadb.jdbc.Driver +Globals.Url=jdbc:mariadb://192.168.0.60:3396/mjon_advc #Globals.Url=jdbc:mysql://139.150.73.12:3306/mjon -#Globals.UserName= mjonUr -#Globals.Password= mjon!@#$ +Globals.UserName= mjonUr +Globals.Password= mjon!@#$ # mysql-prod #Globals.DriverClassName=com.mysql.jdbc.Driver @@ -121,3 +118,8 @@ Globals.pay.kgm.mobile.payMode=00 #Slack Globals.slack.hooks.url=https://hooks.slack.com/services/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 Globals.slack.channel.name=\ud14c\uc2a4\ud2b8_mjon\uba54\uc2dc\uc9c0 + +#valkey +Globals.valkey.ip=192.168.0.60 +Globals.valkey.port=6379 +Globals.valkey.password=itntest123 \ No newline at end of file diff --git a/src/main/resources/egovframework/egovProps/globals_local.properties b/src/main/resources/egovframework/egovProps/globals_local.properties index 370b98c5..1e164a84 100644 --- a/src/main/resources/egovframework/egovProps/globals_local.properties +++ b/src/main/resources/egovframework/egovProps/globals_local.properties @@ -28,7 +28,7 @@ Globals.Env = local # mysql Globals.DriverClassName=com.mysql.jdbc.Driver -Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon +Globals.Url=jdbc:mysql://192.168.0.125:3306/mjon_advc #Globals.Url=jdbc:mysql://192.168.0.60:3308/mjon Globals.UserName= mjonUr Globals.Password= mjon!@#$ @@ -124,3 +124,8 @@ Globals.pay.kgm.mobile.payMode=00 #Slack Globals.slack.hooks.url=https://hooks.slack.com/services/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 Globals.slack.channel.name=\ud14c\uc2a4\ud2b8_mjon\uba54\uc2dc\uc9c0 + +#valkey +Globals.valkey.ip=192.168.0.60 +Globals.valkey.port=6379 +Globals.valkey.password=itntest123 diff --git a/src/main/resources/egovframework/egovProps/globals_prod.properties b/src/main/resources/egovframework/egovProps/globals_prod.properties index 185aadd6..68ca97df 100644 --- a/src/main/resources/egovframework/egovProps/globals_prod.properties +++ b/src/main/resources/egovframework/egovProps/globals_prod.properties @@ -105,4 +105,9 @@ Globals.pay.kgm.mobile.payMode=10 #Slack Globals.slack.hooks.url=https://hooks.slack.com/services/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 -Globals.slack.channel.name=mjon\uba54\uc2dc\uc9c0 \ No newline at end of file +Globals.slack.channel.name=mjon\uba54\uc2dc\uc9c0 + +#valkey +Globals.valkey.ip=10.12.107.9 +Globals.valkey.port=6379 +Globals.valkey.password=itntest123 \ No newline at end of file diff --git a/src/main/resources/egovframework/sqlmap/let/cert/MjonCertPhone_SQL_mysql.xml b/src/main/resources/egovframework/sqlmap/let/cert/MjonCertPhone_SQL_mysql.xml index a5e5ed0c..ff0a37cd 100644 --- a/src/main/resources/egovframework/sqlmap/let/cert/MjonCertPhone_SQL_mysql.xml +++ b/src/main/resources/egovframework/sqlmap/let/cert/MjonCertPhone_SQL_mysql.xml @@ -6,7 +6,7 @@ - + + + + + + + insert into mj_cert_log + ( + MBER_ID + , CERT_DATE + , CERT_TYPE + , CERT_IPADDR + , REGDATE + ) + values ( + #mberId# + , #certDate# + , #certType# + , #certIpaddr# + , now() + ); + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp index c78cfbb3..90887669 100644 --- a/src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/addr/AddrGroupListAjax.jsp @@ -633,7 +633,9 @@ function listAddrTransHistAjax(pageNo) { var KMCIS_window; - function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ diff --git a/src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/mberSecession.jsp b/src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/mberSecession.jsp index ca464047..9072a7b0 100644 --- a/src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/mberSecession.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/mberSecession.jsp @@ -12,7 +12,9 @@ window.name = "kmcis_web_sample"; var KMCIS_window; //휴대폰 인증팝업 열기 -function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ // 모바일일 경우 (변동사항 있을경우 추가 필요) diff --git a/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp index 09a4c63c..d0de8555 100644 --- a/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/fax/addr/FaxAddrGroupListAjax.jsp @@ -548,7 +548,9 @@ function listAddrTransHistAjax(pageNo) { var KMCIS_window; - function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ diff --git a/src/main/webapp/WEB-INF/jsp/web/login/findUserId.jsp b/src/main/webapp/WEB-INF/jsp/web/login/findUserId.jsp index 128427bf..f4e2265e 100644 --- a/src/main/webapp/WEB-INF/jsp/web/login/findUserId.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/login/findUserId.jsp @@ -622,7 +622,9 @@ function fnAddUserView() { var KMCIS_window; - function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ diff --git a/src/main/webapp/WEB-INF/jsp/web/login/humanPageAuthenticatedPage.jsp b/src/main/webapp/WEB-INF/jsp/web/login/humanPageAuthenticatedPage.jsp index 3acf61e6..020d8983 100644 --- a/src/main/webapp/WEB-INF/jsp/web/login/humanPageAuthenticatedPage.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/login/humanPageAuthenticatedPage.jsp @@ -60,7 +60,9 @@ function humanAuthenticated(){ }); } -function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ // 모바일일 경우 (변동사항 있을경우 추가 필요) diff --git a/src/main/webapp/WEB-INF/jsp/web/login/test_usrCheckTerms.jsp b/src/main/webapp/WEB-INF/jsp/web/login/test_usrCheckTerms.jsp index ceafd805..5e8c9229 100644 --- a/src/main/webapp/WEB-INF/jsp/web/login/test_usrCheckTerms.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/login/test_usrCheckTerms.jsp @@ -373,7 +373,9 @@ var KMCIS_window; - function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ diff --git a/src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp b/src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp index 83c79e43..0e17e4ed 100644 --- a/src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms.jsp @@ -310,30 +310,7 @@ return false; } - //KMC팝업에 정보 미리 삽입 - var kmcPopUpForm = $("form[name=kmcPopUpForm]").serialize() ; - $.ajax({ - url : "", - type : 'POST', - data : kmcPopUpForm, - dataType:'json', - success : function(returnData, status){ - if(status == "success") { - $("#tr_cert").val(returnData.tr_cert); - $("#tr_url").val(returnData.tr_url); - $("#tr_add").val(returnData.tr_add); - - openKMCISWindow(); - - - }else{ alert("실패");return;} - }, - - error : function(request , status, error){ - alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error); - } - }); - + openKMCISWindow(); } @@ -384,7 +361,9 @@ var KMCIS_window; - function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ @@ -419,7 +398,6 @@ } -
            @@ -652,7 +630,7 @@
            -
            +< @@ -773,4 +751,5 @@
            + diff --git a/src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms_back2.jsp b/src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms_back2.jsp index db1aa50f..4fde2d3c 100644 --- a/src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms_back2.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/login/usrCheckTerms_back2.jsp @@ -476,7 +476,9 @@ var KMCIS_window; - function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp index a560cbd1..bed33f22 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/mberCompanyInfoChange.jsp @@ -194,7 +194,9 @@ window.name = "kmcis_web_sample"; var KMCIS_window; -function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ // 모바일일 경우 (변동사항 있을경우 추가 필요) diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp index 6e1ac69d..1a9a69e9 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoChange.jsp @@ -102,7 +102,9 @@ window.name = "kmcis_web_sample"; var KMCIS_window; -function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ // 모바일일 경우 (변동사항 있을경우 추가 필요) diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp index 4db78d99..dcebcd6c 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/mberInfoIndex.jsp @@ -267,7 +267,9 @@ function getMberGrdChk() { window.name = "kmcis_web_sample"; var KMCIS_window; //휴대폰 인증팝업 열기 -function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ // 모바일일 경우 (변동사항 있을경우 추가 필요) diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberSecession.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberSecession.jsp index e023f648..532579b6 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/mberSecession.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/mberSecession.jsp @@ -9,7 +9,9 @@ window.name = "kmcis_web_sample"; var KMCIS_window; //휴대폰 인증팝업 열기 -function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ // 모바일일 경우 (변동사항 있을경우 추가 필요) diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp index 4b8943b4..b39f8cd7 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp @@ -626,7 +626,9 @@ function deleteRow(p_ip){ window.name = "kmcis_web_sample"; var KMCIS_window; //휴대폰 인증팝업 열기 -function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ // 모바일일 경우 (변동사항 있을경우 추가 필요) diff --git a/src/main/webapp/WEB-INF/jsp/web/user/sendNumberManageRegister.jsp b/src/main/webapp/WEB-INF/jsp/web/user/sendNumberManageRegister.jsp index f3569e8d..6483f195 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/sendNumberManageRegister.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/sendNumberManageRegister.jsp @@ -394,7 +394,9 @@ function kmcCertCheck(){ window.name = "kmcis_web_sample"; var KMCIS_window; //휴대폰 인증팝업 열기 -function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ // 모바일일 경우 (변동사항 있을경우 추가 필요) diff --git a/src/main/webapp/WEB-INF/jsp/web/user/sendNumberManage_bak220502.jsp b/src/main/webapp/WEB-INF/jsp/web/user/sendNumberManage_bak220502.jsp index d3ebebe8..95439b24 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/sendNumberManage_bak220502.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/sendNumberManage_bak220502.jsp @@ -122,7 +122,9 @@ function selectSendNumberAjax(phmAuthType){ window.name = "kmcis_web_sample"; var KMCIS_window; //휴대폰 인증팝업 열기 -function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ // 모바일일 경우 (변동사항 있을경우 추가 필요) diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 802ac6f4..7d863572 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -69,7 +69,15 @@ /* - + + + springSessionRepositoryFilter + org.springframework.web.filter.DelegatingFilterProxy + + + springSessionRepositoryFilter + /* + diff --git a/src/main/webapp/publish/js/common.js b/src/main/webapp/publish/js/common.js index c27d4537..e21312c0 100644 --- a/src/main/webapp/publish/js/common.js +++ b/src/main/webapp/publish/js/common.js @@ -133,3 +133,21 @@ var isInternetExplorer = false; if( navigator.appName == 'Netscape' && navigator.userAgent.search('Trident') != -1 || (cCommonUserAgent.indexOf("msie") != -1)) { isInternetExplorer = true; } + + + +function certAccessLog(){ + $.ajax({ + url : '/web/cert/log/insertCertLog.do', + type : 'POST', + /* data : arsForm, */ + dataType:'json', + success : function(returnData, status){ + if(status == "success") { + }else{ console.log('본인인증 시도로그 실패');} + }, + error : function(request , status, error){ + console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error); + } + }); +} \ No newline at end of file diff --git a/src/main/webapp/publish/kmc/kmcis_web_sample_step02.jsp b/src/main/webapp/publish/kmc/kmcis_web_sample_step02.jsp index f0105988..bfb40e06 100644 --- a/src/main/webapp/publish/kmc/kmcis_web_sample_step02.jsp +++ b/src/main/webapp/publish/kmc/kmcis_web_sample_step02.jsp @@ -232,7 +232,9 @@ var KMCIS_window; - function openKMCISWindow(){ + function openKMCISWindow(){ + //본인인증시도 로그 + certAccessLog(); var UserAgent = navigator.userAgent; /* 모바일 접근 체크*/ From 0ef50856df4c53e523f3f793aeef9f2cd2c0c237 Mon Sep 17 00:00:00 2001 From: ijunho Date: Mon, 21 Jul 2025 11:35:53 +0900 Subject: [PATCH 15/23] =?UTF-8?q?/publish/js/common.js=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=BA=90=EC=8B=9C=20=EC=B4=88=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/WEB-INF/jsp/layout/include/defaultResource.jsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/webapp/WEB-INF/jsp/layout/include/defaultResource.jsp b/src/main/webapp/WEB-INF/jsp/layout/include/defaultResource.jsp index 0e9cabe4..4e807072 100644 --- a/src/main/webapp/WEB-INF/jsp/layout/include/defaultResource.jsp +++ b/src/main/webapp/WEB-INF/jsp/layout/include/defaultResource.jsp @@ -38,7 +38,7 @@ - + From 936c71b5ed2be669c3a30dfb06b167a20bc212bc Mon Sep 17 00:00:00 2001 From: ijunho Date: Tue, 22 Jul 2025 14:03:02 +0900 Subject: [PATCH 16/23] =?UTF-8?q?=EB=B3=B4=EC=95=88=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20=EB=B3=B8=EC=9D=B8=20=EB=AA=85=EC=9D=98=20=ED=9C=B4?= =?UTF-8?q?=EB=8C=80=ED=8F=B0=EB=A7=8C=EB=B3=B4=EC=95=88=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8=20off=EB=90=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../let/uat/uia/web/EgovMypageController.java | 21 +++++++++++++------ .../WEB-INF/jsp/web/user/mberSecureLogin.jsp | 17 +++++++++++---- .../jsp/web/user/securityAuthnPage.jsp | 5 +++-- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/main/java/itn/let/uat/uia/web/EgovMypageController.java b/src/main/java/itn/let/uat/uia/web/EgovMypageController.java index 15e097a9..997caab0 100644 --- a/src/main/java/itn/let/uat/uia/web/EgovMypageController.java +++ b/src/main/java/itn/let/uat/uia/web/EgovMypageController.java @@ -3906,20 +3906,29 @@ public class EgovMypageController { + //본인 명의만 번호 변경 가능하게 + if(mblDn.equals(DI)) { + String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); + MberManageVO mberManageVO = new MberManageVO(); + mberManageVO.setSecuLoginFlag("N"); + mberManageVO.setMberId(userId); + mberManageVO.setLastUpdusrId(userId); + mberManageService.updateSecureLoginFlag(mberManageVO); + + model.addAttribute("msg", "변경이 완료되었습니다."); + }else { + model.addAttribute("msg", "가입자 본인 명의의 휴대폰으로만 해제가 가능합니다."); + } return "web/user/securityAuthnPage"; } @RequestMapping(value="/web/user/mberSecureLoginAjax.do") - public ResponseEntity mberSecureLoginAjax(MberManageVO mberManageVO, @RequestBody Map params){ + public ResponseEntity mberSecureLoginAjax(MberManageVO mberManageVO){ LoginVO loginVO = EgovUserDetailsHelper.isAuthenticated()? (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser():null; String userId = loginVO == null ? "" : EgovStringUtil.isNullToString(loginVO.getId()); - if("Y".equals(params.get("secuLoginFlag"))) { - mberManageVO.setSecuLoginFlag("N"); - }else { - mberManageVO.setSecuLoginFlag("Y"); - } + mberManageVO.setSecuLoginFlag("Y"); mberManageVO.setMberId(userId); mberManageVO.setLastUpdusrId(userId); diff --git a/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp b/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp index b39f8cd7..86677aef 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/mberSecureLogin.jsp @@ -70,7 +70,7 @@ $(document).ready(function(){ } else { $(this).find("a.on").removeClass("on").siblings("a").addClass("on"); $(this).removeClass("off").addClass("on"); - callTo() + callTo(); } } @@ -655,10 +655,10 @@ function callTo() { $.ajax({ url: '/web/user/mberSecureLoginAjax.do', type: 'POST', - contentType: 'application/json', - data: JSON.stringify({ + /*contentType: 'application/json', + data: JSON.stringify({ secuLoginFlag: '${mberManageVO.secuLoginFlag}' - }), + }), */ success: function(response) { if(response === 'success'){ alert('변경이 완료되었습니다.'); @@ -675,6 +675,15 @@ function callTo() { }); } +//자식창에서 호출 +function callToTwo(msg, winRef) { + if (winRef) { + winRef.close(); + } + alert(msg); + localtion.reload(); +} + function fn_phonePopClean(){ console.log('ddd') diff --git a/src/main/webapp/WEB-INF/jsp/web/user/securityAuthnPage.jsp b/src/main/webapp/WEB-INF/jsp/web/user/securityAuthnPage.jsp index ccc2e722..17aecd39 100644 --- a/src/main/webapp/WEB-INF/jsp/web/user/securityAuthnPage.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/user/securityAuthnPage.jsp @@ -20,8 +20,9 @@ From 925b38192ba5e65e442a1b09cea0dcd2163e9857 Mon Sep 17 00:00:00 2001 From: subsub Date: Tue, 22 Jul 2025 14:37:10 +0900 Subject: [PATCH 17/23] =?UTF-8?q?=EA=B2=B0=EC=A0=9C=EA=B4=80=EB=A6=AC=20>?= =?UTF-8?q?=20=EC=9A=94=EA=B8=88=20=EC=82=AC=EC=9A=A9=EB=82=B4=EC=97=AD=20?= =?UTF-8?q?>=20=EC=95=8C=EB=A6=BC=ED=86=A1=20=EC=83=81=EC=84=B8=EB=82=B4?= =?UTF-8?q?=EC=97=AD=20=ED=8C=9D=EC=97=85=20=EB=A7=88=EC=8A=A4=ED=81=AC=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95=20=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp | 4 ++-- src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp | 10 +++++----- .../webapp/WEB-INF/jsp/web/pay/PayUserSWListAjax.jsp | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp index 9e5eee73..c79bc2e8 100644 --- a/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/kakao/sent/KakaoSentDetailPopAjax.jsp @@ -7,7 +7,7 @@
            -
            +
            • @@ -18,7 +18,7 @@ -
              +

              diff --git a/src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp b/src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp index 1be55030..73b8b384 100644 --- a/src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWList.jsp @@ -196,11 +196,11 @@ function fnRevDetailPop03(msgGroupId){
              - diff --git a/src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWListAjax.jsp b/src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWListAjax.jsp index 2b071585..a1eda9c8 100644 --- a/src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWListAjax.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/pay/PayUserSWListAjax.jsp @@ -210,7 +210,7 @@ function fnShowPdfPrintPopup(){ - +
              " /> " /> From 03c992be60ec3e807f8821a7486cdc312c611f0c Mon Sep 17 00:00:00 2001 From: kmg Date: Tue, 22 Jul 2025 16:31:03 +0900 Subject: [PATCH 18/23] =?UTF-8?q?2025/07/22=202025=20=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=EC=95=BD=EA=B4=80=20=EA=B0=9C=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/content.css | 10 + .../publish/email_form_terms_2025_clause.html | 113 ++++ src/main/webapp/publish/guide.html | 3 + src/main/webapp/publish/service1_2025.html | 508 ++++++++++++++++++ 4 files changed, 634 insertions(+) create mode 100644 src/main/webapp/publish/email_form_terms_2025_clause.html create mode 100644 src/main/webapp/publish/service1_2025.html diff --git a/src/main/webapp/publish/css/content.css b/src/main/webapp/publish/css/content.css index ee304cf7..a662d0ce 100644 --- a/src/main/webapp/publish/css/content.css +++ b/src/main/webapp/publish/css/content.css @@ -2395,6 +2395,16 @@ button.check_validity:hover {border: 1px solid #a3a3a3;box-shadow: 0px 0px 5px .clause_new ul.conlist7 li::before {content:"제"; font-weight:500;font-size: 18px;position: absolute; left: 0;} .clause_new ul.conlist7 li strong {font-weight:500; font-size:18px; padding:0 7px 0 0;} .clause_new ul.conlist7 li .gray_box{background-color:#f5f5f5; border-radius: 5px; padding:25px 35px; margin:18px 0; font-size:16px; font-weight:400;} +.clause_new ul.conlist7 li .tType2{width: 100%; border-top: 1px solid #000; text-align: center; margin:10px 0 10px 0;} +.clause_new ul.conlist7 li .tType2 thead tr{background-color: #f7f7f7; border-bottom: 1px solid #e5e5e5;} +.clause_new ul.conlist7 li .tType2 thead tr th{height: 46px; font-size: 16px; font-weight: 500; border-right: 1px solid #e5e5e5; vertical-align: middle;} +.clause_new ul.conlist7 li .tType2 thead tr th:last-child{border-right: 0;} +.clause_new ul.conlist7 li .tType2 tbody tr{border-bottom: 1px solid #e5e5e5;} +.clause_new ul.conlist7 li .tType2 tbody tr th{font-size: 16px; font-weight: 500; border-right: 1px solid #e5e5e5; height: 50px; vertical-align: middle;} +.clause_new ul.conlist7 li .tType2 tbody tr td{font-size: 16px; font-weight: 300; border-right: 1px solid #e5e5e5; vertical-align: middle; line-height: 1.4; padding:10px 20px;} +.clause_new ul.conlist7 li .tType2 tbody tr td.type_left {text-align: left;} +.clause_new ul.conlist7 li .tType2 tbody tr td:last-child{border-right: 0;} +.clause_new ul.conlist7 li .tType2 tbody tr td:last-child>span {font-weight: 400;} .clause_new .history { border-top:1px solid #d5d5d5; padding:30px 0 10px 17px; margin:10px 0 0 0;} .clause_new .history p {font-size:16px; font-weight: 500;} .clause_new ol.conlist8 {padding:0 0 0 10px;} diff --git a/src/main/webapp/publish/email_form_terms_2025_clause.html b/src/main/webapp/publish/email_form_terms_2025_clause.html new file mode 100644 index 00000000..50809c67 --- /dev/null +++ b/src/main/webapp/publish/email_form_terms_2025_clause.html @@ -0,0 +1,113 @@ + + + + + + + + 이용약관 개정 안내 메일입니다. + + + + + + +
              +
              +
              + + +
              +
              +

              + [문자온] 이용약관 개정안내

              +

              + 안녕하세요. 대량 ‧ 단체 문자사이트 “문자온(www.munjaon.co.kr)”입니다.
              변함없이 문자온 서비스를 이용해 주시는 고객님께 감사의 말씀을 드리며 이용약관이 다음과 같이 변경됨을 알려드리오니 + 서비스 이용에 참고하시기 바랍니다.

              + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              구분주요내용
              개정사유이용자보호를 위한 서비스 이용약관 일부 개정 + +
              개정사항 +

              - 이용자 불만형태별 처리절차 및 처리기간 명시

              +

              - 서비스 제공이 불가능한 경우(휴 ·폐업 시)의 처리 방안 명시

              +
              + 개정되는 약관 전체 내용은 하단의 링크 또는 홈페이지 공지사항을 통하여
              확인해 주시기 바랍니다.
              + +
              +
              시행일2025.07.30(수) +
              + + + + + + +
              +

              + 이의제기 관련 사항 +이용약관 시행일 전까지 별도의 이의제기를 하지 않는 경우 본 이용약관에 동의하는 것으로 간주됩니다. 개정되는 이용약관에 동의하지 않으시는 경우 회원탈퇴(이용계약의 해지)를 요청하실 수 있습니다. 이용약관 개정과 관련하여 궁금하신 사항은 문자온 고객센터로 문의하여 주시기 바랍니다. + +

              +
              + + + + + +

              + 문자온은 앞으로도 회원 여러분께 더욱 신뢰받는 서비스로 보답할 수 있도록
              최선의 노력을 다하겠습니다.
              감사합니다. +

              + + +
              +

              + 본 메일은 발신전용이며, 문의에 대한 회신은 처리되지 않습니다. 문자온 관련하여 궁금하신 점이나
              불편한 사항은 고객센터를 통해 문의하여 주시기 바랍니다.

              +

              + 주소 : (12248) 경기도 남양주시 다산순환로 20, A동 735호(다산동, 현대프리미어캠퍼스)
              사업자 번호 : 653-87-00858 | 대표 : 유인식 | 통신판매등록번호 : + 제2021-다산-0422호
              문의전화 : 1551-8011 | E-mail : help@iten.co.kr

              +

              + Copyright 2022 ⓒ MUNJAON co. Ltd, All rights reserved.

              +
              +
              +
              +
              + + + \ No newline at end of file diff --git a/src/main/webapp/publish/guide.html b/src/main/webapp/publish/guide.html index 5d955b3f..542ab4d1 100644 --- a/src/main/webapp/publish/guide.html +++ b/src/main/webapp/publish/guide.html @@ -152,6 +152,8 @@
            • service1.html고객센터 > 공지사항
            • service2.html고객센터 > 이용약관
            • +
            • └ service1_2024.html고객센터 > 이용약관 (2024)
            • +
            • └ service1_2025.html고객센터 > 이용약관 (2025)
            • service3.html고객센터 > 자주하는 질문
            • service4.html고객센터 > 1:1 문의
            • service4_2.html고객센터 > 1:1 문의 > 등록
            • @@ -220,6 +222,7 @@
            • email_form_terms.html서비스 이용약관 개정
            • email_form_terms_2024_clause.html서비스 이용약관 개정
            • email_form_terms_2024_privacy.html개인정보처리방침 개정
            • +
            • email_form_terms_2025_clause.html서비스 이용약관 개정
            diff --git a/src/main/webapp/publish/service1_2025.html b/src/main/webapp/publish/service1_2025.html new file mode 100644 index 00000000..cb2792a5 --- /dev/null +++ b/src/main/webapp/publish/service1_2025.html @@ -0,0 +1,508 @@ + + + + + + + 문자온 + + + + + + + + + + + + + + + + + + + + + + + + + + +
            + + + + + +
            + + + +
            +
            + +
            + +
              +
            • +
            • +
            • +
            • +
            • +
            + + +
            +
            +

            이용안내

            +
            +
            + +
              +
            • +
            • +
            • +
            + +
            + + +
            +
            +

            제1장 총칙

            +
              +
            • 1조(목적)이 약관은 주식회사 아이티앤(이하 “회사”라 한다)이 제공하는 인터넷 서비스 문자온(www.munjaon.co.kr, 이하 “서비스”라 한다)을 이용함에 있어 회사와 이용자의 권리, 의무, 책임사항 및 기타 필요한 사항을 규정함을 목적으로 합니다.
            • +
            • 2조(용어의 정의)이 약관에서 사용하는 용어의 정의는 다음과 같습니다.
              +
                +
              1. 1. 문자온(문자ON) : 회사의 서비스명으로 이용자가 전송하고자 하는 내용ㆍ정보 등을 문자메시지, 멀티미디어메시지, 카카오톡을 통한 알림톡 또는 친구톡, 팩스 등 다양한 메시지 형태로 변화시켜 전송하는 서비스
              2. +
              3. 2. 이용자 : 회사에 개인정보를 제공하여 이용계약을 체결하고, 이용자 아이디(ID)를 부여받은 자로서 회사가 제공하는 서비스를 지속적으로 이용할 수 있는 자
              4. +
              5. 3. 아이디(ID) : 이용자의 식별과 서비스 이용을 위하여 이용자가 정하고 회사가 승인하는 문자와 숫자의 조합
              6. +
              7. 4. 비밀번호 : 이용자가 부여 받은 아이디(ID)와 일치된 이용자임을 확인하고, 이용자의 비밀을 보호하기 위해 이용자가 설정한 문자와 숫자의 조합
              8. +
              9. 5. 휴면아이디 : 12개월 이상 계속해서 로그인을 포함한 서비스 이용이 없는 아이디
              10. +
              11. 6. 해지 : 회사와 이용자 간 맺은 이용계약을 해약하는 것
              12. +
              13. 7. 문자메시지 : 정보통신망을 통해 수신자에게 발송되는 메시지(이하 “메시지”라 한다)
              14. +
              15. 8. 스팸메시지 : 정보통신망을 통해 수신자의 명시적인 사전 동의 없이 일방적으로 전송 또는 게시되는 영리목적의 광고성 정보
              16. +
              17. 9. 불법스팸메시지 : 「정보통신망 이용촉진 및 정보보호 등에 관한 법률(이하 “정보통신망법”이라 한다)」 제50조부터 제50조의8을 위반하여 전송 또는 게시되는 영리목적의 광고성 정보
              18. +
              19. 10. 문자피싱메시지 : 전자금융사기를 목적으로 전송 또는 게시되는 정보
              20. +
              21. 11. 스미싱메시지 : 메시지 내용 중 인터넷 주소를 클릭하면 악성코드가 설치되어 수신자가 모르는 사이에 금전적 피해 또는 개인ㆍ금융정보 탈취 피해를 야기하는 메시지
              22. +
              23. 12. 불법정보 : 「정보통신망법」 제44조의7에 따라 정보통신망을 통한 유통을 금지하는 음란물, 명예훼손, 사이버스토킹, 해킹ㆍ바이러스, 청소년 유해물 표시위반, 도박ㆍ사해행위, 개인정보거래, 총포 등 불법제조, 국가안보 위반, 기타 그 밖에 범죄를 목적으로 하거나 교사 또는 방조하는 내용의 정보
              24. +
              25. 13. 카카오톡 : 주식회사 카카오(이하 “카카오”)가 운영하는 모바일 메신저 기반의 실시간 커뮤니케이션 서비스로 알림톡, 친구톡 또는 해당 서비스를 제공하는 어플리케이션
              26. +
              27. 14. 알림톡 : 주문, 예약, 결제, 배송 정보 등 「정보통신망법」 및 한국인터넷진흥원 지침상 광고성 정보의 예외로 분류되는 정보 중 일부를 카카오톡 채널 추가 여부와 상관 없이 발송 가능한 메시지
              28. +
              29. 15. 친구톡 : 발신자의 카카오톡 채널과 채널 추가된 카카오톡 이용자에게만 발송 가능한 메시지
              30. +
              31. 16. 카카오톡 채널 : 카카오의 공식 계정 서비스 중 하나로서 기업 및 단체가 카카오톡 이용자와 커뮤니케이션 할 수 있는 서비스
              32. +
              33. 17. 발신 프로필(채널ID) : 카카오톡 채널 개설을 통해 확보한 알림톡 또는 친구톡을 발송하는 주체에 대한 식별정보
              34. +
              35. 18. 전송자격 인증제 : 「전기통신사업법」 제2조제14호나목의 특수한 유형의 부가통신역무를 제공하는 사업자가 영리 목적의 광고성 정보를 발송하는 경우 사전에 문자중계사 또는 인증업무를 위탁받은 운영기관이 심사를 통해 인증을 부여하는 제도
              36. +
              +
            • +
            • 3조(약관의 게시와 개정)① 회사는 이 약관의 내용을 서비스 화면에 이용자가 확인하기 쉽게 게시하며, 이용자가 이에 동의함으로써 그 효력이 발생합니다.
              + ② 회사는 「약관의 규제에 관한 법률」, 「정보통신망법」, 「전자문서 및 전자거래 기본법」, 「전자상거래 등에서의 소비자보호에 관한 법률(이하 “전자상거래법”이라 한다」 등 관련 법을 위배하지 않는 범위에서 이 약관을 개정할 수 있습니다.
              + ③ 회사가 이 약관을 개정하는 경우에는 적용일자 및 개정사유를 명시하여 현행약관과 함께 제1항의 방식에 따라 그 적용일자 7일 전부터 적용일자 전까지 공지합니다. 다만, 이용자의 권리 또는 의무에 관한 중요한 규정의 변경은 최소한 30일 전에 공지하고 일정기간 서비스 내 공지사항, 전자우편 등의 전자적 수단을 통해 이를 통지하도록 합니다. +
              + ④ 회사가 제3항에 따라 개정약관을 공지 또는 통지하면서 이용자에게 약관 변경 적용일까지 거부의사를 표시하지 않으면 동의한 것으로 본다는 뜻을 명확하게 공지 또는 통지하였음에도 이용자가 명시적으로 거부의 의사표시를 하지 아니한 경우에는 개정약관에 동의한 것으로 봅니다.
              + ⑤ 이용자는 개정약관에 동의하지 않는 경우 서비스 이용을 중단하고 이용계약을 해지할 수 있습니다.
              + ⑥ 새로운 서비스가 개설될 경우 별도의 명시된 설명이 없는 한 이 약관에 따라 제공됩니다.
              + ⑦ 이용자는 약관의 변경에 대하여 주의의무를 다하여야 하며, 변경된 약관으로 인한 이용자의 피해는 회사에서 책임지지 않습니다.
              + ⑧ 이 약관의 적용기간은 이용자의 가입일부터 해지일까지로 합니다. 단, 채권 또는 채무관계가 있을 경우에는 채권, 채무의 완료일까지로 규정합니다. +
            • +
            • 4조(약관 외 준칙)① 이 약관은 회사가 제공하는 서비스에 관하여 별도의 정책 및 운영규칙과 함께 적용됩니다.
              + ② 이 약관에서 정하지 아니한 사항 및 해석에 관하여는 관계법령 또는 상관례에 따릅니다. +
            • +
            +

            제2장 서비스 이용계약 및 관리

            +
              +
            • 5조(서비스 이용계약)① 서비스 이용계약은 이용자가 되고자 하는 자가 이 약관을 읽고 약관에 동의를 한 다음 회사가 정한 소정의 양식에 따라 회원가입을 신청하며, 회사는 특별한 하자가 없는 한 접수의 순서대로 등록신청을 승낙하는 것을 원칙으로 합니다. 단, 회사는 다음 각 호의 어느 하나에 해당하는 경우에는 승낙을 하지 않거나 추후에 이용계약을 해지할 수 있습니다. +
              +
                +
              1. 1. 실명이 아니거나 타인의 명의를 이용하여 신청한 경우
              2. +
              3. 2. 서비스 이용계약 신청서의 내용을 허위로 기재하여 신청한 경우
              4. +
              5. 3. 만 18세 미만의 가입자인 경우
              6. +
              7. 4. 가입신청자가 이 약관에 의하여 과거에 회원 자격을 상실한 적이 있는 경우(단, 회사의 회원 재가입 승낙을 받은 경우에는 예외로 함)
              8. +
              9. 5. 이용자의 귀책사유로 인하여 승인이 불가능한 경우
              10. +
              11. 6. 이용자가 서비스의 정상적인 제공을 저해하거나 다른 이용자의 서비스 이용에 지장을 줄 것으로 예상되는 경우
              12. +
              13. 7. 부정한 용도로 서비스를 이용할 것으로 예상되는 경우
              14. +
              15. 8. 사회의 안녕과 질서 혹은 미풍양속에 반할 우려가 있다고 회사가 인정하는 경우
              16. +
              17. 9. 기타 회사가 정한 서비스 이용계약 등록신청 요건에 부합하지 않는 경우
              18. +
              + ② 온라인 등록신청 양식에 기재 또는 첨부하는 모든 정보는 진실된 것으로 간주하며, 거짓된 정보를 기재하는 경우 서비스 이용에 제한을 받을 수 있습니다.
              + ③ 이용자는 반드시 이용자 본인의 실명과 휴대폰 번호를 기재하여야 하며, 실명으로 등록하지 않은 경우 서비스 이용에 제한을 받게 됩니다.
              + ④ 회사는 서비스 관련 설비에 여유가 없거나 기술상 또는 업무상 문제가 있는 경우 등에는 승낙을 유보할 수 있습니다.
              + ⑤ 서비스 이용계약의 성립시기는 회사가 가입완료를 신청절차 상에서 표시한 시점으로 합니다.
              + ⑥ 회사는 이용자에 대하여 회사정책에 따라 등급별로 구분하여 이용시간, 이용횟수, 서비스 메뉴 등을 세분화하여 이용에 차등을 둘 수 있습니다.
              + ⑦ 회사는 서비스의 대량이용 등 특별한 이용에 관하여는 별도 계약을 통해 제공할 수 있습니다.
              + ⑧ 회사는 전송자격인증제에 따른 전송자격 인증을 받지 않거나, 인증이 취소된 사업자와는 거래를 하지 아니할 수 있습니다. +
            • +
            • 6조(개인정보의 처리)① 회사는 관계 법령이 정하는 바에 따라 적법하고 공정한 수단에 의하여 이용계약의 성립 및 이행에 필요한 최소한의 개인정보를 수집하고, 이용자의 개인정보를 보호하기 위해 노력합니다.
              + ② 제1항에도 불구하고, 이용자가 게시판 등 온라인 상에서 자발적으로 제공하는 개인정보는 다른 사람이 수집하여 사용할 가능성이 있으므로 이러한 위험은 이용자 자신이 책임을 집니다.
              + ③ 회사는 개인정보의 수집 시 관계 법령에 따라 「개인정보처리방침」에 그 수집범위 및 목적을 사전에 고지합니다.
              + ④ 회사는 회사가 제공하는 서비스를 이용하는 이용자를 대상으로 해당 서비스의 양적ㆍ질적 향상을 위해 이용자의 개인 식별이 가능한 개인정보를 이용자의 동의를 받아 수집하여 회사의 각종 서비스 등에 사용할 수 있습니다.
              + ⑤ 회사는 서비스 제공과 관련하여 알고 있는 이용자의 개인정보를 본인의 승낙 없이 제3자에게 누설 및 배포하지 않습니다. 다만, 관계 법령에 의한 관계기관으로부터의 요청 등 법률의 규정에 따른 적법한 절차에 의한 경우에는 그러하지 않습니다.
              + ⑥ 개인정보의 보호 및 이용에 관하여는 관계 법령 및 회사의 「개인정보처리방침」이 적용됩니다. 단, 회사의 공식 사이트 이외 링크된 사이트에 대하여는 회사의 개인정보처리방침이 적용되지 않습니다.
              + ⑦ 회사는 이용자의 시스템에 스파이웨어 등 기타 바이러스의 감염 등으로 인한 개인정보유출에 대해서는 책임을 지지 않으며, 이용자는 주기적으로 자신의 사용 시스템의 사용 여부를 관리할 책임을 가지고 있습니다. +
            • +
            • 7조(아이디 및 비밀번호 관리에 대한 의무)① 이용자는 아이디와 비밀번호에 관한 관리책임을 지며, 이를 제3자가 이용하도록 하여서는 안됩니다.
              + ② 회사는 이용자의 아이디가 다음 각 호의 어느 하나에 해당하는 경우에는 해당 아이디의 활용을 제한할 수 있습니다.
              +
                +
              1. 1. 개인정보 유출 우려가 있는 경우
              2. +
              3. 2. 반사회적 또는 미풍양속에 어긋나는 경우
              4. +
              5. 3. 회사 및 회사의 운영자로 오인할 우려가 있는 경우
              6. +
              + ③ 이용자는 아이디 및 비밀번호가 도용되거나 제3자가 사용하고 있음을 인지한 경우에는 이를 즉시 회사에 통지하고 회사의 안내에 따라야 합니다.
              + ④ 회사는 이용자가 제3항에 따른 통지를 하지 않거나, 통지를 한 이후 회사의 안내에 따르지 않아 발생한 불이익에 대하여 책임지지 않습니다.
              + ⑤ 회사는 보안 강화를 위해, 신규 가입한 이용자 또는 마지막 로그인 시점으로부터 3개월간 로그인하지 않은 이용자의 부정로그인을 방지하는 보안 로그인 기능(이용자가 사전에 등록한 휴대폰 번호에 대한 점유 인증이 완료된 경우에만 서비스 홈페이지 로그인이 가능하도록 하는 기능)을 이용자의 기본 로그인 방식으로 설정할 수 있습니다.
              + ⑥ 이용자가 제5항에 따른 보안 로그인 설정을 해제함으로써 발생하는 손해에 대하여 회사는 책임을 지지 않습니다. +
            • +
            • 8조(이용자정보의 변경)이용자는 이용 신청 시 기재한 이용자정보가 변경되었을 경우 즉시 온라인으로 직접 수정하여야 하며, 관리자에게도 수정을 요청할 수 있습니다. 만약, 이용자가 이용자정보를 변경하지 않아 발생하는 문제에 대하여는 회사가 책임지지 않습니다. +
            • +
            • 9조(이용자에 대한 통지)① 회사가 이용자에 대한 통지를 하는 경우, 이 약관에서 별도로 정함이 없는 한 이용자가 등록한 이메일, 휴대전화, 문자메시지 등을 통해 통지할 수 있습니다. 단, 이용자가 해당 정보를 허위로 제출하거나 변경된 정보를 회사에 알리지 않은 경우에는, 이용자가 사전 제출한 정보로 통지를 발송한 때에 도달된 것으로 봅니다.
              + ② 회사는 전체 또는 불특정 다수 이용자에 대한 통지의 경우 7일 이상 서비스에 게시함으로써 제1항의 개별 통지에 갈음할 수 있습니다. +
            • +
            +

            제3장 회사 및 이용자의 의무

            +
              +
            • 10조(회사의 의무)① 회사는 관계 법령과 이 약관이 금지하는 행위를 하지 않으며, 지속적이고 안정적인 서비스를 제공하기 위해 최선의 노력을 다하여야 합니다.
              + ② 회사는 이용자가 안전하게 서비스를 이용할 수 있도록 개인정보(신용정보 포함) 보호 및 관리를 위해 필요한 조치를 취하며 「개인정보처리방침」을 공시하고 준수합니다.
              + ③ 회사는 서비스 제공목적에 맞는 서비스 이용 여부를 확인하기 위하여 상시적으로 모니터링을 실시합니다.
              + ④ 회사는 이용자에게 제공하는 유료 및 무료 서비스를 계속적이고 안정적으로 제공하기 위하여 설비에 장애가 생기거나 멸실 되었을 때 지체없이 이를 수리 또는 복구합니다. 다만, 천재지변이나 비상사태 등 부득이한 경우에는 서비스를 일시 중단하거나 영구 중지할 수 있습니다.
              + ⑤ 회사는 이용자의 회원가입 시 타인의 명의를 도용한 부정가입을 방지하기 위해 본인인증 서비스 사업자가 제공하는 인증방법을 통해 실명확인 및 본인인증을 요청합니다.
              + ⑥ 회사는 이용자가 본인인증 절차를 거치고 발신번호를 사전등록한 후 서비스를 제공합니다.
              + ⑦ 회사는 다음 각 호의 어느 하나에 해당하는 경우, 해당 서비스의 제공을 거부하는 조치를 취할 수 있으며, 이 경우 해당 조치 사실을 서비스를 제공받는 이용자 등 이해관계인에게 알립니다. 다만, 미리 알리는 것이 곤란한 경우에는 선 거부조치 후 이를 지체 없이 알려야 합니다.
              +
                +
              1. 1. 광고성 정보의 전송 또는 수신으로 서비스의 제공에 장애가 일어나거나 일어날 우려가 있는 경우
              2. +
              3. 2. 수신자가 광고성 정보의 수신을 원하지 않는 경우
              4. +
              + ⑧ 회사는 스팸메시지, 불법스팸메시지, 문자피싱메시지, 스미싱메시지(이하 “불법스팸”이라 한다)로부터 이용자 및 수신자를 보호하기 위하여 스팸차단(필터링)서비스를 통해 해당 메시지가 수신되지 않도록 사전 차단할 수 있습니다.
              + ⑨ 회사는 불법스팸, 불법정보, 발신번호조작 등으로 인지되는 메시지에 대해서 발송을 차단하거나 제한 할 수 있습니다.
              + ⑩ 회사는 이용자가 불법스팸을 전송한 사실을 확인한 경우, 한국인터넷진흥원 불법스팸대응센터 등 관계기관에 관련 자료를 첨부하여 신고할 수 있습니다.
              + ⑪ 회사는 이용자 중 문자재판매사업자에 대하여 전송자격인증제에 따라 인증이 취소된 사실을 전달받은 경우 문자재판사업자의 서비스 정지, 계약 해지 등의 조치를 취할 수 있습니다. +
            • +
            +
              +
            • 11조(이용자의 의무)① 이용자는 다음 각 호의 어느 하나에 해당하는 행위를 하여서는 안 됩니다.
              +
                +
              1. 1. 신청 또는 변경 시 허위내용을 등록하는 행위
              2. +
              3. 2. 타인의 정보를 도용하는 행위
              4. +
              5. 3. 회사 및 기타 제3자의 저작권 등 지적재산권 등을 사전 승낙 없이 복제, 전송, 출판, 배포, 방송 및 기타 방법에 의하여 상업적으로 이용하거나 제3자에게 이용하게 하는 행위
              6. +
              7. 4. 회사 및 기타 제3자의 명예를 손상시키거나 업무를 방해하는 행위
              8. +
              9. 5. 외설 또는 폭력적인 메시지, 팩스, 음성, 메일, 기타 공서양속에 반하는 정보를 서비스에 공개 또는 게시하는 행위
              10. +
              11. 6. 타인의 의사에 반하는 내용을 지속적으로 전송하는 행위
              12. +
              13. 7. 선량한 풍속 또는 기타 사회질서를 해치는 행위
              14. +
              15. 8. 회사의 동의 없이 영리를 목적으로 서비스를 사용하는 행위
              16. +
              17. 9. 제3자에게 임의로 서비스를 임대하는 행위
              18. +
              19. 10. 서비스의 안정적인 운영에 지장을 주거나 줄 우려가 있는 일체의 행위
              20. +
              21. 11. 불법스팸, 불법정보, 발신번호 조작 등으로 인지되는 메시지를 발송하는 행위
              22. +
              23. 12. 기타 불법적이거나 부당한 행위
              24. +
              + ② 이용자는 영리목적의 광고성 정보 전송 시 「정보통신망법」에 따라 수신자의 명시적인 사전 동의를 얻고 광고표기 의무 등을 준수하여야 하며, 회사를 통해 전달되는 수신거부 요청에 대해서는 즉각적으로 처리하고 24시간 이내에 처리결과를 회사에 회신해야 합니다.
              + ③ 이용자는 「전기통신사업법」 제84조의2(전화번호의 거짓표시 금지 및 이용자 보호)에 의거 발신번호를 사전에 등록하고 등록된 번호로만 문자를 발송하여야 합니다. 단, 「전기통신사업법」 등의 관련 법률에서 예외로 허용한 경우는 제외하며, 만약 정당하지 않은 방법으로 전화번호를 변경하여 발신하는 경우, 관련 법규에 따라 처벌받을 수 있습니다.
              + ④ 이용자는 알림톡 또는 친구톡 서비스를 이용 시, 수신자가 발신자를 정확하게 식별할 수 있는 발신 프로필을 사용하여야 하며 해당사항에 틀림이 없는지 지속적으로 확인해야 합니다.
              + ⑤ 이용자는 회사에 실제로 연락이 가능한 이메일, 휴대전화번호 등의 정보를 제공하고 해당 정보를 최신으로 유지하여야 하며, 회사의 통지를 확인하여야 합니다.
              + ⑥ 회사는 이용자가 제1항부터 제4항까지의 의무를 위반하는 경우, 이용자의 서비스 이용을 정지하고 일방적으로 이용계약을 해지할 수 있습니다.
              + ⑦ 회사와 거래하는 문자재판매사업자는 전송자격인증을 받고 전송자격인증제운영규정을 준수해야 합니다. +
            • +
            +

            제4장 회원의 권리에 관한 조치

            +
              +
            • 12조(동의의 철회)회사는 이용자가 서비스 화면에서 자신의 개인정보에 대한 수집, 이용 또는 제공에 대한 동의를 철회할 수 있도록 필요한 조치를 취해야 합니다.
            • +
            • 13조(민원처리)① 회사는 전화, 전자우편 또는 서비스 화면의 상담창구 등을 통하여 이용고객의 불만 등 민원을 접수합니다.
              + ② 민원의 처리는 담당자가 직접 전화를 통해 즉시 처리하는 것을 원칙으로 하되, 전자우편 또는 서비스 화면의 상담청구 등을 통한 민원접수 처리는 영업일 기준 24시간 이내에 처리하며, 각 민원 유형별 처리절차 및 처리기간은 다음과 같습니다.
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              민원형태유 형원 인처리절차처리기간 (영업일 기준)
              서비스 관련통신 장애회사 귀책사과 및 품질개선2일
              시스템 장애회사 귀책사과 및 품질개선2일
              이용자 귀책대고객 설명2일
              요금 관련청구 요금 이의회사 귀책과금 전 : 비과금 요청3일
              과금 후 : 환불3일
              이용자 귀책대고객 설명2일
              기타기타 이의회사/이용자 귀책사과 및 품질개선2일
              +
            • +
            +

            제5장 서비스의 제공 및 이용

            +
              +
            • 14조(서비스의 제공, 변경 및 중단)① 회사는 이용자에게 다음과 같은 서비스를 제공합니다.
              +
                +
              1. 1. 문자메시지 대량발송 서비스
              2. +
              3. 2. 카카오톡 알림톡 및 친구톡 등 대량발송 서비스
              4. +
              5. 3. 주소록 서비스
              6. +
              7. 4. 나만의 맞춤문자 제작서비스
              8. +
              9. 5. 팩스 대량발송 서비스
              10. +
              11. 6. 기타 회사가 추가 개발하거나 다른 회사와의 제휴계약 등을 통해 이용자에게 제공하는 일체의 서비스
              12. +
              + ② 회사는 제1항에서 정한 서비스를 변경하여 제공할 수 있으며, 그 변경될 서비스의 내용 및 제공일자를 제9조에서 정한 방법으로 이용자에게 통지합니다.
              + ③ 서비스는 연중무휴, 1일 24시간 제공함을 원칙으로 합니다. 다만, 회사는 컴퓨터 등 정보통신설비의 점검ㆍ보수ㆍ교체, 고장, 이용폭주, 통신두절 또는 운영상의 상당한 이유가 있는 경우 서비스의 제공을 일시적으로 중단할 수 있으며, 이 경우 제9조에서 정한 방법으로 이용자에게 통지합니다. 다만, 사전에 통지할 수 없는 부득이한 사유가 있는 경우 이를 사후에 통지할 수 있습니다.
              + ④ 회사는 서비스의 제공에 필요한 경우 정기점검을 실시할 수 있으며, 정기점검 시간은 서비스 제공화면에 공지한 바에 따릅니다.
              + ⑤ 회사는 운영상, 기술상의 필요에 따라 제공하고 있는 서비스의 전부 또는 일부를 변경할 수 있으며, 서비스 페이지의 UIㆍUXㆍ디자인ㆍ콘텐츠 등은 사전예고 없이 수정될 수 있습니다.
              + ⑥ 회사는 무료로 제공되는 서비스의 전부 또는 일부를 회사의 정책 및 운영의 필요상 수정, 중단, 변경할 수 있습니다.
              + ⑦ 회사는 천재지변, 시스템(통신) 장애 및 점검, 서비스 양도 및 폐지(휴지) 등으로 인해 서비스 제공이 불가한 경우 다음과 같이 처리합니다.
              +
                +
              1. 1. 천재지변 등을 제외한 서비스 제공이 불가능한 경우 회원에게 사전 공지합니다.
              2. +
              3. 2. 천재지변 등을 제외한 서비스 제공이 불가능한 경우 회원에 사전 공지 없이 서비스를 중단하였을 시, 이에 대한 회원에 따른 손해를 확인 후 보상 및 할인 청구합니다.
              4. +
              5. 3. 회사는 사업의 전부 및 일부를 휴업 또는 폐업하고자 할 때에는 그 휴업 또는 폐업 예정일 30일 전까지 그 내용을 회원에게 이메일, 홈페이지 등을 이용하여 공지합니다.
              6. +
              +
            • +
            • 15조(서비스 이용의 제한 또는 정지)① 회사는 이용자가 이 약관의 의무를 위반하거나 서비스의 정상적인 운영을 방해한 경우 서비스 이용을 제한하거나 정지할 수 있습니다.
              + ② 제1항에도 불구하고 「주민등록법」을 위반한 명의도용 및 결제도용, 「저작권법」을 위반한 불법프로그램의 제공 및 운영방해, 「정보통신망법」을 위반한 불법스팸 발송 및 불법통신, 해킹, 악성프로그램의 배포, 접속권한 초과행위 등과 같이 관련 법을 위반한 경우에는 즉시 영구 이용정지 할 수 있습니다.
              + ③ 제2항에 따른 영구 이용정지 시 서비스 내의 금액, 포인트, 혜택 및 권리 등은 모두 소멸되며 회사는 이에 대해 별도로 보상하지 않습니다.
              + ④ 회사는 이용자가 다음 각 호의 어느 하나에 해당하는 경우, 30일간 당해 서비스의 이용을 즉시 정지(전부 또는 일부) 할 수 있으며, 이용정지 등의 원인이 된 사유가 완전히 해소되기 전까지는 이용정지 등의 조치를 해제하지 아니할 수 있습니다.
              +
                +
              1. 1. 방송통신위원회ㆍ한국인터넷진흥원ㆍ과학기술정보통신부ㆍ전송사 등(이하 “관계기관”이라 한다)이 불법스팸 등 불법행위의 전송사실을 확인하여 이용정지를 요청하는 경우
              2. +
              3. 2. 이용자가 전송하는 광고로 인하여 회사의 서비스 제공에 장애를 야기하거나 야기할 우려가 있는 경우
              4. +
              5. 3. 이용자가 전송하는 광고의 수신자가 불법스팸으로 신고하는 경우
              6. +
              7. 4. 이용자에게 제공하는 서비스가 불법스팸 전송에 이용되고 있는 경우
              8. +
              9. 5. 전송한 광고성 정보가 불법스팸임이 확인된 경우
              10. +
              11. 6. 불법스팸 전송으로 과태료가 부과된 경우
              12. +
              13. 7. 회사에게 증빙서류 등을 통해 불법스팸 전송이 아님을 확인하여 주지 않고 1일 500건을 초과하는 메시지를 전송하는 경우
              14. +
              15. 8. 이용자가 발신번호를 변작하는 등 거짓으로 표시한 경우
              16. +
              17. 9. 관계기관이 발신번호 변작 등을 확인하여 이용 정지를 요청하는 경우
              18. +
              19. 10. 서비스의 안정적 운영을 방해할 목적으로 다량의 정보를 전송하거나 정보통신설비의 오동작 또는 시스템 보유 정보 파괴를 유발시키거나 유포하는 경우
              20. +
              21. 11. 이용자가 서비스 이용요금을 연체하는 경우
              22. +
              23. 12. 다른 이용자 또는 제3자의 지식재산권을 침해하거나 명예를 손상시킨 경우
              24. +
              + ⑤ 회사는 불법스팸을 전송하였다고 확인된 이용자가 이용 중인 다른 번호가 불법스팸에 악용되고 있거나, 악용될 우려가 있다는 객관적 정황이 있는 경우에는 그 다른 번호도 이용 정지할 수 있습니다.
              + ⑥ 회사는 서비스 이용을 정지 또는 제한하는 경우, 그 사실을 당해 이용자에게 통지합니다. 다만, 미리 통지하는 것이 곤란한 경우에는 이용정지 또는 제한 후 통지할 수 있습니다.
              + ⑦ 회사는 이용자의 정보가 부당한 목적으로 사용되는 것을 방지하고 보다 원활한 서비스 제공을 위하여 12개월 이상 계속해서 로그인을 포함한 서비스 이용이 없는 아이디를 휴면아이디로 분류하고 서비스 이용을 정지할 수 있습니다.
              + ⑧ 휴면아이디로 분류되기 30일 전까지 전자우편 등으로 휴면아이디로 분류된다는 사실, 일시 및 개인정보 항목을 이용자에게 통지하며, 휴면아이디로 분류 시 개인정보는 서비스 이용중인 개인정보와 별도 분리하여 보관합니다. 이때, 보관되는 정보는 보관 외 다른 목적으로 이용되지 않으며, 관련 업무 담당자만 열람할 수 있도록 접근을 제한합니다.
              + ⑨ 이용자는 휴면아이디 보관기간 내에 로그인을 통해 휴면아이디 상태를 해제할 수 있습니다. +
            • +
            • 16조(발송량의 제한)① 회사는「정보통신망법」에서 금지하는 대량의 불법스팸 전송을 방지하기 위하여 이용자의 아이디당 1일 500건을 초과하는 문자 메시지 발송을 제한할 수 있습니다. 단, 이용자가 제출하는 증빙서류 등을 통해 불법 스팸 전송이 아님을 확인할 수 있는 경우 초과 전송이 가능하도록 예외를 인정할 수 있습니다.
              + ② 제1항 단서에 따라 이용자가 제출한 증빙서류 등을 통해 불법스팸 전송이 아님을 확인하였음에도, 이용자의 메시지 발송량이 과다할 경우 회사는 발송을 제한할 수 있습니다.
              + ③ 친구톡 메시지는 매일 20시부터 익일 08시까지 전송이 제한됩니다. +
            • +
            • 17조(계약의 해지)① 이용자는 본인이 직접 서비스를 통하여 이용계약의 해지를 요청할 수 있으며, 회사는 회사에서 정한 소정의 양식에 의하여 이를 즉시 처리합니다.
              + ② 회사는 이용자가 다음 각 호의 어느 하나에 해당하는 경우, 이용자의 동의 없이 이용계약을 해지할 수 있습니다.
              +
                +
              1. 1. 이용자가 약관을 위반하고 일정 기간 이내에 위반 내용을 해소하지 않는 경우
              2. +
              3. 2. 회사의 서비스 제공목적 외의 용도로 서비스를 이용하거나 제3자에게 임의로 서비스를 임대한 경우
              4. +
              5. 3. 관계기관이 불법스팸 등 불법행위의 전송사실을 확인하여 계약해지를 요청하는 경우
              6. +
              7. 4. 제11조에 따른 이용자의 의무를 위반한 경우
              8. +
              9. 5. 제15조제4항에 따른 이용정지를 당한 이후 1년 이내에 이용정지 사유가 재발한 경우
              10. +
              11. 6. 제15조제4항에 따른 이용정지 기간 내에 이용 정지 사유를 해소하지 않고, 이용 정지일로부터 12개월이 경과한 경우
              12. +
              13. 7. 회사의 이용요금 등의 납입청구에 대하여 이용자가 이용요금을 체납할 경우
              14. +
              15. 8. 타인의 명의로 계약하였거나 계약 시 제출한 자료 및 정보가 허위 또는 누락되었음이 확인된 경우
              16. +
              17. 9. 불특정 다수를 대상으로 무차별적으로 불법스팸을 전송한 사실이 확인된 경우
              18. +
              19. 10. 이용자가 전송한 광고성 정보에 대해 회사가 한국인터넷진흥원에 불법스팸 유무확인을 요청하여 불법스팸임이 확인된 경우
              20. +
              21. 11. 수신처를 자동으로 생성하여 불특정 다수에게 광고성 메시지를 전송한 경우
              22. +
              23. 12. 전송자를 확인하지 못하게 할 목적으로 발신번호를 변작하여 영리목적의 광고성 정보를 전송한 사실이 확인된 경우
              24. +
              25. 13. 이용자가 금융기관으로부터 거래정지 처분을 받고 이용계약을 수행할 능력이 없다고 인정되는 경우
              26. +
              27. 14. 이용자가 행정청 등으로부터 영업취소, 허가취소, 영업정지 등의 처분을 받은 경우
              28. +
              29. 15. 이용자가 어음 및 수표의 부도, 파산신고 또는 회생절차의 신청 등 경영상 중대한 사유가 발생하여 이용계약을 수행할 능력이 없다고 인정되는 경우
              30. +
              + ③ 회사는 불법스팸을 전송하였다고 확인된 이용자가 이용 중인 다른 번호가 불법스팸에 악용되고 있거나 악용될 우려가 있다는 객관적 정황이 있는 경우에는 그 다른 번호에 대한 서비스도 해지할 수 있습니다.
              + ④ 회사는 제2항 및 제3항에 따른 해지시, 이를 이용자에게 통지하여야 하며, 만약 이용자의 책임 있는 사유로 통지할 수 없는 경우에는 이용자가 사전 제출한 정보로 통지를 발송한 때에 도달된 것으로 봅니다. 다만, 회사가 긴급하게 해지할 필요가 있다고 인정하는 경우에는 지체 없이 사후 통지(재고지, 홈페이지 또는 이메일 공지)로 대체 할 수 있습니다.
              + ⑤ 회사는 휴면아이디가 휴면상태로 4년 이상 지속될 경우 이용계약을 해지할 수 있습니다. +
            • +
            • 18조(각종 자료의 저장기간)회사는 서비스별로 이용자의 필요에 의해 저장하고 있는 자료에 대하여 일정한 저장기간을 정할 수 있으며 필요에 따라 그 기간을 변경할 수 있습니다. +
            • +
            • 19조(게시물의 저작권)① 이용자가 서비스 페이지에 게시하거나 등록한 자료의 지적재산권은 이용자에게 있습니다. 단, 회사는 서비스 홈페이지의 게재권을 가지며 회사의 서비스 내에 한하여 이용자의 게시물을 활용할 수 있습니다.
              + ② 회사는 이용자가 서비스에 게재한 정보의 정확성 및 신뢰도 등 내용에 대해서는 책임을 지지 않습니다.
              + ③ 이용자는 서비스를 이용하여 얻은 정보를 가공, 판매하는 행위 등 게재된 자료를 상업적으로 이용할 수 없으며 이를 위반하여 발생하는 제반 문제에 대한 책임은 이용자 본인에게 있습니다.
              + ④ 회사는 이용자가 서비스에 게시 또는 게재하거나 서비스를 통해 전송·수신한 내용물 및 그 결과에 대하여 책임지지 않으며, 다음 각 호의 어느 하나에 해당하는 경우 게시물을 임의로 삭제할 수 있습니다.
              +
                +
              1. 1. 타인을 비방하거나 명예를 손상시키는 내용인 경우
              2. +
              3. 2. 공공질서 및 미풍양속에 위반되는 내용인 경우
              4. +
              5. 3. 안정적 서비스 제공에 지장을 주거나 줄 우려가 있는 경우
              6. +
              7. 4. 범죄행위에 관련된다고 판단되는 경우
              8. +
              9. 5. 회사 및 타인의 지적재산권 등 기타 권리를 침해하는 내용인 경우
              10. +
              11. 6. 특정업체 및 제품의 선전 등 기타 상용목적으로 게시되는 내용인 경우
              12. +
              13. 7. 입력된 정보를 무단으로 개조하는 경우
              14. +
              15. 8. 타 이용자의 아이디 및 비밀번호를 도용하는 경우
              16. +
              17. 9. 게시판의 목적에 맞지 않는 사이버 시위 및 도배 목적의 내용인 경우
              18. +
              19. 10. 기타 관계 법령에서 위반된다고 판단하는 경우
              20. +
              +
            • +
            • 20조(지적재산권의 보호)① 회사가 작성한 저작물에 대한 저작권 및 기타 지적재산권은 모두 회사에 귀속하며 서비스 외에서의 복제, 전송, 배포 등의 일체의 이용은 금지됩니다.
              + ② 이용자는 서비스를 이용함으로써 얻은 정보를 회사의 사전 승낙 없이 임의 가공, 판매, 복제, 송신, 출판, 배포, 방송, 기타 방법에 의하여 영리목적으로 이용하거나 제3자에게 이용하게 하여서는 안됩니다.
              + ③ 회사가 제공하는 모든 콘텐츠 및 서비스에 대해서는 이용자가 단순 링크의 방법이나 기타 전자적인 방법을 통하여 본 사이트 외에서 이용하는 것은 상업적 목적 여부를 불문하고 금지됩니다. +
            • +
            +

            제6장 요금 및 환불 등

            +
              +
            • 21조(요금 등의 산정)① 회사가 제공하는 유료서비스 이용과 관련하여 이용자가 납부하여야 할 요금은 이용료 안내에 게재한 바에 따릅니다.
              + ② 요금 등은 서비스별로 정하는 바에 따라 선결제를 기본으로 하며, 필요에 따라 회사와 별도 계약을 통해 후납할 수 있습니다.
              + ③ 요금의 결제는 신용카드, 무통장입금, 휴대폰결제 등 회사가 정한 결제수단으로 합니다.
              + ④ 회사는 제1항부터 제3항까지에 따른 결제금액을 디지털 충전금(이하 “충전금”이라 한다)으로 적립하여 운영하며, 해당 충전금은 회사가 제공하는 서비스를 이용하는 시점에서 차감이 됩니다.
              + ⑤ 제2항에 따른 후납 방식의 요금산정 방식은 다음과 같습니다.
              +
                +
              1. 1. 회사는 이용자의 해당월(M월) 1일부터 말일까지의 서비스에 대한 이용요금을 익월(M+1월) 5일까지 해당월(M월) 말일자 전자세금계산서 발행을 통해 일괄 청구합니다.
              2. +
              3. 2. 이용자는 제1호에 따라 회사가 청구한 서비스 이용요금을 익월(M+1월) 15일까지 회사에 현금으로 지급합니다.
              4. +
              5. 3. 이용자와 회사의 정산 금액에 상호 2% 및 일금 5만원 이내의 차이가 있는 경우 회사의 정산자료를 기준으로 합니다.
              6. +
              7. 4. 회사가 제공하는 서비스에 대한 이용요금은 계좌이체의 방법으로 결제할 수 있습니다.
              8. +
              9. 5. 이용자는 회사가 동의하는 경우 서비스 이용요금의 납부시기 및 방법을 변경할 수 있습니다.
              10. +
              11. 6. 이용자는 서비스에 대한 이용요금을 성실히 납부하여야 하며, 이용요금의 납부 지연 시에는 연 이율 6%의 지연이자를 회사에 지급하여야 합니다.
              12. +
              + ⑥ 이용자가 타인의 결제수단을 이용하여 이용요금을 결제한 경우 회사는 이에 대한 어떠한 책임도 지지 않습니다.
              + ⑦ 카카오가 카카오톡 비즈메시지의 단가를 변경하거나, 통신사의 통신비 변경 시 이용자 또는 회사는 상호간에 이용요금의 변경을 요청할 수 있으며, 이 경우 상호 협의하여 이용요금을 결정합니다. 단, 양 당사자 간에 요구한 이용요금 변경에 대하여 이용자 또는 회사가 동의하지 않을 경우 이용자 또는 회사는 계약해지 30일 전에 서면통보하고 계약을 해지할 수 있습니다.
              + ⑧ 이용자는 회사에 지급할 이용요금에 대한 지급보증을 위하여 월 (예상)이용요금의 2배에 해당하는 보증보험증권, 예치금, 기타 이에 상응하는 담보를 회사가 요구할 경우 회사에게 제출하여야 하며, 회사는 제공하는 서비스의 매월 이용요금에 따라 그 한도를 조정하여 담보금액 증액을 이용자에게 요구할 수 있습니다. 단, 그에 따른 부대 비용은 이용자의 비용으로 합니다.
              + ⑨ 회사의 요구에도 불구하고 이용자가 제8항의 담보를 미제출할 경우 회사는 이용자의 서비스 이용을 제한할 수 있습니다.
              + ⑩ 이용자는 이용자의 관리 소홀 및 부주의로 인해 이용요금이 발생될 경우, 이에 대한 이용요금을 자신의 비용으로 모두 부담해야 합니다. +
            • +
            • 22조(요금 등의 이의신청)① 이용자는 청구된 요금 등에 대하여 이의가 있는 경우 청구일로부터 3개월 이내에 회사에 이의신청을 할 수 있습니다.
              + ② 회사는 제1항의 이의신청 접수 후 2주 이내에 해당 이의신청의 타당성 여부를 조사하여 그 결과를 신청자에게 통지합니다.
              + ③ 부득이한 사유로 인하여 제2항에서 정한 기간 내에 이의신청 결과를 통지할 수 없는 경우에는 그 사유와 처리기한을 다시 명시하여 신청자에게 통지합니다. +
            • +
            • 23조(불법 면탈 요금의 청구)① 이용자가 불법으로 이용요금 등을 면탈할 경우에는 면탈한 금액의 2배에 해당하는 금액을 청구합니다.
              + ② 제21조제2항에 따른 후납 고객이 이용요금을 2개월 이상 연체한 경우에는 신용기관에 신용불량자로 등록할 수 있습니다. +
            • +
            • 24조(요금 등의 환불 및 소멸)① 회사는 요금 등의 과납 또는 오납이 있을 경우 그 과납 또는 오납된 요금을 전액 환불합니다. 단, 이용자의 책임 있는 사유로 과오납금이 발생한 경우, 회사가 과오납금을 환불하는데 소요되는 실비용은 이용자가 부담하여야 합니다.
              + ② 환불 시 결제금액에 따라 무상 증여된 충전금 및 포인트는 제외하며, 충전금 잔액의 10%에 해당하는 금액(PG사 결제수수료 및 송금비용 등)을 환불수수료로 공제한 후 환불하여 드립니다. 단, 요금환불은 환불요청 금액이 최소 1만원 이상인 경우에만 가능(1만원 미만 환불불가)합니다.
              + ③ 제2항의 경우 회사는 이용자가 환불을 요청(환급에 필요한 정보를 회사에 모두 제공한 경우에 한한다)한 시점으로부터 3영업일 이내에 이용자가 지정한 은행계좌로 반환요청 요금을 환불합니다. 단, 선납 시 결제방식이 취소가 가능하다면 결제 취소를 원칙으로 합니다.
              + ④ 환불을 원하는 이용자는 회사의 고객센터 또는 콜센터 등을 통하여 환불 신청 사유를 회사에 통지하고 이용자 본인이 직접 환불신청을 하여야 하며, 반드시 가입자 본인 명의의 통장에 대해서만 환불처리가 가능합니다.
              + ⑤ 제1항부터 제4항까지에도 불구하고, 다음 각 호의 어느 하나에 해당하는 경우, 잔여충전금은 금액과 상관없이 환불하지 않으며 자동 소멸됩니다.
              +
                +
              1. 1. 이용자가 별도의 환불 신청 없이 제17조제1항에 따른 해지를 하는 경우
              2. +
              3. 2. 회사가 이용자의 귀책사유로 인하여 제17조제2항 및 제3항에 따른 해지를 하는 경우
              4. +
              5. 3. 이용자가 불법스팸 발송 등 관련 법을 위반하여, 회사로부터 제15조제2항 및 제3항에 따른 영구 이용정지처리를 받은 경우
              6. +
              + ⑥ 구매한 충전금 및 포인트의 유효기간은 충전일로부터 60개월이며, 회사는 소진일 30일 전에 고객에게 전자우편 등으로 해당내용을 통지합니다.
              + ⑦ 무료 획득 또는 이벤트 등으로 회사가 부여하는 포인트의 유효기간은 사유발생일로부터 12개월이며, 소진일 30일 전에 고객에게 전자우편 등으로 해당내용을 통지합니다.
              + ⑧ 충전금은 마지막 사용일(충전 이후 사용이 없었을 경우 충전일)로부터 5년이 경과하면 소멸됩니다.
              + ⑨ 회사는 불법스팸, 불법정보, 발신번호 조작, 명의도용 등과 관련하여 경ㆍ검찰의 조사 또는 수사가 진행중이거나, 민ㆍ형사상의 소가 진행중인 경우에는, 공범 의혹 제기 등을 고려하여 법원의 공식적인 판결 결정 없이는 보상을 실시하지 아니하며, 최종 판결을 받은 경우에도 제2항의 환불수수료를 제외한 차액을 환불합니다.
              + ⑩ 서비스가 정상적으로 이루어지지 못한 경우, 사용한 충전금이나 포인트는 최장 72시간 이내 자동 재충전 처리되며, 기타 서비스의 문제 발생 시 관리자의 확인 절차 후 그 이유가 정당할 때 신속히 처리합니다.
              + ⑪ 회사는 관계 법령의 변경 등 합리적인 사유 발생 및 회사 정책상 변경이 필요한 경우, 충전금 및 포인트 운영정책을 변경하여 운영할 수 있습니다. +
            • +
            +

            제7장 손해배상 및 기타사항

            +
              +
            • 25조(손해배상의 범위 및 청구)① 회사는 회사의 귀책사유로 인한 서비스 중단으로 인하여 이용자에게 손해가 발생한 경우 이를 배상할 수 있습니다. 단, 발생한 손해배상액의 총액은 이용자가 지불한 이용요금의 2배를 초과할 수는 없으며, 이미 정상적으로 발송된 건은 제외한 후 나머지 요금의 2배를 한도로 손해배상합니다. +
              + ※ 손해배상액 한도 = (총 결제금액 – 정상 서비스 이용금액) × 2
              + * 누적 결제 시에도 회사 귀책사유에 따른 결제건에 한하여 보상하며, 정상 서비스 이용에 따라 소진된 소멸 결제건에 대해서는 보상 미실시 +
              + ② 손해배상의 청구는 회사에 청구사유, 청구금액 및 산출근거를 객관적이고 명확히 기재하여 전자우편 또는 서면(공문, 등기)으로 신청하여야 합니다.
              + ③ 회사 및 타인에게 피해를 주어 피해자의 고발 또는 소송 제기로 인하여 손해배상이 청구된 이용자는 이에 응하여야 합니다.
              + ④ 이용자는 불법스팸, 불법정보, 발신번호 조작 등으로 인지되는 메시지 발송을 통해 회사에 손해를 끼치는 경우, 이를 배상하여야 합니다. +
            • +
            • 26조(면책)① 제25조에도 불구하고, 회사는 다음 각 호의 어느 하나의 사유로 서비스를 제공할 수 없는 경우, 이로 인하여 이용자에게 발생한 손해에 대해서는 책임을 부담하지 않습니다. +
                +
              1. 1. 천재지변 또는 이에 준하는 불가항력의 상태가 있는 경우
              2. +
              3. 2. 회사의 고의 또는 과실이 없는 사유로 인한 경우
              4. +
              5. 3. 이용자의 고의 또는 과실로 인하여 서비스 이용에 장애가 있는 경우
              6. +
              7. 4. 서비스 제공을 위하여 회사와 서비스 제휴계약을 체결한 제3자의 고의적인 서비스 방해가 있는 경우
              8. +
              9. 5. 회사에게 회선, 통신망, 전용선망을 제공하고 있는 이동통신사 또는 부가통신사업자, 카카오 측의 장애, 귀책사유로 인한 서비스의 불완전 및 불능으로 이용자 또는 제3자에게 야기된 손해
              10. +
              11. 6. 컴퓨터 등 정보통신설비의 점검ㆍ보수ㆍ교체ㆍ증설 등 서비스의 효율적 제공을 위해 계획된 서비스 중지 일정을 사전에 공지한 경우
              12. +
              13. 7. 해당 서비스나 디지털 콘텐츠의 품질, 성능, 정확도 또는 노력의 면에서 이용자가 불만족하는 경우
              14. +
              15. 8. 이용자가 게시 또는 전송한 자료의 내용
              16. +
              17. 9. 이용자 상호 간 또는 이용자와 제3자 상호 간 서비스를 매개로 하여 물품거래 등을 한 경우
              18. +
              19. 10. 제10조제7항에 따라 서비스 제공을 거절하거나, 제15조에 따라 이용자의 서비스 이용을 제한 또는 정지함으로써 발생할 수 있는 이용자의 손해
              20. +
              21. 11. 회사가 무료로 제공하는 서비스에 대하여 회사의 귀책사유로 이용자에게 서비스를 제공하지 못하는 경우
              22. +
              + ② 회사가 정상적으로 서비스를 제공한 경우, 이로 인하여 발생하는 이용자와 수신자 간의 모든 민ㆍ형사상 책임은 이용자에게 있으며, 회사는 제3자로부터의 어떠한 배상, 소송 등에 대하여도 책임을 면합니다. +
            • +
            • 27조(분쟁의 처리 및 관할법원)① 회사의 귀책사유가 명백히 인정되는 경우, 이용자는 회사를 상대로 소송 등을 제기하기 전에 우선 회사에 이를 알려 원만히 분쟁을 해결할 수 있도록 합니다.
              + ② 회사와 이용자는 개인정보에 관한 분쟁이 있을 경우 신속하고 효과적인 분쟁해결을 위하여 개인정보분쟁조정위원회에 그 처리를 의뢰할 수 있습니다.
              + ③ 회사와 이용자 간에 서비스 또는 이 약관에 관한 분쟁이 발생하여 소송을 할 필요가 있을 때에는 회사의 사업장소재지를 관할하는 법원을 관할법원으로 합니다. +
            • +
            +

            부칙

            +
              +
            • 1조(시행일)이 약관은 2025년 7월 30일부터 시행됩니다.
            • +
            • 2조(경과조치)2024년 11월 29일부터 시행되던 종전의 약관은 본 약관으로 대체합니다.
            • +
            +
            +

            이용약관 개정이력 보기

            +
            + +
            +
            +
            +
            + + +
            + +
            + +
            +
            + + + +
            + + + + \ No newline at end of file From 276afbb432daeb6e3a72f060c2c6410ce91277e0 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Tue, 22 Jul 2025 17:26:19 +0900 Subject: [PATCH 19/23] =?UTF-8?q?=EC=9D=B4=EC=9A=A9=EC=95=BD=EA=B4=80=2020?= =?UTF-8?q?25=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WEB-INF/jsp/web/com/webCommonFooter.jsp | 2 +- .../WEB-INF/jsp/web/com/webCommonHeader.jsp | 2 +- .../cop/bbs/TermsListAgreement_2025_Ajax.jsp | 441 ++++++++++++++++++ .../agree_private/agreeSelectVersion.jsp | 3 +- 4 files changed, 445 insertions(+), 3 deletions(-) create mode 100644 src/main/webapp/WEB-INF/jsp/web/cop/bbs/TermsListAgreement_2025_Ajax.jsp diff --git a/src/main/webapp/WEB-INF/jsp/web/com/webCommonFooter.jsp b/src/main/webapp/WEB-INF/jsp/web/com/webCommonFooter.jsp index 459e67ff..d01d06dc 100644 --- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonFooter.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonFooter.jsp @@ -27,7 +27,7 @@ function footerSiteLinkPageTwoGo (){
            diff --git a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp index 6a9f7fc6..71ddc8e0 100644 --- a/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/com/webCommonHeader.jsp @@ -1666,7 +1666,7 @@ function actionLogin_end(){
            • 공지사항
            • -
            • 이용약관
            • +
            • 이용약관
            • 자주하는 질문
            • 1:1 문의
            • 불편신고
            • diff --git a/src/main/webapp/WEB-INF/jsp/web/cop/bbs/TermsListAgreement_2025_Ajax.jsp b/src/main/webapp/WEB-INF/jsp/web/cop/bbs/TermsListAgreement_2025_Ajax.jsp new file mode 100644 index 00000000..775b2cd1 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/web/cop/bbs/TermsListAgreement_2025_Ajax.jsp @@ -0,0 +1,441 @@ + <%-- + Class Name : FaqListAjax.jsp + Description : (사용자)자주하는 질문 Ajax + Modification Information + + 수정일 수정자 수정내용 + ------- -------- --------------------------- + 2009.03.19 이삼섭 최초 생성 + 2011.08.31 JJY 경량환경 버전 생성 + + author : 공통서비스 개발팀 이삼섭 + since : 2009.03.19 +--%> +<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> + + + + + + + + +
              +
              +

              제1장 총칙

              +
                +
              • 1조(목적)이 약관은 주식회사 아이티앤(이하 “회사”라 한다)이 제공하는 인터넷 서비스 문자온(www.munjaon.co.kr, 이하 “서비스”라 한다)을 이용함에 있어 회사와 이용자의 권리, 의무, 책임사항 및 기타 필요한 사항을 규정함을 목적으로 합니다.
              • +
              • 2조(용어의 정의)이 약관에서 사용하는 용어의 정의는 다음과 같습니다.
                +
                  +
                1. 1. 문자온(문자ON) : 회사의 서비스명으로 이용자가 전송하고자 하는 내용ㆍ정보 등을 문자메시지, 멀티미디어메시지, 카카오톡을 통한 알림톡 또는 친구톡, 팩스 등 다양한 메시지 형태로 변화시켜 전송하는 서비스
                2. +
                3. 2. 이용자 : 회사에 개인정보를 제공하여 이용계약을 체결하고, 이용자 아이디(ID)를 부여받은 자로서 회사가 제공하는 서비스를 지속적으로 이용할 수 있는 자
                4. +
                5. 3. 아이디(ID) : 이용자의 식별과 서비스 이용을 위하여 이용자가 정하고 회사가 승인하는 문자와 숫자의 조합
                6. +
                7. 4. 비밀번호 : 이용자가 부여 받은 아이디(ID)와 일치된 이용자임을 확인하고, 이용자의 비밀을 보호하기 위해 이용자가 설정한 문자와 숫자의 조합
                8. +
                9. 5. 휴면아이디 : 12개월 이상 계속해서 로그인을 포함한 서비스 이용이 없는 아이디
                10. +
                11. 6. 해지 : 회사와 이용자 간 맺은 이용계약을 해약하는 것
                12. +
                13. 7. 문자메시지 : 정보통신망을 통해 수신자에게 발송되는 메시지(이하 “메시지”라 한다)
                14. +
                15. 8. 스팸메시지 : 정보통신망을 통해 수신자의 명시적인 사전 동의 없이 일방적으로 전송 또는 게시되는 영리목적의 광고성 정보
                16. +
                17. 9. 불법스팸메시지 : 「정보통신망 이용촉진 및 정보보호 등에 관한 법률(이하 “정보통신망법”이라 한다)」 제50조부터 제50조의8을 위반하여 전송 또는 게시되는 영리목적의 광고성 정보
                18. +
                19. 10. 문자피싱메시지 : 전자금융사기를 목적으로 전송 또는 게시되는 정보
                20. +
                21. 11. 스미싱메시지 : 메시지 내용 중 인터넷 주소를 클릭하면 악성코드가 설치되어 수신자가 모르는 사이에 금전적 피해 또는 개인ㆍ금융정보 탈취 피해를 야기하는 메시지
                22. +
                23. 12. 불법정보 : 「정보통신망법」 제44조의7에 따라 정보통신망을 통한 유통을 금지하는 음란물, 명예훼손, 사이버스토킹, 해킹ㆍ바이러스, 청소년 유해물 표시위반, 도박ㆍ사해행위, 개인정보거래, 총포 등 불법제조, 국가안보 위반, 기타 그 밖에 범죄를 목적으로 하거나 교사 또는 방조하는 내용의 정보
                24. +
                25. 13. 카카오톡 : 주식회사 카카오(이하 “카카오”)가 운영하는 모바일 메신저 기반의 실시간 커뮤니케이션 서비스로 알림톡, 친구톡 또는 해당 서비스를 제공하는 어플리케이션
                26. +
                27. 14. 알림톡 : 주문, 예약, 결제, 배송 정보 등 「정보통신망법」 및 한국인터넷진흥원 지침상 광고성 정보의 예외로 분류되는 정보 중 일부를 카카오톡 채널 추가 여부와 상관 없이 발송 가능한 메시지
                28. +
                29. 15. 친구톡 : 발신자의 카카오톡 채널과 채널 추가된 카카오톡 이용자에게만 발송 가능한 메시지
                30. +
                31. 16. 카카오톡 채널 : 카카오의 공식 계정 서비스 중 하나로서 기업 및 단체가 카카오톡 이용자와 커뮤니케이션 할 수 있는 서비스
                32. +
                33. 17. 발신 프로필(채널ID) : 카카오톡 채널 개설을 통해 확보한 알림톡 또는 친구톡을 발송하는 주체에 대한 식별정보
                34. +
                35. 18. 전송자격 인증제 : 「전기통신사업법」 제2조제14호나목의 특수한 유형의 부가통신역무를 제공하는 사업자가 영리 목적의 광고성 정보를 발송하는 경우 사전에 문자중계사 또는 인증업무를 위탁받은 운영기관이 심사를 통해 인증을 부여하는 제도
                36. +
                +
              • +
              • 3조(약관의 게시와 개정)① 회사는 이 약관의 내용을 서비스 화면에 이용자가 확인하기 쉽게 게시하며, 이용자가 이에 동의함으로써 그 효력이 발생합니다.
                + ② 회사는 「약관의 규제에 관한 법률」, 「정보통신망법」, 「전자문서 및 전자거래 기본법」, 「전자상거래 등에서의 소비자보호에 관한 법률(이하 “전자상거래법”이라 한다」 등 관련 법을 위배하지 않는 범위에서 이 약관을 개정할 수 있습니다.
                + ③ 회사가 이 약관을 개정하는 경우에는 적용일자 및 개정사유를 명시하여 현행약관과 함께 제1항의 방식에 따라 그 적용일자 7일 전부터 적용일자 전까지 공지합니다. 다만, 이용자의 권리 또는 의무에 관한 중요한 규정의 변경은 최소한 30일 전에 공지하고 일정기간 서비스 내 공지사항, 전자우편 등의 전자적 수단을 통해 이를 통지하도록 합니다. +
                + ④ 회사가 제3항에 따라 개정약관을 공지 또는 통지하면서 이용자에게 약관 변경 적용일까지 거부의사를 표시하지 않으면 동의한 것으로 본다는 뜻을 명확하게 공지 또는 통지하였음에도 이용자가 명시적으로 거부의 의사표시를 하지 아니한 경우에는 개정약관에 동의한 것으로 봅니다.
                + ⑤ 이용자는 개정약관에 동의하지 않는 경우 서비스 이용을 중단하고 이용계약을 해지할 수 있습니다.
                + ⑥ 새로운 서비스가 개설될 경우 별도의 명시된 설명이 없는 한 이 약관에 따라 제공됩니다.
                + ⑦ 이용자는 약관의 변경에 대하여 주의의무를 다하여야 하며, 변경된 약관으로 인한 이용자의 피해는 회사에서 책임지지 않습니다.
                + ⑧ 이 약관의 적용기간은 이용자의 가입일부터 해지일까지로 합니다. 단, 채권 또는 채무관계가 있을 경우에는 채권, 채무의 완료일까지로 규정합니다. +
              • +
              • 4조(약관 외 준칙)① 이 약관은 회사가 제공하는 서비스에 관하여 별도의 정책 및 운영규칙과 함께 적용됩니다.
                + ② 이 약관에서 정하지 아니한 사항 및 해석에 관하여는 관계법령 또는 상관례에 따릅니다. +
              • +
              +

              제2장 서비스 이용계약 및 관리

              +
                +
              • 5조(서비스 이용계약)① 서비스 이용계약은 이용자가 되고자 하는 자가 이 약관을 읽고 약관에 동의를 한 다음 회사가 정한 소정의 양식에 따라 회원가입을 신청하며, 회사는 특별한 하자가 없는 한 접수의 순서대로 등록신청을 승낙하는 것을 원칙으로 합니다. 단, 회사는 다음 각 호의 어느 하나에 해당하는 경우에는 승낙을 하지 않거나 추후에 이용계약을 해지할 수 있습니다. +
                +
                  +
                1. 1. 실명이 아니거나 타인의 명의를 이용하여 신청한 경우
                2. +
                3. 2. 서비스 이용계약 신청서의 내용을 허위로 기재하여 신청한 경우
                4. +
                5. 3. 만 18세 미만의 가입자인 경우
                6. +
                7. 4. 가입신청자가 이 약관에 의하여 과거에 회원 자격을 상실한 적이 있는 경우(단, 회사의 회원 재가입 승낙을 받은 경우에는 예외로 함)
                8. +
                9. 5. 이용자의 귀책사유로 인하여 승인이 불가능한 경우
                10. +
                11. 6. 이용자가 서비스의 정상적인 제공을 저해하거나 다른 이용자의 서비스 이용에 지장을 줄 것으로 예상되는 경우
                12. +
                13. 7. 부정한 용도로 서비스를 이용할 것으로 예상되는 경우
                14. +
                15. 8. 사회의 안녕과 질서 혹은 미풍양속에 반할 우려가 있다고 회사가 인정하는 경우
                16. +
                17. 9. 기타 회사가 정한 서비스 이용계약 등록신청 요건에 부합하지 않는 경우
                18. +
                + ② 온라인 등록신청 양식에 기재 또는 첨부하는 모든 정보는 진실된 것으로 간주하며, 거짓된 정보를 기재하는 경우 서비스 이용에 제한을 받을 수 있습니다.
                + ③ 이용자는 반드시 이용자 본인의 실명과 휴대폰 번호를 기재하여야 하며, 실명으로 등록하지 않은 경우 서비스 이용에 제한을 받게 됩니다.
                + ④ 회사는 서비스 관련 설비에 여유가 없거나 기술상 또는 업무상 문제가 있는 경우 등에는 승낙을 유보할 수 있습니다.
                + ⑤ 서비스 이용계약의 성립시기는 회사가 가입완료를 신청절차 상에서 표시한 시점으로 합니다.
                + ⑥ 회사는 이용자에 대하여 회사정책에 따라 등급별로 구분하여 이용시간, 이용횟수, 서비스 메뉴 등을 세분화하여 이용에 차등을 둘 수 있습니다.
                + ⑦ 회사는 서비스의 대량이용 등 특별한 이용에 관하여는 별도 계약을 통해 제공할 수 있습니다.
                + ⑧ 회사는 전송자격인증제에 따른 전송자격 인증을 받지 않거나, 인증이 취소된 사업자와는 거래를 하지 아니할 수 있습니다. +
              • +
              • 6조(개인정보의 처리)① 회사는 관계 법령이 정하는 바에 따라 적법하고 공정한 수단에 의하여 이용계약의 성립 및 이행에 필요한 최소한의 개인정보를 수집하고, 이용자의 개인정보를 보호하기 위해 노력합니다.
                + ② 제1항에도 불구하고, 이용자가 게시판 등 온라인 상에서 자발적으로 제공하는 개인정보는 다른 사람이 수집하여 사용할 가능성이 있으므로 이러한 위험은 이용자 자신이 책임을 집니다.
                + ③ 회사는 개인정보의 수집 시 관계 법령에 따라 「개인정보처리방침」에 그 수집범위 및 목적을 사전에 고지합니다.
                + ④ 회사는 회사가 제공하는 서비스를 이용하는 이용자를 대상으로 해당 서비스의 양적ㆍ질적 향상을 위해 이용자의 개인 식별이 가능한 개인정보를 이용자의 동의를 받아 수집하여 회사의 각종 서비스 등에 사용할 수 있습니다.
                + ⑤ 회사는 서비스 제공과 관련하여 알고 있는 이용자의 개인정보를 본인의 승낙 없이 제3자에게 누설 및 배포하지 않습니다. 다만, 관계 법령에 의한 관계기관으로부터의 요청 등 법률의 규정에 따른 적법한 절차에 의한 경우에는 그러하지 않습니다.
                + ⑥ 개인정보의 보호 및 이용에 관하여는 관계 법령 및 회사의 「개인정보처리방침」이 적용됩니다. 단, 회사의 공식 사이트 이외 링크된 사이트에 대하여는 회사의 개인정보처리방침이 적용되지 않습니다.
                + ⑦ 회사는 이용자의 시스템에 스파이웨어 등 기타 바이러스의 감염 등으로 인한 개인정보유출에 대해서는 책임을 지지 않으며, 이용자는 주기적으로 자신의 사용 시스템의 사용 여부를 관리할 책임을 가지고 있습니다. +
              • +
              • 7조(아이디 및 비밀번호 관리에 대한 의무)① 이용자는 아이디와 비밀번호에 관한 관리책임을 지며, 이를 제3자가 이용하도록 하여서는 안됩니다.
                + ② 회사는 이용자의 아이디가 다음 각 호의 어느 하나에 해당하는 경우에는 해당 아이디의 활용을 제한할 수 있습니다.
                +
                  +
                1. 1. 개인정보 유출 우려가 있는 경우
                2. +
                3. 2. 반사회적 또는 미풍양속에 어긋나는 경우
                4. +
                5. 3. 회사 및 회사의 운영자로 오인할 우려가 있는 경우
                6. +
                + ③ 이용자는 아이디 및 비밀번호가 도용되거나 제3자가 사용하고 있음을 인지한 경우에는 이를 즉시 회사에 통지하고 회사의 안내에 따라야 합니다.
                + ④ 회사는 이용자가 제3항에 따른 통지를 하지 않거나, 통지를 한 이후 회사의 안내에 따르지 않아 발생한 불이익에 대하여 책임지지 않습니다.
                + ⑤ 회사는 보안 강화를 위해, 신규 가입한 이용자 또는 마지막 로그인 시점으로부터 3개월간 로그인하지 않은 이용자의 부정로그인을 방지하는 보안 로그인 기능(이용자가 사전에 등록한 휴대폰 번호에 대한 점유 인증이 완료된 경우에만 서비스 홈페이지 로그인이 가능하도록 하는 기능)을 이용자의 기본 로그인 방식으로 설정할 수 있습니다.
                + ⑥ 이용자가 제5항에 따른 보안 로그인 설정을 해제함으로써 발생하는 손해에 대하여 회사는 책임을 지지 않습니다. +
              • +
              • 8조(이용자정보의 변경)이용자는 이용 신청 시 기재한 이용자정보가 변경되었을 경우 즉시 온라인으로 직접 수정하여야 하며, 관리자에게도 수정을 요청할 수 있습니다. 만약, 이용자가 이용자정보를 변경하지 않아 발생하는 문제에 대하여는 회사가 책임지지 않습니다. +
              • +
              • 9조(이용자에 대한 통지)① 회사가 이용자에 대한 통지를 하는 경우, 이 약관에서 별도로 정함이 없는 한 이용자가 등록한 이메일, 휴대전화, 문자메시지 등을 통해 통지할 수 있습니다. 단, 이용자가 해당 정보를 허위로 제출하거나 변경된 정보를 회사에 알리지 않은 경우에는, 이용자가 사전 제출한 정보로 통지를 발송한 때에 도달된 것으로 봅니다.
                + ② 회사는 전체 또는 불특정 다수 이용자에 대한 통지의 경우 7일 이상 서비스에 게시함으로써 제1항의 개별 통지에 갈음할 수 있습니다. +
              • +
              +

              제3장 회사 및 이용자의 의무

              +
                +
              • 10조(회사의 의무)① 회사는 관계 법령과 이 약관이 금지하는 행위를 하지 않으며, 지속적이고 안정적인 서비스를 제공하기 위해 최선의 노력을 다하여야 합니다.
                + ② 회사는 이용자가 안전하게 서비스를 이용할 수 있도록 개인정보(신용정보 포함) 보호 및 관리를 위해 필요한 조치를 취하며 「개인정보처리방침」을 공시하고 준수합니다.
                + ③ 회사는 서비스 제공목적에 맞는 서비스 이용 여부를 확인하기 위하여 상시적으로 모니터링을 실시합니다.
                + ④ 회사는 이용자에게 제공하는 유료 및 무료 서비스를 계속적이고 안정적으로 제공하기 위하여 설비에 장애가 생기거나 멸실 되었을 때 지체없이 이를 수리 또는 복구합니다. 다만, 천재지변이나 비상사태 등 부득이한 경우에는 서비스를 일시 중단하거나 영구 중지할 수 있습니다.
                + ⑤ 회사는 이용자의 회원가입 시 타인의 명의를 도용한 부정가입을 방지하기 위해 본인인증 서비스 사업자가 제공하는 인증방법을 통해 실명확인 및 본인인증을 요청합니다.
                + ⑥ 회사는 이용자가 본인인증 절차를 거치고 발신번호를 사전등록한 후 서비스를 제공합니다.
                + ⑦ 회사는 다음 각 호의 어느 하나에 해당하는 경우, 해당 서비스의 제공을 거부하는 조치를 취할 수 있으며, 이 경우 해당 조치 사실을 서비스를 제공받는 이용자 등 이해관계인에게 알립니다. 다만, 미리 알리는 것이 곤란한 경우에는 선 거부조치 후 이를 지체 없이 알려야 합니다.
                +
                  +
                1. 1. 광고성 정보의 전송 또는 수신으로 서비스의 제공에 장애가 일어나거나 일어날 우려가 있는 경우
                2. +
                3. 2. 수신자가 광고성 정보의 수신을 원하지 않는 경우
                4. +
                + ⑧ 회사는 스팸메시지, 불법스팸메시지, 문자피싱메시지, 스미싱메시지(이하 “불법스팸”이라 한다)로부터 이용자 및 수신자를 보호하기 위하여 스팸차단(필터링)서비스를 통해 해당 메시지가 수신되지 않도록 사전 차단할 수 있습니다.
                + ⑨ 회사는 불법스팸, 불법정보, 발신번호조작 등으로 인지되는 메시지에 대해서 발송을 차단하거나 제한 할 수 있습니다.
                + ⑩ 회사는 이용자가 불법스팸을 전송한 사실을 확인한 경우, 한국인터넷진흥원 불법스팸대응센터 등 관계기관에 관련 자료를 첨부하여 신고할 수 있습니다.
                + ⑪ 회사는 이용자 중 문자재판매사업자에 대하여 전송자격인증제에 따라 인증이 취소된 사실을 전달받은 경우 문자재판사업자의 서비스 정지, 계약 해지 등의 조치를 취할 수 있습니다. +
              • +
              +
                +
              • 11조(이용자의 의무)① 이용자는 다음 각 호의 어느 하나에 해당하는 행위를 하여서는 안 됩니다.
                +
                  +
                1. 1. 신청 또는 변경 시 허위내용을 등록하는 행위
                2. +
                3. 2. 타인의 정보를 도용하는 행위
                4. +
                5. 3. 회사 및 기타 제3자의 저작권 등 지적재산권 등을 사전 승낙 없이 복제, 전송, 출판, 배포, 방송 및 기타 방법에 의하여 상업적으로 이용하거나 제3자에게 이용하게 하는 행위
                6. +
                7. 4. 회사 및 기타 제3자의 명예를 손상시키거나 업무를 방해하는 행위
                8. +
                9. 5. 외설 또는 폭력적인 메시지, 팩스, 음성, 메일, 기타 공서양속에 반하는 정보를 서비스에 공개 또는 게시하는 행위
                10. +
                11. 6. 타인의 의사에 반하는 내용을 지속적으로 전송하는 행위
                12. +
                13. 7. 선량한 풍속 또는 기타 사회질서를 해치는 행위
                14. +
                15. 8. 회사의 동의 없이 영리를 목적으로 서비스를 사용하는 행위
                16. +
                17. 9. 제3자에게 임의로 서비스를 임대하는 행위
                18. +
                19. 10. 서비스의 안정적인 운영에 지장을 주거나 줄 우려가 있는 일체의 행위
                20. +
                21. 11. 불법스팸, 불법정보, 발신번호 조작 등으로 인지되는 메시지를 발송하는 행위
                22. +
                23. 12. 기타 불법적이거나 부당한 행위
                24. +
                + ② 이용자는 영리목적의 광고성 정보 전송 시 「정보통신망법」에 따라 수신자의 명시적인 사전 동의를 얻고 광고표기 의무 등을 준수하여야 하며, 회사를 통해 전달되는 수신거부 요청에 대해서는 즉각적으로 처리하고 24시간 이내에 처리결과를 회사에 회신해야 합니다.
                + ③ 이용자는 「전기통신사업법」 제84조의2(전화번호의 거짓표시 금지 및 이용자 보호)에 의거 발신번호를 사전에 등록하고 등록된 번호로만 문자를 발송하여야 합니다. 단, 「전기통신사업법」 등의 관련 법률에서 예외로 허용한 경우는 제외하며, 만약 정당하지 않은 방법으로 전화번호를 변경하여 발신하는 경우, 관련 법규에 따라 처벌받을 수 있습니다.
                + ④ 이용자는 알림톡 또는 친구톡 서비스를 이용 시, 수신자가 발신자를 정확하게 식별할 수 있는 발신 프로필을 사용하여야 하며 해당사항에 틀림이 없는지 지속적으로 확인해야 합니다.
                + ⑤ 이용자는 회사에 실제로 연락이 가능한 이메일, 휴대전화번호 등의 정보를 제공하고 해당 정보를 최신으로 유지하여야 하며, 회사의 통지를 확인하여야 합니다.
                + ⑥ 회사는 이용자가 제1항부터 제4항까지의 의무를 위반하는 경우, 이용자의 서비스 이용을 정지하고 일방적으로 이용계약을 해지할 수 있습니다.
                + ⑦ 회사와 거래하는 문자재판매사업자는 전송자격인증을 받고 전송자격인증제운영규정을 준수해야 합니다. +
              • +
              +

              제4장 회원의 권리에 관한 조치

              +
                +
              • 12조(동의의 철회)회사는 이용자가 서비스 화면에서 자신의 개인정보에 대한 수집, 이용 또는 제공에 대한 동의를 철회할 수 있도록 필요한 조치를 취해야 합니다.
              • +
              • 13조(민원처리)① 회사는 전화, 전자우편 또는 서비스 화면의 상담창구 등을 통하여 이용고객의 불만 등 민원을 접수합니다.
                + ② 민원의 처리는 담당자가 직접 전화를 통해 즉시 처리하는 것을 원칙으로 하되, 전자우편 또는 서비스 화면의 상담청구 등을 통한 민원접수 처리는 영업일 기준 24시간 이내에 처리하며, 각 민원 유형별 처리절차 및 처리기간은 다음과 같습니다.
                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                민원형태유 형원 인처리절차처리기간 (영업일 기준)
                서비스 관련통신 장애회사 귀책사과 및 품질개선2일
                시스템 장애회사 귀책사과 및 품질개선2일
                이용자 귀책대고객 설명2일
                요금 관련청구 요금 이의회사 귀책과금 전 : 비과금 요청3일
                과금 후 : 환불3일
                이용자 귀책대고객 설명2일
                기타기타 이의회사/이용자 귀책사과 및 품질개선2일
                +
              • +
              +

              제5장 서비스의 제공 및 이용

              +
                +
              • 14조(서비스의 제공, 변경 및 중단)① 회사는 이용자에게 다음과 같은 서비스를 제공합니다.
                +
                  +
                1. 1. 문자메시지 대량발송 서비스
                2. +
                3. 2. 카카오톡 알림톡 및 친구톡 등 대량발송 서비스
                4. +
                5. 3. 주소록 서비스
                6. +
                7. 4. 나만의 맞춤문자 제작서비스
                8. +
                9. 5. 팩스 대량발송 서비스
                10. +
                11. 6. 기타 회사가 추가 개발하거나 다른 회사와의 제휴계약 등을 통해 이용자에게 제공하는 일체의 서비스
                12. +
                + ② 회사는 제1항에서 정한 서비스를 변경하여 제공할 수 있으며, 그 변경될 서비스의 내용 및 제공일자를 제9조에서 정한 방법으로 이용자에게 통지합니다.
                + ③ 서비스는 연중무휴, 1일 24시간 제공함을 원칙으로 합니다. 다만, 회사는 컴퓨터 등 정보통신설비의 점검ㆍ보수ㆍ교체, 고장, 이용폭주, 통신두절 또는 운영상의 상당한 이유가 있는 경우 서비스의 제공을 일시적으로 중단할 수 있으며, 이 경우 제9조에서 정한 방법으로 이용자에게 통지합니다. 다만, 사전에 통지할 수 없는 부득이한 사유가 있는 경우 이를 사후에 통지할 수 있습니다.
                + ④ 회사는 서비스의 제공에 필요한 경우 정기점검을 실시할 수 있으며, 정기점검 시간은 서비스 제공화면에 공지한 바에 따릅니다.
                + ⑤ 회사는 운영상, 기술상의 필요에 따라 제공하고 있는 서비스의 전부 또는 일부를 변경할 수 있으며, 서비스 페이지의 UIㆍUXㆍ디자인ㆍ콘텐츠 등은 사전예고 없이 수정될 수 있습니다.
                + ⑥ 회사는 무료로 제공되는 서비스의 전부 또는 일부를 회사의 정책 및 운영의 필요상 수정, 중단, 변경할 수 있습니다.
                + ⑦ 회사는 천재지변, 시스템(통신) 장애 및 점검, 서비스 양도 및 폐지(휴지) 등으로 인해 서비스 제공이 불가한 경우 다음과 같이 처리합니다.
                +
                  +
                1. 1. 천재지변 등을 제외한 서비스 제공이 불가능한 경우 회원에게 사전 공지합니다.
                2. +
                3. 2. 천재지변 등을 제외한 서비스 제공이 불가능한 경우 회원에 사전 공지 없이 서비스를 중단하였을 시, 이에 대한 회원에 따른 손해를 확인 후 보상 및 할인 청구합니다.
                4. +
                5. 3. 회사는 사업의 전부 및 일부를 휴업 또는 폐업하고자 할 때에는 그 휴업 또는 폐업 예정일 30일 전까지 그 내용을 회원에게 이메일, 홈페이지 등을 이용하여 공지합니다.
                6. +
                +
              • +
              • 15조(서비스 이용의 제한 또는 정지)① 회사는 이용자가 이 약관의 의무를 위반하거나 서비스의 정상적인 운영을 방해한 경우 서비스 이용을 제한하거나 정지할 수 있습니다.
                + ② 제1항에도 불구하고 「주민등록법」을 위반한 명의도용 및 결제도용, 「저작권법」을 위반한 불법프로그램의 제공 및 운영방해, 「정보통신망법」을 위반한 불법스팸 발송 및 불법통신, 해킹, 악성프로그램의 배포, 접속권한 초과행위 등과 같이 관련 법을 위반한 경우에는 즉시 영구 이용정지 할 수 있습니다.
                + ③ 제2항에 따른 영구 이용정지 시 서비스 내의 금액, 포인트, 혜택 및 권리 등은 모두 소멸되며 회사는 이에 대해 별도로 보상하지 않습니다.
                + ④ 회사는 이용자가 다음 각 호의 어느 하나에 해당하는 경우, 30일간 당해 서비스의 이용을 즉시 정지(전부 또는 일부) 할 수 있으며, 이용정지 등의 원인이 된 사유가 완전히 해소되기 전까지는 이용정지 등의 조치를 해제하지 아니할 수 있습니다.
                +
                  +
                1. 1. 방송통신위원회ㆍ한국인터넷진흥원ㆍ과학기술정보통신부ㆍ전송사 등(이하 “관계기관”이라 한다)이 불법스팸 등 불법행위의 전송사실을 확인하여 이용정지를 요청하는 경우
                2. +
                3. 2. 이용자가 전송하는 광고로 인하여 회사의 서비스 제공에 장애를 야기하거나 야기할 우려가 있는 경우
                4. +
                5. 3. 이용자가 전송하는 광고의 수신자가 불법스팸으로 신고하는 경우
                6. +
                7. 4. 이용자에게 제공하는 서비스가 불법스팸 전송에 이용되고 있는 경우
                8. +
                9. 5. 전송한 광고성 정보가 불법스팸임이 확인된 경우
                10. +
                11. 6. 불법스팸 전송으로 과태료가 부과된 경우
                12. +
                13. 7. 회사에게 증빙서류 등을 통해 불법스팸 전송이 아님을 확인하여 주지 않고 1일 500건을 초과하는 메시지를 전송하는 경우
                14. +
                15. 8. 이용자가 발신번호를 변작하는 등 거짓으로 표시한 경우
                16. +
                17. 9. 관계기관이 발신번호 변작 등을 확인하여 이용 정지를 요청하는 경우
                18. +
                19. 10. 서비스의 안정적 운영을 방해할 목적으로 다량의 정보를 전송하거나 정보통신설비의 오동작 또는 시스템 보유 정보 파괴를 유발시키거나 유포하는 경우
                20. +
                21. 11. 이용자가 서비스 이용요금을 연체하는 경우
                22. +
                23. 12. 다른 이용자 또는 제3자의 지식재산권을 침해하거나 명예를 손상시킨 경우
                24. +
                + ⑤ 회사는 불법스팸을 전송하였다고 확인된 이용자가 이용 중인 다른 번호가 불법스팸에 악용되고 있거나, 악용될 우려가 있다는 객관적 정황이 있는 경우에는 그 다른 번호도 이용 정지할 수 있습니다.
                + ⑥ 회사는 서비스 이용을 정지 또는 제한하는 경우, 그 사실을 당해 이용자에게 통지합니다. 다만, 미리 통지하는 것이 곤란한 경우에는 이용정지 또는 제한 후 통지할 수 있습니다.
                + ⑦ 회사는 이용자의 정보가 부당한 목적으로 사용되는 것을 방지하고 보다 원활한 서비스 제공을 위하여 12개월 이상 계속해서 로그인을 포함한 서비스 이용이 없는 아이디를 휴면아이디로 분류하고 서비스 이용을 정지할 수 있습니다.
                + ⑧ 휴면아이디로 분류되기 30일 전까지 전자우편 등으로 휴면아이디로 분류된다는 사실, 일시 및 개인정보 항목을 이용자에게 통지하며, 휴면아이디로 분류 시 개인정보는 서비스 이용중인 개인정보와 별도 분리하여 보관합니다. 이때, 보관되는 정보는 보관 외 다른 목적으로 이용되지 않으며, 관련 업무 담당자만 열람할 수 있도록 접근을 제한합니다.
                + ⑨ 이용자는 휴면아이디 보관기간 내에 로그인을 통해 휴면아이디 상태를 해제할 수 있습니다. +
              • +
              • 16조(발송량의 제한)① 회사는「정보통신망법」에서 금지하는 대량의 불법스팸 전송을 방지하기 위하여 이용자의 아이디당 1일 500건을 초과하는 문자 메시지 발송을 제한할 수 있습니다. 단, 이용자가 제출하는 증빙서류 등을 통해 불법 스팸 전송이 아님을 확인할 수 있는 경우 초과 전송이 가능하도록 예외를 인정할 수 있습니다.
                + ② 제1항 단서에 따라 이용자가 제출한 증빙서류 등을 통해 불법스팸 전송이 아님을 확인하였음에도, 이용자의 메시지 발송량이 과다할 경우 회사는 발송을 제한할 수 있습니다.
                + ③ 친구톡 메시지는 매일 20시부터 익일 08시까지 전송이 제한됩니다. +
              • +
              • 17조(계약의 해지)① 이용자는 본인이 직접 서비스를 통하여 이용계약의 해지를 요청할 수 있으며, 회사는 회사에서 정한 소정의 양식에 의하여 이를 즉시 처리합니다.
                + ② 회사는 이용자가 다음 각 호의 어느 하나에 해당하는 경우, 이용자의 동의 없이 이용계약을 해지할 수 있습니다.
                +
                  +
                1. 1. 이용자가 약관을 위반하고 일정 기간 이내에 위반 내용을 해소하지 않는 경우
                2. +
                3. 2. 회사의 서비스 제공목적 외의 용도로 서비스를 이용하거나 제3자에게 임의로 서비스를 임대한 경우
                4. +
                5. 3. 관계기관이 불법스팸 등 불법행위의 전송사실을 확인하여 계약해지를 요청하는 경우
                6. +
                7. 4. 제11조에 따른 이용자의 의무를 위반한 경우
                8. +
                9. 5. 제15조제4항에 따른 이용정지를 당한 이후 1년 이내에 이용정지 사유가 재발한 경우
                10. +
                11. 6. 제15조제4항에 따른 이용정지 기간 내에 이용 정지 사유를 해소하지 않고, 이용 정지일로부터 12개월이 경과한 경우
                12. +
                13. 7. 회사의 이용요금 등의 납입청구에 대하여 이용자가 이용요금을 체납할 경우
                14. +
                15. 8. 타인의 명의로 계약하였거나 계약 시 제출한 자료 및 정보가 허위 또는 누락되었음이 확인된 경우
                16. +
                17. 9. 불특정 다수를 대상으로 무차별적으로 불법스팸을 전송한 사실이 확인된 경우
                18. +
                19. 10. 이용자가 전송한 광고성 정보에 대해 회사가 한국인터넷진흥원에 불법스팸 유무확인을 요청하여 불법스팸임이 확인된 경우
                20. +
                21. 11. 수신처를 자동으로 생성하여 불특정 다수에게 광고성 메시지를 전송한 경우
                22. +
                23. 12. 전송자를 확인하지 못하게 할 목적으로 발신번호를 변작하여 영리목적의 광고성 정보를 전송한 사실이 확인된 경우
                24. +
                25. 13. 이용자가 금융기관으로부터 거래정지 처분을 받고 이용계약을 수행할 능력이 없다고 인정되는 경우
                26. +
                27. 14. 이용자가 행정청 등으로부터 영업취소, 허가취소, 영업정지 등의 처분을 받은 경우
                28. +
                29. 15. 이용자가 어음 및 수표의 부도, 파산신고 또는 회생절차의 신청 등 경영상 중대한 사유가 발생하여 이용계약을 수행할 능력이 없다고 인정되는 경우
                30. +
                + ③ 회사는 불법스팸을 전송하였다고 확인된 이용자가 이용 중인 다른 번호가 불법스팸에 악용되고 있거나 악용될 우려가 있다는 객관적 정황이 있는 경우에는 그 다른 번호에 대한 서비스도 해지할 수 있습니다.
                + ④ 회사는 제2항 및 제3항에 따른 해지시, 이를 이용자에게 통지하여야 하며, 만약 이용자의 책임 있는 사유로 통지할 수 없는 경우에는 이용자가 사전 제출한 정보로 통지를 발송한 때에 도달된 것으로 봅니다. 다만, 회사가 긴급하게 해지할 필요가 있다고 인정하는 경우에는 지체 없이 사후 통지(재고지, 홈페이지 또는 이메일 공지)로 대체 할 수 있습니다.
                + ⑤ 회사는 휴면아이디가 휴면상태로 4년 이상 지속될 경우 이용계약을 해지할 수 있습니다. +
              • +
              • 18조(각종 자료의 저장기간)회사는 서비스별로 이용자의 필요에 의해 저장하고 있는 자료에 대하여 일정한 저장기간을 정할 수 있으며 필요에 따라 그 기간을 변경할 수 있습니다. +
              • +
              • 19조(게시물의 저작권)① 이용자가 서비스 페이지에 게시하거나 등록한 자료의 지적재산권은 이용자에게 있습니다. 단, 회사는 서비스 홈페이지의 게재권을 가지며 회사의 서비스 내에 한하여 이용자의 게시물을 활용할 수 있습니다.
                + ② 회사는 이용자가 서비스에 게재한 정보의 정확성 및 신뢰도 등 내용에 대해서는 책임을 지지 않습니다.
                + ③ 이용자는 서비스를 이용하여 얻은 정보를 가공, 판매하는 행위 등 게재된 자료를 상업적으로 이용할 수 없으며 이를 위반하여 발생하는 제반 문제에 대한 책임은 이용자 본인에게 있습니다.
                + ④ 회사는 이용자가 서비스에 게시 또는 게재하거나 서비스를 통해 전송·수신한 내용물 및 그 결과에 대하여 책임지지 않으며, 다음 각 호의 어느 하나에 해당하는 경우 게시물을 임의로 삭제할 수 있습니다.
                +
                  +
                1. 1. 타인을 비방하거나 명예를 손상시키는 내용인 경우
                2. +
                3. 2. 공공질서 및 미풍양속에 위반되는 내용인 경우
                4. +
                5. 3. 안정적 서비스 제공에 지장을 주거나 줄 우려가 있는 경우
                6. +
                7. 4. 범죄행위에 관련된다고 판단되는 경우
                8. +
                9. 5. 회사 및 타인의 지적재산권 등 기타 권리를 침해하는 내용인 경우
                10. +
                11. 6. 특정업체 및 제품의 선전 등 기타 상용목적으로 게시되는 내용인 경우
                12. +
                13. 7. 입력된 정보를 무단으로 개조하는 경우
                14. +
                15. 8. 타 이용자의 아이디 및 비밀번호를 도용하는 경우
                16. +
                17. 9. 게시판의 목적에 맞지 않는 사이버 시위 및 도배 목적의 내용인 경우
                18. +
                19. 10. 기타 관계 법령에서 위반된다고 판단하는 경우
                20. +
                +
              • +
              • 20조(지적재산권의 보호)① 회사가 작성한 저작물에 대한 저작권 및 기타 지적재산권은 모두 회사에 귀속하며 서비스 외에서의 복제, 전송, 배포 등의 일체의 이용은 금지됩니다.
                + ② 이용자는 서비스를 이용함으로써 얻은 정보를 회사의 사전 승낙 없이 임의 가공, 판매, 복제, 송신, 출판, 배포, 방송, 기타 방법에 의하여 영리목적으로 이용하거나 제3자에게 이용하게 하여서는 안됩니다.
                + ③ 회사가 제공하는 모든 콘텐츠 및 서비스에 대해서는 이용자가 단순 링크의 방법이나 기타 전자적인 방법을 통하여 본 사이트 외에서 이용하는 것은 상업적 목적 여부를 불문하고 금지됩니다. +
              • +
              +

              제6장 요금 및 환불 등

              +
                +
              • 21조(요금 등의 산정)① 회사가 제공하는 유료서비스 이용과 관련하여 이용자가 납부하여야 할 요금은 이용료 안내에 게재한 바에 따릅니다.
                + ② 요금 등은 서비스별로 정하는 바에 따라 선결제를 기본으로 하며, 필요에 따라 회사와 별도 계약을 통해 후납할 수 있습니다.
                + ③ 요금의 결제는 신용카드, 무통장입금, 휴대폰결제 등 회사가 정한 결제수단으로 합니다.
                + ④ 회사는 제1항부터 제3항까지에 따른 결제금액을 디지털 충전금(이하 “충전금”이라 한다)으로 적립하여 운영하며, 해당 충전금은 회사가 제공하는 서비스를 이용하는 시점에서 차감이 됩니다.
                + ⑤ 제2항에 따른 후납 방식의 요금산정 방식은 다음과 같습니다.
                +
                  +
                1. 1. 회사는 이용자의 해당월(M월) 1일부터 말일까지의 서비스에 대한 이용요금을 익월(M+1월) 5일까지 해당월(M월) 말일자 전자세금계산서 발행을 통해 일괄 청구합니다.
                2. +
                3. 2. 이용자는 제1호에 따라 회사가 청구한 서비스 이용요금을 익월(M+1월) 15일까지 회사에 현금으로 지급합니다.
                4. +
                5. 3. 이용자와 회사의 정산 금액에 상호 2% 및 일금 5만원 이내의 차이가 있는 경우 회사의 정산자료를 기준으로 합니다.
                6. +
                7. 4. 회사가 제공하는 서비스에 대한 이용요금은 계좌이체의 방법으로 결제할 수 있습니다.
                8. +
                9. 5. 이용자는 회사가 동의하는 경우 서비스 이용요금의 납부시기 및 방법을 변경할 수 있습니다.
                10. +
                11. 6. 이용자는 서비스에 대한 이용요금을 성실히 납부하여야 하며, 이용요금의 납부 지연 시에는 연 이율 6%의 지연이자를 회사에 지급하여야 합니다.
                12. +
                + ⑥ 이용자가 타인의 결제수단을 이용하여 이용요금을 결제한 경우 회사는 이에 대한 어떠한 책임도 지지 않습니다.
                + ⑦ 카카오가 카카오톡 비즈메시지의 단가를 변경하거나, 통신사의 통신비 변경 시 이용자 또는 회사는 상호간에 이용요금의 변경을 요청할 수 있으며, 이 경우 상호 협의하여 이용요금을 결정합니다. 단, 양 당사자 간에 요구한 이용요금 변경에 대하여 이용자 또는 회사가 동의하지 않을 경우 이용자 또는 회사는 계약해지 30일 전에 서면통보하고 계약을 해지할 수 있습니다.
                + ⑧ 이용자는 회사에 지급할 이용요금에 대한 지급보증을 위하여 월 (예상)이용요금의 2배에 해당하는 보증보험증권, 예치금, 기타 이에 상응하는 담보를 회사가 요구할 경우 회사에게 제출하여야 하며, 회사는 제공하는 서비스의 매월 이용요금에 따라 그 한도를 조정하여 담보금액 증액을 이용자에게 요구할 수 있습니다. 단, 그에 따른 부대 비용은 이용자의 비용으로 합니다.
                + ⑨ 회사의 요구에도 불구하고 이용자가 제8항의 담보를 미제출할 경우 회사는 이용자의 서비스 이용을 제한할 수 있습니다.
                + ⑩ 이용자는 이용자의 관리 소홀 및 부주의로 인해 이용요금이 발생될 경우, 이에 대한 이용요금을 자신의 비용으로 모두 부담해야 합니다. +
              • +
              • 22조(요금 등의 이의신청)① 이용자는 청구된 요금 등에 대하여 이의가 있는 경우 청구일로부터 3개월 이내에 회사에 이의신청을 할 수 있습니다.
                + ② 회사는 제1항의 이의신청 접수 후 2주 이내에 해당 이의신청의 타당성 여부를 조사하여 그 결과를 신청자에게 통지합니다.
                + ③ 부득이한 사유로 인하여 제2항에서 정한 기간 내에 이의신청 결과를 통지할 수 없는 경우에는 그 사유와 처리기한을 다시 명시하여 신청자에게 통지합니다. +
              • +
              • 23조(불법 면탈 요금의 청구)① 이용자가 불법으로 이용요금 등을 면탈할 경우에는 면탈한 금액의 2배에 해당하는 금액을 청구합니다.
                + ② 제21조제2항에 따른 후납 고객이 이용요금을 2개월 이상 연체한 경우에는 신용기관에 신용불량자로 등록할 수 있습니다. +
              • +
              • 24조(요금 등의 환불 및 소멸)① 회사는 요금 등의 과납 또는 오납이 있을 경우 그 과납 또는 오납된 요금을 전액 환불합니다. 단, 이용자의 책임 있는 사유로 과오납금이 발생한 경우, 회사가 과오납금을 환불하는데 소요되는 실비용은 이용자가 부담하여야 합니다.
                + ② 환불 시 결제금액에 따라 무상 증여된 충전금 및 포인트는 제외하며, 충전금 잔액의 10%에 해당하는 금액(PG사 결제수수료 및 송금비용 등)을 환불수수료로 공제한 후 환불하여 드립니다. 단, 요금환불은 환불요청 금액이 최소 1만원 이상인 경우에만 가능(1만원 미만 환불불가)합니다.
                + ③ 제2항의 경우 회사는 이용자가 환불을 요청(환급에 필요한 정보를 회사에 모두 제공한 경우에 한한다)한 시점으로부터 3영업일 이내에 이용자가 지정한 은행계좌로 반환요청 요금을 환불합니다. 단, 선납 시 결제방식이 취소가 가능하다면 결제 취소를 원칙으로 합니다.
                + ④ 환불을 원하는 이용자는 회사의 고객센터 또는 콜센터 등을 통하여 환불 신청 사유를 회사에 통지하고 이용자 본인이 직접 환불신청을 하여야 하며, 반드시 가입자 본인 명의의 통장에 대해서만 환불처리가 가능합니다.
                + ⑤ 제1항부터 제4항까지에도 불구하고, 다음 각 호의 어느 하나에 해당하는 경우, 잔여충전금은 금액과 상관없이 환불하지 않으며 자동 소멸됩니다.
                +
                  +
                1. 1. 이용자가 별도의 환불 신청 없이 제17조제1항에 따른 해지를 하는 경우
                2. +
                3. 2. 회사가 이용자의 귀책사유로 인하여 제17조제2항 및 제3항에 따른 해지를 하는 경우
                4. +
                5. 3. 이용자가 불법스팸 발송 등 관련 법을 위반하여, 회사로부터 제15조제2항 및 제3항에 따른 영구 이용정지처리를 받은 경우
                6. +
                + ⑥ 구매한 충전금 및 포인트의 유효기간은 충전일로부터 60개월이며, 회사는 소진일 30일 전에 고객에게 전자우편 등으로 해당내용을 통지합니다.
                + ⑦ 무료 획득 또는 이벤트 등으로 회사가 부여하는 포인트의 유효기간은 사유발생일로부터 12개월이며, 소진일 30일 전에 고객에게 전자우편 등으로 해당내용을 통지합니다.
                + ⑧ 충전금은 마지막 사용일(충전 이후 사용이 없었을 경우 충전일)로부터 5년이 경과하면 소멸됩니다.
                + ⑨ 회사는 불법스팸, 불법정보, 발신번호 조작, 명의도용 등과 관련하여 경ㆍ검찰의 조사 또는 수사가 진행중이거나, 민ㆍ형사상의 소가 진행중인 경우에는, 공범 의혹 제기 등을 고려하여 법원의 공식적인 판결 결정 없이는 보상을 실시하지 아니하며, 최종 판결을 받은 경우에도 제2항의 환불수수료를 제외한 차액을 환불합니다.
                + ⑩ 서비스가 정상적으로 이루어지지 못한 경우, 사용한 충전금이나 포인트는 최장 72시간 이내 자동 재충전 처리되며, 기타 서비스의 문제 발생 시 관리자의 확인 절차 후 그 이유가 정당할 때 신속히 처리합니다.
                + ⑪ 회사는 관계 법령의 변경 등 합리적인 사유 발생 및 회사 정책상 변경이 필요한 경우, 충전금 및 포인트 운영정책을 변경하여 운영할 수 있습니다. +
              • +
              +

              제7장 손해배상 및 기타사항

              +
                +
              • 25조(손해배상의 범위 및 청구)① 회사는 회사의 귀책사유로 인한 서비스 중단으로 인하여 이용자에게 손해가 발생한 경우 이를 배상할 수 있습니다. 단, 발생한 손해배상액의 총액은 이용자가 지불한 이용요금의 2배를 초과할 수는 없으며, 이미 정상적으로 발송된 건은 제외한 후 나머지 요금의 2배를 한도로 손해배상합니다. +
                + ※ 손해배상액 한도 = (총 결제금액 – 정상 서비스 이용금액) × 2
                + * 누적 결제 시에도 회사 귀책사유에 따른 결제건에 한하여 보상하며, 정상 서비스 이용에 따라 소진된 소멸 결제건에 대해서는 보상 미실시 +
                + ② 손해배상의 청구는 회사에 청구사유, 청구금액 및 산출근거를 객관적이고 명확히 기재하여 전자우편 또는 서면(공문, 등기)으로 신청하여야 합니다.
                + ③ 회사 및 타인에게 피해를 주어 피해자의 고발 또는 소송 제기로 인하여 손해배상이 청구된 이용자는 이에 응하여야 합니다.
                + ④ 이용자는 불법스팸, 불법정보, 발신번호 조작 등으로 인지되는 메시지 발송을 통해 회사에 손해를 끼치는 경우, 이를 배상하여야 합니다. +
              • +
              • 26조(면책)① 제25조에도 불구하고, 회사는 다음 각 호의 어느 하나의 사유로 서비스를 제공할 수 없는 경우, 이로 인하여 이용자에게 발생한 손해에 대해서는 책임을 부담하지 않습니다. +
                  +
                1. 1. 천재지변 또는 이에 준하는 불가항력의 상태가 있는 경우
                2. +
                3. 2. 회사의 고의 또는 과실이 없는 사유로 인한 경우
                4. +
                5. 3. 이용자의 고의 또는 과실로 인하여 서비스 이용에 장애가 있는 경우
                6. +
                7. 4. 서비스 제공을 위하여 회사와 서비스 제휴계약을 체결한 제3자의 고의적인 서비스 방해가 있는 경우
                8. +
                9. 5. 회사에게 회선, 통신망, 전용선망을 제공하고 있는 이동통신사 또는 부가통신사업자, 카카오 측의 장애, 귀책사유로 인한 서비스의 불완전 및 불능으로 이용자 또는 제3자에게 야기된 손해
                10. +
                11. 6. 컴퓨터 등 정보통신설비의 점검ㆍ보수ㆍ교체ㆍ증설 등 서비스의 효율적 제공을 위해 계획된 서비스 중지 일정을 사전에 공지한 경우
                12. +
                13. 7. 해당 서비스나 디지털 콘텐츠의 품질, 성능, 정확도 또는 노력의 면에서 이용자가 불만족하는 경우
                14. +
                15. 8. 이용자가 게시 또는 전송한 자료의 내용
                16. +
                17. 9. 이용자 상호 간 또는 이용자와 제3자 상호 간 서비스를 매개로 하여 물품거래 등을 한 경우
                18. +
                19. 10. 제10조제7항에 따라 서비스 제공을 거절하거나, 제15조에 따라 이용자의 서비스 이용을 제한 또는 정지함으로써 발생할 수 있는 이용자의 손해
                20. +
                21. 11. 회사가 무료로 제공하는 서비스에 대하여 회사의 귀책사유로 이용자에게 서비스를 제공하지 못하는 경우
                22. +
                + ② 회사가 정상적으로 서비스를 제공한 경우, 이로 인하여 발생하는 이용자와 수신자 간의 모든 민ㆍ형사상 책임은 이용자에게 있으며, 회사는 제3자로부터의 어떠한 배상, 소송 등에 대하여도 책임을 면합니다. +
              • +
              • 27조(분쟁의 처리 및 관할법원)① 회사의 귀책사유가 명백히 인정되는 경우, 이용자는 회사를 상대로 소송 등을 제기하기 전에 우선 회사에 이를 알려 원만히 분쟁을 해결할 수 있도록 합니다.
                + ② 회사와 이용자는 개인정보에 관한 분쟁이 있을 경우 신속하고 효과적인 분쟁해결을 위하여 개인정보분쟁조정위원회에 그 처리를 의뢰할 수 있습니다.
                + ③ 회사와 이용자 간에 서비스 또는 이 약관에 관한 분쟁이 발생하여 소송을 할 필요가 있을 때에는 회사의 사업장소재지를 관할하는 법원을 관할법원으로 합니다. +
              • +
              +

              부칙

              +
                +
              • 1조(시행일)이 약관은 2025년 7월 30일부터 시행됩니다.
              • +
              • 2조(경과조치)2024년 11월 29일부터 시행되던 종전의 약관은 본 약관으로 대체합니다.
              • +
              + + + <%@include file="/WEB-INF/jsp/web/cop/bbs/include/agree_private/agreeSelectVersion.jsp"%> +
              +
              + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/agree_private/agreeSelectVersion.jsp b/src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/agree_private/agreeSelectVersion.jsp index 2fdf2f98..ea431ad5 100644 --- a/src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/agree_private/agreeSelectVersion.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/cop/bbs/include/agree_private/agreeSelectVersion.jsp @@ -9,7 +9,8 @@

              이용약관 개정이력 보기

              From 1f8982d1d6779ade093515952586ab1000407573 Mon Sep 17 00:00:00 2001 From: subsub Date: Tue, 29 Jul 2025 11:09:52 +0900 Subject: [PATCH 20/23] =?UTF-8?q?header=20=EB=B3=B4=EC=9C=A0=EC=9E=94?= =?UTF-8?q?=EC=95=A1=20=ED=98=B8=EB=B2=84=20=EC=8B=9C=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=9E=94=EC=95=A1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/common.css | 6 ++++-- src/main/webapp/publish/layout/_header.html | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/webapp/publish/css/common.css b/src/main/webapp/publish/css/common.css index ad3a7148..68682db9 100644 --- a/src/main/webapp/publish/css/common.css +++ b/src/main/webapp/publish/css/common.css @@ -133,7 +133,7 @@ caption, .label {position: absolute;width: 1px;height: 1px;margin: -1px;border: .login2 .check_money .hover_content_wrap{display:inline-block;position:relative;} .login2 .check_money .hover_content_wrap .qmMark{width:17px;height:17px;margin:0 4px 0 0;background:#6a6c72;border-radius:100%;color:#fff;text-align:center;} .login2 .check_money .hover_content_wrap .qmMark:hover+.hover_content{display:block;} -.login2 .check_money .hover_content{display:none;position:absolute;padding:12px 10px 8px 10px;border:2px solid #002c9a;background:#fff;box-shadow: 0 3px 10px 0 rgba(0,0,0,0.5);transform:translateX(-50%);border-radius:5px;top:34px;left:8px;} +.login2 .check_money .hover_content{display:none;position:absolute;padding:12px 12px 8px 12px;border:2px solid #002c9a;background:#fff;box-shadow: 0 3px 10px 0 rgba(0,0,0,0.5);transform:translateX(-50%);border-radius:5px;top:34px;left:8px;} .login2 .check_money .hover_content::after{content:'';position:absolute;left:50%;top:-10px;width:16px;height:10px;margin:0 0 0 -8px;background:url(../images/content/icon_account_arrow.png) no-repeat left top;} .login2 .check_money .hover_content .hover_content_title{font-size:14px;font-weight:600;margin:0 0 10px 0;} .login2 .check_money .hover_content .hover_content_title span{padding:0;font-size:13px;font-weight:400;} @@ -142,7 +142,9 @@ caption, .label {position: absolute;width: 1px;height: 1px;margin: -1px;border: .login2 .check_money .hover_content .send_available_number li{display:flex;justify-content:space-between;font-size:13px;} .login2 .check_money .hover_content .title{min-width:70px;} .login2 .check_money .hover_content .number{text-align:right;padding:0;} -.login2 .check_money .hover_content .event_term{width:100%;padding:2px 0;margin:8px 0 0 0;background:#e5e5e5;font-size:13px;color:#444;text-align:center;border-radius:25px;} +.login2 .check_money .hover_content .event_term{display:flex;width:100%;padding:4px 5px 4px 7px;margin:8px 0 0 0;background:#FFE5E5;font-size:13px;color:#e40000;text-align:center;border-radius:25px;justify-content:space-between;box-sizing:border-box;} +.login2 .check_money .hover_content .event_term p:last-child{color:#222;} +.login2 .check_money .hover_content .event_term p:last-child span{color:#e40000;} /*후불 회원에게만 노출되는 안내레이어*/ .login2 .check_money .holdingsum_box {position: relative; display:flex; align-items: center;} diff --git a/src/main/webapp/publish/layout/_header.html b/src/main/webapp/publish/layout/_header.html index 74325529..e51debd1 100644 --- a/src/main/webapp/publish/layout/_header.html +++ b/src/main/webapp/publish/layout/_header.html @@ -370,7 +370,7 @@

              58원(345매)

            -

            이벤트 적용중 D-60

            +

            이벤트(D-60)

            500,000.99

            999,999,999.99원 From d7845ca4a0f9e92a65d1681eae9172689be6713d Mon Sep 17 00:00:00 2001 From: ijunho Date: Tue, 29 Jul 2025 11:28:15 +0900 Subject: [PATCH 21/23] =?UTF-8?q?NICE=ED=8E=98=EC=9D=B4=EB=A8=BC=EC=B8=A0?= =?UTF-8?q?=20=EB=8F=84=EB=A9=94=EC=9D=B8=20=EC=9D=B8=EC=A6=9D=EC=84=9C=20?= =?UTF-8?q?G2=20=ED=86=B5=EC=8B=A0=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../itn/let/mjo/test/web/TestController.java | 36 ++++++++++++ .../jsp/uss/ion/test/TestNicePaySSL.jsp | 57 +++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 src/main/webapp/WEB-INF/jsp/uss/ion/test/TestNicePaySSL.jsp diff --git a/src/main/java/itn/let/mjo/test/web/TestController.java b/src/main/java/itn/let/mjo/test/web/TestController.java index f052cccc..21909ae6 100644 --- a/src/main/java/itn/let/mjo/test/web/TestController.java +++ b/src/main/java/itn/let/mjo/test/web/TestController.java @@ -42,6 +42,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -3501,5 +3502,40 @@ public class TestController { } + + @RequestMapping("/uss/ion/test/callNicepay.do") + public String callNicepay(Model model) { + String url = "https://dev.nicepay.co.kr/webapi/sslConnectionTest.jsp"; + String mid = "itn180208m"; // 실제 MID 값으로 변경 + + try { + // RestTemplate 사용 + RestTemplate restTemplate = new RestTemplate(); + + // 헤더 설정 + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + + // 파라미터 설정 + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("MID", mid); + + HttpEntity> request = new HttpEntity<>(params, headers); + + // POST 요청 + ResponseEntity response = restTemplate.postForEntity(url, request, String.class); + + // JSP에 전달 + model.addAttribute("result", response.getBody()); + model.addAttribute("url", url); + model.addAttribute("mid", mid); + + } catch (Exception e) { + model.addAttribute("result", "에러 발생: " + e.getMessage()); + } + + return "uss/ion/test/TestNicePaySSL"; // nicepayResult.jsp로 이동 + } + } diff --git a/src/main/webapp/WEB-INF/jsp/uss/ion/test/TestNicePaySSL.jsp b/src/main/webapp/WEB-INF/jsp/uss/ion/test/TestNicePaySSL.jsp new file mode 100644 index 00000000..f5533101 --- /dev/null +++ b/src/main/webapp/WEB-INF/jsp/uss/ion/test/TestNicePaySSL.jsp @@ -0,0 +1,57 @@ +<%@ page contentType="text/html; charset=utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> +<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> +<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> + + + + +세금계산서 관리 + + + +
            +
            +
            +

            Nicepay SSL 호출 결과

            +

            Nicepay SSL 호출 결과

            +
            +
            + +
            + + + + + + + + + + + + + + + + + + + + +
            urlmid결과
            + ${url} + + ${mid} + + ${result} +
            +
            +
            +
            +
            +
            + + + \ No newline at end of file From 22eb1975d5186ae422847782ed305420b6118199 Mon Sep 17 00:00:00 2001 From: subsub Date: Tue, 29 Jul 2025 17:58:30 +0900 Subject: [PATCH 22/23] =?UTF-8?q?=EC=B9=9C=EA=B5=AC=ED=86=A1=20=ED=85=9C?= =?UTF-8?q?=ED=94=8C=EB=A6=BF=20=EC=84=A0=ED=83=9D=20=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=20=EC=97=86=EC=9D=84=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/css/popupLayer.css | 2 ++ src/main/webapp/publish/popup_friendtalk_template_choice.html | 1 + 2 files changed, 3 insertions(+) diff --git a/src/main/webapp/publish/css/popupLayer.css b/src/main/webapp/publish/css/popupLayer.css index 01345959..8bd79e24 100644 --- a/src/main/webapp/publish/css/popupLayer.css +++ b/src/main/webapp/publish/css/popupLayer.css @@ -1050,6 +1050,8 @@ .template_choice_popup .kakao_template_list{display:flex;flex-wrap:wrap;gap:30px 16px;margin:20px 0;} /* .template_choice_popup .kakao_template_list li{position: relative; display: inline-block; width: calc((100% - 80px)/3); border-radius: 25px; box-shadow: inset 0 0px 8px rgba(0,0,0,0.2); padding: 8px 8px 16px 8px; margin: 0 11px 40px 0;} */ .template_choice_popup .kakao_template_list li{position: relative; display: inline-block; width: calc((100% - 80px)/3); border-radius: 25px; box-shadow: inset 0 0px 8px rgba(0,0,0,0.2); padding: 8px 8px 16px 8px;} +.template_choice_popup .kakao_template_list li.template_none{width:100%;text-align:center;box-shadow:none;} +.template_choice_popup .kakao_template_list li.template_none::after{display:none;} .template_choice_popup .kakao_template_list li:nth-child(3n){margin: 0 0 0 0;} .template_choice_popup .kakao_template_list li::after{position: absolute; content: " "; width: 100%; height: 18px; background: url(/publish/images/kakao_template_cont.png) no-repeat top center; top: 8px;} .template_choice_popup .kakao_template_list .kakao_template_wrap{width: 100%; height: 370px; padding: 30px 0 15px 0; border-radius: 22px 22px 0 0; box-shadow: inset 0 2px 8px rgba(0,0,0,0.2); background: #b6cddd; overflow-y: auto; box-sizing: border-box;} diff --git a/src/main/webapp/publish/popup_friendtalk_template_choice.html b/src/main/webapp/publish/popup_friendtalk_template_choice.html index 23cb3cff..f62f6990 100644 --- a/src/main/webapp/publish/popup_friendtalk_template_choice.html +++ b/src/main/webapp/publish/popup_friendtalk_template_choice.html @@ -42,6 +42,7 @@
              +
            • 등록된 템플릿이 없습니다.
            • From dca9f927814db1f83d10102ddc03a7c733a86e8b Mon Sep 17 00:00:00 2001 From: subsub Date: Tue, 29 Jul 2025 18:05:17 +0900 Subject: [PATCH 23/23] =?UTF-8?q?=EB=AC=B4=EB=A3=8C=EA=B1=B0=EB=B6=80=20?= =?UTF-8?q?=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/webapp/publish/kakao_friendtalk_send.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/webapp/publish/kakao_friendtalk_send.html b/src/main/webapp/publish/kakao_friendtalk_send.html index 52ae646c..c103b5ae 100644 --- a/src/main/webapp/publish/kakao_friendtalk_send.html +++ b/src/main/webapp/publish/kakao_friendtalk_send.html @@ -785,6 +785,7 @@
              +

              무료거부 0808800858

              0 / @@ -820,6 +821,7 @@

              +

              무료거부 0808800858

              0 / @@ -877,6 +879,7 @@

              +

              무료거부 0808800858

              0 /