그룹웨어에서 SMS를 발송할 수 있도록 SMS연동 실습을 진행해본다.
문자를 발송하는 업체들은 여러개가 있지만, 대표적으로 다오, SK텔레콤의 비즈, LG의 비즈 등 3가지 업체만 개발이 되어있다. (현재)
일단 마이그룹웨어의 스마트워크 > 프로젝트 모듈 및 기능 > SMS 연동 게시글을 참고하며 진행한다.
(https://my.naonsoft.com/ekp/main/home/homGwMain#at=TU5VMTc2MjAyMDA4MzI2OTU3NDcxMTg%3D)
BT-CUSTOM의 GW7.1-sms-1.1
branch에서
[Module] SMS 연동 (smsBiz7.1-1.1)
commit을 Cherry-Pick한다.
그럼 manageLeft.js파일이 충돌이 나는데, git staging에서 우측의 커밋 내용을 좌측의 커밋 내용으로 복붙하고 저장하면 에러가 사라진다.
그리고나서 manageLeft.js 변경 파일을 추가하여 commit을 진행한다.
BT-CUSTOM의 GW7.1-sms-1.1
branch에서
[DDL/DML] 설치 DDL/DML 스크립트 - SMS 연동(smsBiz7.1_1.1)
commit 내역을 찾아 그룹웨어 DB에 맞는 DDL과 DML을 쳐준다.
95.maria_smsBiz_create_table.sql
--
CREATE TABLE SMS_BASIC_CONFIG (
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
SMS_USE_TYPE CHAR(1) NOT NULL DEFAULT 'W' COMMENT '사용유형',
SEND_MNG_YN CHAR(1) NOT NULL DEFAULT 'Y' COMMENT '발송내역 사용여부',
TMPL_MNG_YN CHAR(1) NOT NULL DEFAULT 'N' COMMENT '템플릿 사용여부',
USER_QUOTA_YN CHAR(1) NOT NULL DEFAULT 'Y' COMMENT '사용자별 할당 사용여부',
TOP_USE_YN CHAR(1) NOT NULL DEFAULT 'Y' COMMENT 'TOP메뉴 표시유무',
INPUT_DIRECT_YN CHAR(1) NOT NULL DEFAULT 'Y' COMMENT '주소록 직접입력 사용여부',
INPUT_ORG_YN CHAR(1) NOT NULL DEFAULT 'Y' COMMENT '조직도 연락처 사용여부',
INPUT_ADDR_YN CHAR(1) NOT NULL DEFAULT 'Y' COMMENT '주소록 연락처 사용여부',
REG_DT DATETIME NULL COMMENT '등록일시',
UPD_DT DATETIME NULL COMMENT '수정일시',
CONSTRAINT PK_SMS_CONFIG PRIMARY KEY (CMP_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-기본환경설정';
--
CREATE TABLE SMS_QUOTA (
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
TOT_QUOTA_CNT DECIMAL(18,0) NOT NULL DEFAULT 10000 COMMENT '전체 할당 건수',
SYS_QUOTA_SEND_CNT DECIMAL(18,0) NOT NULL COMMENT '시스템 할당 건수',
DEFAULT_QUOTA_CNT DECIMAL(18,0) NOT NULL DEFAULT 100 COMMENT '기본할당 건수',
REG_DT DATETIME NULL COMMENT '등록일시',
UPD_DT DATETIME NULL COMMENT '수정일시',
CONSTRAINT PK_SMS_QUOTA PRIMARY KEY (CMP_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-할당건수';
--
CREATE TABLE SMS_USER_QUOTA (
EMP_ID VARCHAR(30) NOT NULL COMMENT '사용자고유번호',
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
AUTH_YN CHAR(1) NOT NULL COMMENT '권한유무',
USER_NAME VARCHAR(255) NOT NULL COMMENT '수신처명',
SEND_CNT DECIMAL(18,0) NOT NULL COMMENT '실사용건수',
REMAIN_CNT DECIMAL(18,0) NOT NULL COMMENT '남은건수',
QUOTA_CNT DECIMAL(18,0) NOT NULL COMMENT '할당건수',
REG_DT DATETIME NULL COMMENT '등록일시',
UPD_DT DATETIME NULL COMMENT '수정일시',
CONSTRAINT PK_SMS_USER_QUOTA PRIMARY KEY (EMP_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-유저할당건수';
--
CREATE TABLE SMS_MSG (
MSG_ID VARCHAR(30) NOT NULL COMMENT '메세지아이디',
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
EMP_ID VARCHAR(20) NOT NULL COMMENT '사용자고유번호',
SEND_STATUS CHAR(1) NOT NULL DEFAULT '0' COMMENT '상태값',
LINK_ID VARCHAR(30) NULL COMMENT '연동고유번호',
RESERVE_YN CHAR(1) NOT NULL DEFAULT 'N' COMMENT '예약발송유무',
RESERVE_DATE VARCHAR(255) NULL COMMENT '예약발송일시',
RESERVE_NOTICE_YN CHAR(1) NULL DEFAULT 'N' COMMENT '예약발송쪽지알림유무',
SEND_PHONE_NAME VARCHAR(255) NOT NULL COMMENT '발송번호명',
SEND_PHONE VARCHAR(255) NOT NULL COMMENT '발송번호',
DELEGATE_PHONE VARCHAR(255) NOT NULL COMMENT '수신대표번호',
TITLE VARCHAR(255) NULL COMMENT '제목',
CONTENT VARCHAR(4000) NOT NULL COMMENT '내용',
SEND_TYPE CHAR(1) NOT NULL DEFAULT 'S' COMMENT '전송유형',
SEND_DT DATETIME NULL COMMENT '발송일자',
RECIPIENT_CNT DECIMAL(18,0) NOT NULL COMMENT '수신처수',
RECIPIENT_JSON LONGTEXT NOT NULL COMMENT '수신처요약',
REG_DT DATETIME NULL COMMENT '등록일시',
CONSTRAINT PK_SMS_MSG PRIMARY KEY (MSG_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-발송내역';
--
CREATE TABLE SMS_MSG_RECIPIENT (
MSG_ID VARCHAR(30) NOT NULL COMMENT '메세지아이디',
RECIPIENT_ID VARCHAR(30) NOT NULL COMMENT '수신처아이디',
STATUS CHAR(1) NOT NULL DEFAULT '0' COMMENT '상태값',
LINK_RECI_ID VARCHAR(30) NULL COMMENT '수신처연동고유번호',
LINK_RECV_DATE DATETIME NULL COMMENT '연동상태값수신일자',
LINK_DATE DATETIME NULL COMMENT '문자발송시각',
USER_TYPE CHAR(1) NOT NULL COMMENT '수신처구분',
USER_NAME VARCHAR(255) NOT NULL COMMENT '수신처명',
PHONE VARCHAR(255) NOT NULL COMMENT '수신처번호',
DEPT_NAME VARCHAR(255) NULL COMMENT '부서명',
POS_NAME VARCHAR(255) NULL COMMENT '직위명',
OFC_NAME VARCHAR(255) NULL COMMENT '직책명',
SORT_ORDR DECIMAL(10,0) NOT NULL COMMENT '순서',
REG_DT DATETIME NULL COMMENT '등록일시',
CONSTRAINT PK_SMS_MSG_TARGET PRIMARY KEY (MSG_ID,RECIPIENT_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-발송내역수신처';
--
CREATE TABLE SMS_TEMPLATE (
TMPL_ID VARCHAR(30) NOT NULL COMMENT '템플릿고유번호',
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
TMPL_TYPE CHAR(1) NOT NULL COMMENT '유형',
EMP_ID VARCHAR(30) NULL COMMENT '사용자고유번호',
TITLE VARCHAR(255) NULL COMMENT '제목',
CONTENT VARCHAR(4000) NOT NULL COMMENT '내용',
SEND_TYPE CHAR(1) NOT NULL DEFAULT 'S' COMMENT '전송유형',
REG_DT DATETIME NULL COMMENT '등록일시',
UPD_DT DATETIME NULL COMMENT '수정일시',
CONSTRAINT PK_SMS_TEMPLATE PRIMARY KEY (TMPL_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-메시지템플릿';
--
CREATE TABLE SMS_BASIC_CONFIG_AUTH (
TRGT_ID VARCHAR(30) NOT NULL COMMENT '타겟아이디',
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
TRGT_TYPE CHAR(1) NOT NULL COMMENT '타겟 유형',
LW_PRT_DEPT_INC_YN CHAR(1) NOT NULL DEFAULT 'N' COMMENT '하위부서포함여부',
REG_DT DATETIME NULL COMMENT '등록일시',
CONSTRAINT PK_SMS_BASIC_CONFIG_AUTH PRIMARY KEY (TRGT_ID,CMP_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-상세사용권한';
--
CREATE TABLE SMS_SEND_PHONE (
SEND_PHONE_ID VARCHAR(30) NOT NULL COMMENT '발송번호아이디',
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
SEND_PHONE VARCHAR(255) NOT NULL COMMENT '발송번호',
SEND_PHONE_NAME VARCHAR(255) NOT NULL COMMENT '발송번호명',
SORT_ORDR DECIMAL(10,0) NOT NULL COMMENT '순서',
REG_DT DATETIME NULL COMMENT '등록일시',
CONSTRAINT PK_SMS_SEND_PHONE PRIMARY KEY (SEND_PHONE_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-발송번호관리';
--
CREATE TABLE SMS_SEND_INPUT (
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
USER_PHONE_YN CHAR(1) NOT NULL DEFAULT 'Y' COMMENT '사용자 휴대폰번호 사용여부',
CMP_PHONE_YN CHAR(1) NOT NULL DEFAULT 'Y' COMMENT '사용자 회사번호 사용여부',
LIST_PHONE_YN CHAR(1) NOT NULL DEFAULT 'Y' COMMENT '발송번호 목록 사용여부',
SYS_PHONE VARCHAR(30) NULL COMMENT '시스템번호',
REG_DT DATETIME NULL COMMENT '등록일시',
CONSTRAINT PK_SMS_SEND_INPUT PRIMARY KEY (CMP_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-발송번호설정';
--
CREATE TABLE SMS_MASTER (
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
TOT_QUOTA_CNT DECIMAL(18,0) NOT NULL COMMENT '전체 할당 건수',
SYS_SMS_YN CHAR(1) NOT NULL COMMENT '시스템알림문자허용유무',
USER_QUOTA_INIT_TYPE CHAR(1) NOT NULL DEFAULT 'N' COMMENT '초기화유형',
USER_QUOTA_INIT_DAY VARCHAR(20) NOT NULL COMMENT '초기화일',
CONSTRAINT PK_SMS_MASTER PRIMARY KEY (CMP_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-지주사기본정보';
--
CREATE TABLE SMS_ATTACH (
FILE_ID varchar(30) NOT NULL COMMENT '파일아이디',
MSG_ID VARCHAR(30) NOT NULL COMMENT '메시지아이디',
FILE_URL VARCHAR(255) NULL COMMENT '파일URL',
FILE_NAME VARCHAR(100) NULL COMMENT '파일명',
REAL_FILE_NAME VARCHAR(500) NULL COMMENT '실제파일명',
SMS_URL VARCHAR(1000) NULL COMMENT 'SMS서버경로',
FILE_EXTSN VARCHAR(100) NULL COMMENT '파일확장자',
FILE_SIZE DECIMAL(18,0) NULL DEFAULT 0 COMMENT '파일용량',
SORT_ORDR DECIMAL(18,0) NULL DEFAULT 0 COMMENT '파일순서',
REG_DATE DATETIME NULL COMMENT '등록일자',
CONSTRAINT PK_SMS_ATTACH PRIMARY KEY (FILE_ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-첨부테이블';
--
CREATE TABLE SMS_RECENT (
EMP_ID VARCHAR(30) NOT NULL COMMENT '사용자고유번호',
PHONE VARCHAR(255) NOT NULL COMMENT '수신처번호',
USER_NAME VARCHAR(255) NOT NULL COMMENT '수신처명',
CMP_ID VARCHAR(30) NOT NULL COMMENT '회사고유번호',
REG_DT DATETIME NOT NULL COMMENT '등록일시',
CONSTRAINT PK_SMS_RECENT PRIMARY KEY (EMP_ID,PHONE,USER_NAME)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='SMS-최근받은사람';
97.maria_smsBiz_dml.sql
/*
${} 로 되어 있는 문자열을 치환하여 실행한다.
-- -----------------------------------------------------------
${db.cmp_id} : CMP_ID (C100140912)
${db.sys_menu_cd} : 그룹웨어 시스템메뉴 중복되지 않는 값 (A9903)
*/
-- 기본코드 값 추가
Insert into CMM_CODE (CATE_ID,CODE_ID,CODE_NAME,CODE_DESC,GROUP_TYPE,USE_YN,REG_DATE) values ('A121981484121891','smsMgt','SMS관리자',null,null,'Y',NOW());
-- 기본코드 값 순서 추가
-- CMM_CODE_ORDR 테이블 CODE_ORDR 컬럼에서 중복되지 않는 큰 값 사용
Insert into CMM_CODE_ORDR (CODE_ID,CODE_ORDR,USE_YN) values ('smsMgt','72','Y');
-- 다국어 값 추가
Insert into CMM_I18N (TRGT_ID,LANG_SE_CD,ITEM_NAME,REG_DT,TRGT_COL_NAME) values ('smsMgt','ko','SMS관리자',NOW(),'CMM_CODE');
cmp_id
는 아래 sql문에 사용하는 컬럼이 아니기 때문에 그대로 Insert문을 쳐주면 된다.
###########################################################################
####################### SMS BIZ Section ###################################
###########################################################################
SMS_BIZ_USE_YN=Y -> sms기능을 사용할 여부
# design resource custom name
SMS_BIZ_RESOURCE_CUSTOM_NAME=naonbiz -> 디자이팀에서 만들어준 디자인명(?) 회사마다 이름이 다름
#smsComDaou:다우, smsComLg:엘지, smsComSk:SK
SMS_BIZ_COMPANY=smsComDaou
#디비폴더 daou,lg,sk
SMS_BIZ_MAPPER=daou
#API,DB
SMS_BIZ_CONNECT=DB
#SMS,LMS,MMS -> 첨부가 들어가면 mms, 80byte가 넘으면 lms
#기업마다 설정이 다르기 때문에 본인이 확인해야 한다.
SMS_BIZ_SMS_YN=Y
SMS_BIZ_LMS_YN=Y
SMS_BIZ_MMS_YN=Y
#예약기능위치 DEMON,GW
SMS_BIZ_RESERVE=GW
#상태값 배치 TIME (분)
SMS_BIZ_BATCH_MINUTE=1
# 그룹웨어 시작년도 설정
SMS_BIZ_CUSTOM_START_YEAR=2021
###########################################################################
######################## SMS ATTACH SET ###################################
###########################################################################
#허용 확장자 콤마로 구분 ex)jpg,png
SMS_BIZ_FILE_ALLOW_EXTN=jpg
#최대파일갯수
SMS_BIZ_FILE_MAX_CNT=3
#개당 파일 용량 40KB 40*1024
SMS_BIZ_FILE_SIZE=40960
#총 파일용량
SMS_BIZ_FILE_TOTAL_SIZE=200960
#SFTP사용유무
SMS_BIZ_SFTP_YN=Y
SMS_BIZ_SFTP_HOST=111.222.333.444
SMS_BIZ_SFTP_PORT=22
SMS_BIZ_SFTP_USER_NAME=
SMS_BIZ_SFTP_PASSWORD=
#file separator 윈도우 \\(검증안됨), 리눅스계열 /
SMS_BIZ_SFTP_SEPARATOR=/
#SFTP사용시 물리파일경로
SMS_BIZ_SFTP_PATH=/opt/naon/gw/smsBiz
#SMS서버에서 GW 물리파일 접근가능여부
SMS_BIZ_SAME_SERVER_YN=Y
#SK경우일때만 입력 SK에서 발급하는 고유 ID
SMS_BIZ_SK_AGENT_ID=skAgentId
###########################################################################
######################## SMS BIZ DataSource ###############################
###########################################################################
# 커넥션 풀 사용 여부 (Y : 사용 , N : 자체 커넥션)
SMS_BIZ_USE_CONN_POOL=N -> 로컬 그룹웨어 자체에서 테스트하는 경우 N으로 설정
# JNDI Name
smsBizJndiName=java:comp/env/jdbc/smsBizDS
# oracle / mysql / mssql
SMS_BIZ_DB_TYPE=mysql -> 로컬사이트 DB 타입 설정
# DB Info -> 내 로컬 주소(127.0.0.1) 설정
SMS_BIZ_DB_URL=jdbc:mysql://127.0.0.1:3306/dev? characterEncoding=utf8&autoReconnect=true&autoReconnectForPools=true&allowMultiQueries=true
SMS_BIZ_DB_USER_NAME=naongw -> 내 로컬 db 정보 설정
SMS_BIZ_DB_USER_PWD=naon1234 -> 내 로컬 db 정보 설정
SMS_BIZ_USE_YN
: SMS기능을 사용할 여부SMS_BIZ_RESOURCE_CUSTOM_NAME
: 디자인팀에서 만든 디자인명(?) CSS에 대한 설정SMS_BIZ_USE_CONN_POOL
: WAS의 커넥션 풀 사용 여부, 로컬 그룹웨어에서 테스트하는 경우는 N으로 설정한다.smsBizJndiName
: WAS의 커넥션 풀 JNDI명 (SMS_BIZ_USE_CONN_POOL = Y
인 경우 필수 입력)SMS_BIZ_DB_TYPE
: 대상시스템(SMS) DB 종류 (oracle/mysql/mssql 중 택 1)SMS_BIZ_DB_URL
, SMS_BIZ_DB_USER_NAME
, SMS_BIZ_DB_USER_PWD
: WAS의 커넥션풀을 사용하지 않는 경우(SMS_BIZ_USE_CONN_POOL = N
) 필수 입력하지만 이렇게 설치와 설정을 진행하고 서버를 올려 은지소프트
를 실행시키면 디자인이 적용이 안되어있을 것이다.
디자인 적용은 아래 링크를 참고하자!
https://velog.io/@seooeunji/%EA%B7%B8%EB%A3%B9%EC%9B%A8%EC%96%B4-%EB%94%94%EC%9E%90%EC%9D%B8-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
위와 같이 세팅을 완료하고 은지소프트
를 실행시키면 상단 top메뉴 영역에 표시되도록 코딩이 되어있다.
systemadmin 계정에서는 보이지 않는다. → SMS 관리 메뉴에서 설정할 수 있다.
그리고 일반계정에 SMS권한을 준 뒤, 일반 계정으로 로그인 해보면 top메뉴 영역에 sms메뉴가 보일 것이다.
클릭해보면 요렇게 예쁘게 디자인이 적용된 화면이 뜰 것이다!
default-custom.properties
에서 설정한 JNDI 이름을 설정해준다.
smsBizJndiName=java:comp/env/jdbc/smsBizDS
<Resource name="jdbc/smsBizDS" auth="Container"
type="javax.sql.DataSource" username="naongw"
password="koje**123" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://220.66.91.250:1433;DatabaseName=SMS"
allowMultiQueries="true" maxTotal="5" minIdle="35" maxIdle="50"
maxWaitMillis="30000" timeBetweenEvictionRunsMillis="300000"
minEvictableIdleTimeMillis="1800000" testWhileIdle="true"
validationQuery="SELECT 1" />
sms 모듈 연동 소스를 배포하고, sms 모듈 설치까지 되면 서버에서 JNDI 이름을 설정해주어야 한다.
서버상 ekp.xml 위치 : /opt/naon/app/tomcat-8.5.70(프로젝트마다 설치된 tomcat이 다를 수 있음)/instances/groupware_server1/conf/Catalina/localhost/
로 이동하여 ekp.xml 파일을 수정해준다.
로컬 환경 context.xml 에 설정한 sms JNDI resource를 추가해준다.
<Resource name="jdbc/smsBizDS" auth="Container"
type="javax.sql.DataSource" username="naongw"
password="koje**123" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://220.66.91.250:1433;DatabaseName=SMS"
allowMultiQueries="true" maxTotal="5" minIdle="35" maxIdle="50"
maxWaitMillis="30000" timeBetweenEvictionRunsMillis="300000"
minEvictableIdleTimeMillis="1800000" testWhileIdle="true"
validationQuery="SELECT 1" />