Enterprise Mobile Mail Agent For UNIX 사용자설명서 Version 3.0 이지컴 (SMSJOA.COM)
2
Part No. EM1002-2-KR Enterprise Mobile Mail Agent For UNIX User Guide 사용자설명서 Version 3.0 이지컴 (SMSJOA.COM) 3
Part No. EM1002-2-KR Copyright 2005, SMSJOA Corp. All rights reserved. 이프로그램은핵, 항공, 대량수송수단, 의료또는기타본질적으로위험한상황에서사용하도록개발된것이아닙니다. 따라서그런목적으로사용된경우, 사용자는응용프로그램의안전한사용을보장하기위한모든적절한안전조치, 백업, 대비및기타조치를반드시취해야합니다. 프로그램이이러한목적으로사용되었을경우이지컴 (SMSJOA.COM) 는이러한프로그램사용으로인한피해를책임지지않습니다. 이프로그램 ( 소프트웨어와설명서포함 ) 은저작권법, 특허및기타지적재산권관련법규에의해보호됩니다. 이프로그램을리버스엔지니어링하거나분해하거나또는역컴파일하는것은금지되어있습니다. 또한이프로그램에서사용되는프로토콜을리버스엔지니어링으로분석하는것도금지되어있습니다. 이문서의내용은사전공지없이변경될수있습니다. 이문서의어떤부분도어떠한목적이든이지컴 (SMSJOA.COM) 의허가없이기계적, 전자적또는기타임의의수단을통해배포되거나복사할수없습니다. Enterprise Mobile Mail Agent 에관한궁금한사항은 master@smsjoa.com 로문의하시기바랍니다. 4
목 차 1. 개요 6 1.1. ENTERPRISE MOBILE MAIL AGENT(EMMA) 란?...6 1.2. 고객시스템과연동...6 1.3. 용어...6 2. EMMA 요구사항...7 2.1. SYSTEM...7 2.2. DATABASE...7 2.3. SMSJOA SMSG 접속환경...7 3. 설치...8 3.1. 배포판...8 3.2. 설치...8 3.3. 환경설정...9 3.4. BOOT-SCRIPT 수정...9 4. PROCESS 구조...10 4.1. EMMA 프로세스블럭다이어그램...10 4.2. EMMA MONITOR 프로세스블럭다이어그램...11 4.3. 실행중인 PROCESS...11 5. 환경설정파일작성...12 5.1. SMSG 접속...12 5.2. DB 접속및전송조회...12 5.3. EMMA 설정...13 5.4. EMMAMON 설정...16 6. 고객시스템과연동...17 6.1. EMMA 가사용하는테이블...17 6.2. 전송연동...17 6.2.1. DB-Insert...17 6.2.2. File-Creation...22 6.2.3. Socket...23 6.3. 결과수신연동...24 6.3.1. 상태변화...24 6.3.2. 결과수신...24 6.3.3. 로그테이블...25 7. EMMA MONITOR...26 7.1. 트랜잭션테이블감시...26 7.2. TRANSACTION ERROR 감시...26 7.3. TRANSACTION STATISTICS...26 7.4. 로그테이블 STATISTICS...26 5
1. 개요 1.1. Enterprise Mobile Mail Agent(EMMA) 란? EMMA 는이지컴 (SMSJOA.COM) 의 SMS G/W 서비스를사용하기위한고객이고객의시스템과쉽게연동할수있도록도와주는 SMS G/W 도우미로서, 고객사의시스템에설치된다. 1.2. 고객시스템과연동 EMMA 의실행을위해서는 Database 가반드시필요하며, EMMA 와의연동은세가지방법으로가능하다. 가. Database 에 Record Insert 나. TCP/IP 를이용한연동다. 특정 Directory 에 File 생성나, 다의경우각각접수받은뒤 Database 에 Insert 를하게되며, 그후바로전송이된다. 1.3. 용어 SMSG SMS G/W 를말하며, 메시지를보내면메시지가전달될망사업자에게전달하고, 망사업자로부터메시지전송결과를받아되돌려주는일을하는서버 6
2. EMMA 요구사항 2.1. System 필요한 HDD 는 100 만건당약 300 MB 를차지하므로월 50 만건씩 1 년을보관한다고하면총 600 만건이므로 1.8 GB 정도를생각하면된다. CPU 는 Pentium 200 이상, 전용선은 56 KB 이상이면된다. EMMA 를구동하기위해이지컴 (SMSJOA.COM) 에 System OS Version 과 DB Version 을알려주어, 해당 Binary File 을받는다. EMMA 모듈은 http://www.smsjoa.com 에서서비스이용신청서를작성하신후해당모듈을이메일로발송해드립니다. 2.2. Database 고객 System 과연동을위해 ID, Password 등을미리알아야한다. 연동할수있는 Database ID, Password ID 와 Password 는새로만들어사용하는것을권장한다. 혹은기존에사용하던 ID 를사용해도무방하다. Database EMMA 가사용할 Database 를만들어준다. 기존에사용하던것을사용해도무방하나 EMMA 용으로따로만들어사용하는것을권장한다. 2.3. SMSJOA SMSG 접속환경 실행하기에앞서 SMSJOA 에접속할수있는환경을미리알아야하는데, 다음과같다. 이사항은 EMMA 의 binary 를받을때같이받는것이므로, 혹시빠져있다면다시연락하여받도록한다. SMSG host IP, Port 네트웍상의연결을확인하기위한정보이다. 이값이있어야 EMMA 가실행시에접속할서버의물리적위치를찾을수있다. SMSJOA 측에서받은 IP 와 Port 로 Telnet 연결을시도해서연결이되면정상적이라고보면된다. SMSG ID, Password 설치된 EMMA 는 Server 에서인증이되어있어야한다. 각 EMMA 는고유한 ID 와 Password 를부여받게된다. 이값이세팅되지않으면접속후인증에러를내며종료된다. 7
3. 설치 3.1. 배포판 Binary 배포판에는다음과같은파일들이들어있다. emma 주실행파일로서아래에나타난내부실행파일들을구동하고감시하는역할을한다. emmasender SMSG 에접속하여전송해야할메시지들을전달하는역할을하는서브파일. 단독실행도가능하다. emmareceiver SMSG 에접속하여망에서돌아온전송결과들을수집하는역할을하는서브파일. 단독실행도가능하다. emmalistener TCP/IP 상의 Socket 연결을통해전달되어온보낼메시지들을접수하는일을서브파일. 단독실행도가능하다. emmaworker 위 Listener 에의해내부적으로호출되는서브파일. 실제메시지의접수를담당한다. emmamon emma 의실행상태를보여주며, 현재 DB 의전송상황을웹으로보여주는모니터이다. 연월통계를볼수있으며, 구성방식에따라시간대별전송상황을볼수있다. emma.cf.sample emma.cf 파일을만들기위한참고파일로서, 이문서에서언급하는구성방식에대한샘플이들어있는파일이다. 이파일을 emma.cf 로복사하여수정하여사용하도록한다.( 내용은 5 장참조 ) 그밖의파일들특정배포판에는해당 OS 에맞는 shared object 파일이따라갈수있다. Shared object 파일들은모두적당한 library directory 에등록하여사용한다. 3.2. 설치 emma 를실행시킬 user 를하나 ( 보통 emma) 만든다. 적당한디렉터리하나를만든후배포파일의압축을푼다. 만든 User 에게디렉터리및파일의소유권을준다. 기타 EMMA 설치는 EMMA 설치통합문서 를참고한다. 8
3.3. 환경설정 MySQL 의경우 - mysql.sock 환경변수설정특히리눅스의경우 mysql.sock 파일이 /var/lib/ 에위치하여야한다. 만약이위치에있지않으면 /var/lib/mysql.sock 로심볼릭링크를설정한다. 현재 mysql.sock 파일이 /tmp /mysql.sock 에위치하고있으면아래의예처럼실행한다. ln s /tmp/mysql.sock /var/lib/mysql/mysql.sock 만약링크가설정되지않는다면아래와같이환경변수를설정한다. MYSQL_UNIX_PORT=${MYSQL_UNIX_PORT:-/var/lib/mysql/mysql.sock} /var/lib/mysql/mysql.sock 을시스템에있는 mysql.sock 의 path( 예 : /tmp/mysql.sock) 로변경한후위의내용을 EMMA 를실행시킬쉘의프로파일파일 (ex..bash_profile 또는.bashrc) 에수정후반영하도록한다. 이때, safe_mysqld 의내용은변경시키지않는다. 기타 EMMA 설정은 5 장을참고하여환경설정을한다. 3.4. Boot-Script 수정 rc.local 을수정하여부트후자동으로실행되도록한다. 9
4. Process 구조 4.1. EMMA 프로세스블럭다이어그램 EMMA 는실행시 5 개의프로세스로이루어진다. emma 실행하는프로세스가 Daemon 으로되면서남는프로세스이며나머지프로세스를실행한다. emmasender 주기적으로 DB 를감시하며, DB 에서보낼메시지를 Select 해서 SMSG 로보낸다. Que 에들어오는모든메시지를 SMSG 로전송한다. emmareceiver SMSG 로부터오는전송결과를수신하여 DB 를갱신한다. emmalistener EMMA 에 TCP/IP 접속을시도해오는서버로서, connection accept 후 Client 를 fork 한다. emmaworker 소켓으로 SMS Message 를받아 DB 에 Insert 하고 Que 에넣는다. 그림 1. EMMA Process 10
4.2. EMMA Monitor 프로세스블럭다이어그램 EMMA Monitor 는 emma 의상황과 db 의상황을 Web 으로보여주는프로세스이다. Monitor 주기적으로 DB 에서트랜잭션테이블에있는메시지의현재전송상태 ( 전송대기 / 결과대기 / 결과도착 ) 를읽어들인다. 그리고, EMMA 로부터주기적으로존재여부를받아서메모리에가지고있는다. 또한, 처음실행될때와매일새벽 3 시에주기적으로로그테이블내용을바탕으로월통계테이블을갱신한다. Clients Monitor 에 Web Browser 의접속이요구되면 fork 되어나와, Web browser 가요청하는 URL 을해석하고, URL 에따라, Monitor 로부터복사받은정보를바탕으로 HTML 페이지로만들어전송하는역할을한다. 4.3. 실행중인 Process 그림 2. EMMA Monitor Process ps 를해보면다음과같은상황을볼수있다. 5356 pts/3 S 0:02 emma 5357 pts/3 S 1:42 emmasender 5358 pts/3 S 0:00 emmareceiver 5359 pts/3 S 3:33 emmalistener 5359 pts/3 S 3:33 emmamon 평소에는 5 개의프로세스가있으며, emmaworker 의수가 TCP 접속에따라여러개로 11
될수있다. 5. 환경설정파일작성 emma 는 emma.cf 라는환경설정파일이있어야하며, 같은디렉터리에있다면바로실행되며, 그렇지않은경우에는다음과같이실행시지정해주어야한다. emma c <file name> 환경설정화일은각종 Parameter 의초기값을설정하는것으로, 다음과같은형식으로 emma.cf 파일에작성되어야한다. <category>.<variable> = <value> 아래는 <category>.<variable> 에대한설명이다. <category> 는 smsg, db, emma, emmamon 이있다. 각설정은배포된 EMMA 버전에따라 emma.cf 설정파일에서생략 ( 기본설정 ) 또는누락되있을수있다. 5.1. SMSG 접속 smsg.id smsg.password 이지컴 (SMSJOA.COM) 에서 SMS 전송을원하는업체에제공하며, 인증시에꼭필요하다. smsg.host smsg.port 이지컴 (SMSJOA.COM) 의 SMSG 주소를나타내며, ip 는 hostname 과숫자로된 ip 모두가능하다. 만약 EMMA 를설치하는서버에방화벽이있다면 smsg.port 에대해 outbound 로허용해주어야한다. 5.2. DB 접속및전송조회 db.user db.password db.user 와 db.password 는각각 DB User name 과 Password 를설정해둔다. db.host db.database db.host 는 DB 가설치되어있는곳의 hostname 이나 ip 를넣어준다. (Local 일경우 12
생략가능, Oracle 일경우 TNSName) 생략가능한경우라도타버전과호환을위해 = 이후빈채로남겨두어야한다. db.database 는 EMMA 가사용할 database 이름을넣어준다. (Oracle 일경우 tablespace) db.checkprivilege EMMA 는전송테이블및로그테이블등을 EMMA 가사용하는 DB 에 CREATE 하게된다. EMMA 가사용하는 DB User 가테이블을 CREATE 할수있는권한이있는지를확인하기위해 DB Connection 을맺을때, em_temp 라는 table 을 CREATE 하여 table CREATE 권한이있는지를확인하게되는데, checkprivilege 가 0 으로설정되있다면, table CREATE 테스트를하지않는다. EMMA 가사용하는 DB User 에 table CREATE 권한을주지않았다면, EMMA 가사용하는 table 을미리수동으로생성해야하며, 위의설정을 0 으로설정해야한다. ( 기본설정은 1 ) db.pollinginterval 전송을위해서트랜잭션테이블을조회하는시간간격으로단위는초이다. 만약이전에전송한데이터가있다면, pollinginterval 만큼 sleep 하지않고트랜젝션테이블을다시조회한다. ( 기본설정은 1, 단위는초 ) db.transferrecords 이통사에서보내온전송결과를이지컴 (SMSJOA.COM) 서버로부터 EMMA 가수신한후, 트렌젝션테이블에서로그테이블로이동시킬때한번에 polling 하는 (SELECT) 수를설정한다. 기본설정은 30 건이다. db.transferbatchrecords 이통사에서보낸메시지에대한전송결과를 emma.recordlife( 기본설정 36 시간 ) 시간까지받지못했을경우, 트렌젝션테이블에서로그테이블로이동시킬때한번에 polling 하는 (SELECT) 수를설정한다. 기본설정은 200 건이다. ( 결과받지못한데이터에대한이동은기본 10 분 (emma.movinginterval 초 ) 에한번씩실행된다.) db. etc1 ~ db.etc3 EMMA 가사용하는테이블의여유필드인 tran_etc1 ~ tran_etc3 사이즈를설정할수있다. 단, 테이블이생성되지전에설정해야하며, 트렌젝션테이블과로그테이블의설정은일치해야한다. 5.3. EMMA 설정 emma.recordlife emma 는트랜잭션테이블과로그테이블로나누어메시지를관리한다. 트랜잭션테이블은전송요구할메시지가들어오는테이블이며, 일정시간이지나면메시지가로그테이블로옮겨지는데이때지정하는시간이 emma 가관리하는트랜잭션테이블에메시지가대기하고있는시간을지정하며, 단위는시간이다. 디폴트값은 36 시간으로되어있다. 13
emma.moveonresult emma.recordlife 값과상관없이트랜잭션테이블에서대기하고있는레코드가전송된후결과가도착하면로그테이블로옮길지여부를나타내는스위치이다. ( 0: 옮기지않음 ; 1 : 옮김 ) 디폴트값은 1 이다. emma. Recordmoveonresult SMS Gateway 로부터보낸메시지에대한 Report 를수신했을경우, 해당레코드를트렌젝션테이블에서로그테이블로이동시키는데, 이동되는로그 (MOVE: ) 를남길지여부를설정한다. 기본적으로로그를남기지않는다. emma. Movinginterval 보낸메시지에대해 emma.recordlife 시간 ( 기본 36 시간 ) 까지 Report 를받지못한데이터에대해트렌젝션테이블에서로그테이블로이동시킬때의 interval 을설정한다. 기본설정은 600 초이다. emma.defaultttl 메시지를보낼때사용되는것으로메시지유효시간을설정한다. 단위는분이다. 예를들어, 1440 으로값을넣어주면 24 시간동안전송시도하도록요구한다. 문자메시지요청은 TTL(Time To Live) 을정해주어그시간동안 SMSG 가메시지전송시도를한다. 디폴트값은 1440 분이다. emma. Pinginterval EMMA 가 SMS Gateway 와의연결이정상적인지를판단하기위해테스트패킷을보내며, 그주기를나타낸다. 단위는초이며, 60sec 설정은변경하지않도록한다. emma.logdir log 가생성될 Directory 를지정한다. logdir 이없을경우자동생성하지않으므로, 존재하는 directory 를지정해야하며, directory 에 write 할수있는적당한권한이있어야한다. log file 은 <smsg.id>yyyymmdd.log 형태로작성된다. 하루에한번씩작성된다. 반드시지정해주어야한다. emma.senddir File 로전송을요청할경우 File 을읽어들일 Directory 를지정한다. 설치시에만들어주는것이좋다. emma.heartbeatport, emma.heartbeatrip emma 가같은호스트에실행중인 emmamon (Monitor) 에게자신의존재를꾸준히알리기위해사용되는 UDP Port 로써, 10 초에한번씩전송이된다. 이때, 전송되는내용은 emma 의 PID 이다. emma 의여러프로세스중에서 worker 프로세스가전송한다. 반드시지정해주어야한다. 14
emma.port TCP Socket 을통해메시지를접수받을때사용하는 Listen port 를지정한다. 이 port 로들어오는 Packet 구조는다음장에서설명한다. 반드시지정되어야하며, 0 으로지정될경우 Listener 는바로종료한다. emma.allow.n N 은 0 ~ 31 까지가능하며, emma 에접속가능한 IP 또는 Network 를등록한다. 이는웹서버에서 SMS 를 TCP 로보낼때웹서버 IP 를등록하는데쓰일수있다. 등록하는형식은다음과같다. emma.allow.0 = 112.130.45.6/255.255.255.255 emma.allow.1 = 112.130.45.7/255.255.255.255 emma.allow.2 = 112.131.20.0/255.255.255.0 emma.que.directsend TCP Socket 을통해메시지를접수받을경우, emma.que.directsend 를 1 로설정하게되면, 해당메시지를우선전송하고, EMMA 가사용하는트렌젝션테이블에 tran_status 를 0 으로삽입한다. 만약 emma.que.directsend 를 0 으로설정하면 EMMA 의트렌젝션테이블에 tran_status 를 1 로삽입하여, EMMA 가일반적으로발송하는 DB 전송방식으로전송되게된다. 기본설정은 1 이다. emma.que.inserttable TCP Socket 을통해메시지를접수받아 EMMA 의트렌젝션테이블에 INSERT 하게되는데, INSERT 되는테이블을별로도설정할수있다. EMMA 의트렌젝션테이블과구조가같은미리생성된테이블명을작성하면된다. 기본설정은 em_tran 이다. emma.que.log TCP Socket 을통해메시지를접수받을경우, 접수받은 Packet 내용을로그파일에기록할수있으며, 1 로설정하면된다.. emma.starttime, emma.endtime EMMA 가동작하는시간을설정한다. emma.class 0, 1 의값이설정가능하며, 3 으로설정 ( 우선순위발송 ) 했을경우, 트렌젝션테이블의 tran_type 을 3 으로입력한레코드가우선 SELECT 되어발송된다. 0 은기본설정이며, detault 설정인 tran_type = 0 인레코드가발송된다 15
5.4. EMMAMON 설정 emmamon.httpport emma monitor 가서비스하는 http port. 이포트를통해 Web Browser 로모니터할수있다. 만약이포트를 8008 로지정했다면다음과같은 URL 을통해가능하다. emmamon.pollinginterval http://some.hostname.com:8008/ 모니터는주기적으로트랜잭션테이블의상태를읽어메모리에저장하고있다. 이주기를설정하는것으로단위는초이다. emmamon.allow.n N 은 0 ~ 31 까지가능하며, emma 모니터에접속가능한웹브라우저의 IP 또는 Network 를등록한다. 이는관리자의위치를등록하는데쓰일수있다. 등록하는형식은다음과같다. (emma 와동일 ) emmamon.allow.0 = 112.130.45.6/255.255.255.255 emmamon.allow.1 = 112.130.45.7/255.255.255.255 emmamon.allow.2 = 112.131.20.0/255.255.255.0 emmamon.net emmamon.net = 011 emmamon.net = 016 emmamon.net = 017 emmamon.net = 018 emmamon.net = 019 와같은형식으로 emmamon 이관리하는망별 prefix 를넣어준다. EMMA MONITOR 에서망별조회를하는데사용된다. emmamon.etc_1 TRAN_ETC1 을검색필드로사용할수있으며, 그때모니터화면에표시되는레이블을지정한다. TRAN_ETC1 은연동용으로사용하는것이며, 뒷장에서설명한다. emmamon.etc_1 = Name 16
6. 고객시스템과연동 연동방법은메시지전송연동과결과확인연동이있다. 대개고객의특성에따라, 고객사에서메시지를보낼용도로사용할때는메시지전송연동만하며, 고객사의회원들이메시지를보낼때는전송연동과결과확인연동을모두하게된다. 6.1. EMMA 가사용하는테이블 트랜잭션테이블 : em_tran 모든전송요구가수집되는테이블로서, 전송요구와결과대기등이일어나는테이블이다. 로그테이블 : em_log_yyyymm YYYYMM 은연도, 월을나타내며, 매달하나의테이블이작성된다. Monthly Statistics table: em_monthly_stat 하루에한번씩 em_log_yyyymm 테이블의통계를내어매일매일의통계를가지고있으며, 한달사용량등의열람을위해서사용되는테이블이다. 6.2. 전송연동 전송하는방법은크게세가지가있다. DB Insert 주로, 웹을통해메시지요청을할경우웹페이지에서 DB 에접속하여메시지를전송할때사용한다. 가장많이사용됨. File Creation DB 접속을굳이하지않고단지파일을만드는것으로메시지를보내고싶을때사용한다. DB Programming 이어려울때사용됨. Socket emma 에 socket 으로접속하여메시지를보내고자할때사용한다. DB 접속이어렵고메시지전송요청이원격으로이루어질때사용함. 6.2.1. DB-Insert emma 는실행되면바로트랜잭션테이블 (em_tran) 이존재하는지확인하여, 없을경우다음과같은스키마로테이블을생성하게된다. 17
Oracle 의경우 Name Null? Type ----------------------------------------- -------- ---------------------------- TRAN_PR NOT NULL number(11) TRAN_REFKEY varchar2(20) TRAN_ID varchar2(20) TRAN_PHONE NOT NULL varchar2(15) TRAN_CALLBACK varchar2(15) TRAN_STATUS char(1) TRAN_DATE NOT NULL date TRAN_RSLTDATE date TRAN_REPORTDATE date TRAN_RSLT char(1) TRAN_MSG varchar2(255) TRAN_ETC1 varchar2(64) TRAN_ETC2 varchar2(16) TRAN_ETC3 varchar2(16) TRAN_ETC4 number(10) TRAN_TYPE NOT NULL number(5) MySQL 의경우 Name Null? Type ----------------------------------------- -------- ---------------------------- TRAN_PR NOT NULL int(11) TRAN_REFKEY varchar(20) TRAN_ID varchar(20) TRAN_PHONE NOT NULL varchar(15) TRAN_CALLBACK varchar(15) TRAN_STATUS char(1) TRAN_DATE NOT NULL datetime TRAN_RSLTDATE datetime TRAN_REPORTDATE datetime TRAN_RSLT char(1) TRAN_MSG varchar(255) TRAN_ETC1 varchar(64) TRAN_ETC2 varchar(16) TRAN_ETC3 varchar(16) TRAN_ETC4 int(10) TRAN_TYPE NOT NULL int(5) 18
Informix 의경우 Name Null? Type ----------------------------------------- -------- ---------------------------- TRAN_PR NOT NULL serial TRAN_REFKEY varchar(20, 0) TRAN_ID varchar(20, 0) TRAN_PHONE NOT NULL varchar(15, 0) TRAN_CALLBACK varchar(15, 0) TRAN_STATUS char(1) TRAN_DATE NOT NULL datetime year to second TRAN_RSLTDATE datetime year to second TRAN_REPORTDATE datetime year to second TRAN_RSLT char(1) TRAN_MSG varchar(255) TRAN_ETC1 varchar(64, 0) TRAN_ETC2 varchar(16, 0) TRAN_ETC3 varchar(16, 0) TRAN_ETC4 integer TRAN_TYPE NOT NULL integer [ 볼드체표시필드는필수입력!] tran_pr: 자동증가하는것으로 em_tran 의 primary key 가된다. tran_refkey: 참조용으로사용되는것으로메시지전송시에는사용되지않는다. tran_id : 참조용으로사용되는것으로메시지전송시에는사용되지않는다. tran_phone: 수신자전화번호 tran_callback: 송신자전화번호 ( 생략가능 ) tran_status: 메시지상태 tran_date: 메시지접수시간 tran_rsltdate: 핸드폰에전달된시간 ( 망사업자가보내오는 ) tran_reportdate: 결과수신시간 tran_rslt: 전송결과 ( 결과코드는아래표참조 ) tran_msg: 전송메시지 tran_etcx: 사용자임의로사용할수있는필드. SMS 전송시에는전혀사용되지않음. tran_type: URL 전송, 메시지전송등의 SMS 형태를구분하기위한필드. 19
<EMMA Result Code tran_rslt 에명시됨 > 우측표의 m ~ q 값은이통사까지전달되지않고, 이지컴 (SMSJOA.COM) 에서실패처리한코드임 메시지보내는방법 보낼때반드시있어야하는필드는위설명중굵은글씨로되어있는필드들이다. (tran_pr, tran_phone, tran_status, tran_date, tran_msg ) 이중, tran_pr 은자동증가하는값이고, tran_status 는 1 로한다. 그리고, tran_date 값은 sysdate 함수값을대입하거나현재시간, 혹은예약전송시메시지를보내고자하는시간을대입해야한다. DB 전송시 status 변화 : tran_status : 1 ( 전송요구 ), 2 (SMSG 에전송됨, 결과대기중 ), 3 (SMSG 에서결과받음 ) tran_date: 전송요청시간, 이값이현재시간과같거나과거이며, tran_status= 1 인것이전송대상이된다. 전송후 tran_status 는바로 2 가된다. Oracle 의경우 Insert into em_tran (tran_pr, tran_phone, tran_callback, tran_status, tran_date, tran_msg ) values (em_tran_pr.nextval, '019-111-8888', '02-1111-2222', '1', sysdate, 'Test 20
Message 입니다 ' ); (em_tran_pr.nextval 을쓰는것은 oracle 의 sequence 를사용하기때문입니다.) MySQL 의경우 Insert into em_tran (tran_pr, tran_phone, tran_callback, tran_status, tran_date, tran_msg ) values (null, '019-111-8888', '02-1111-2222', '1', sysdate(), 'Test Message 입니다 ' ); Informix 의경우 Insert into em_tran (tran_phone, tran_callback, tran_status, tran_date, tran_msg ) values ('019-111-8888', '02-1111-2222', '1', current, 'Test Message 입니다 ' ); URL 보내는방법 기본적으로필요한필드들은보낼때반드시있어야하는필드는일반메시지보내기에필요한필드들과거의같다. (tran_pr, tran_phone, tran_status, tran_date, tran_msg ) 그러나, URL 전송임을구분하기위해서, 추가로 tran_type 필드를조정해주어야한다. 앞에서와같이 tran_pr 은자동증가하는값이고, tran_status 는 1 로한다. 그리고, tran_date 값은 sysdate( getdate, current ) 함수값을대입하거나현재시간, 혹은예약전송시메시지를보내고자하는시간을대입해야한다. URL 전송을위한 tran_type 은 5 번이다. URL 전송을위한주의사항 : URL 전송을위해서는특정한포맷을맞추어서 DB 에입력하여야한다. 즉, URL 전송의경우도 data 자체는 tran_msg 에입력된다. URL 은보통 Title 과 URL 두가지부분으로이루어져있기때문에, 이를지원하려면 URL TITLE 즉, URL 이먼저나오고, 중간에스페이스하나로분리한후, 타이틀을써주면된다. URL 이후최초로나오는스페이스가구분자가된다. 즉, http://wap.test.co.kr 을테스트라는이름으로전송하고싶다면 http://wap.test.co.kr 테스트 라고입력하면된다. Oracle 의경우 Insert into em_tran (tran_pr, tran_phone, tran_callback, tran_status, tran_date, tran_msg, tran_type ) values (em_tran_pr.nextval, '019-111-8888', '02-1111-2222', '1', sysdate, 'http://wap.test.co.kr 테스트 ', 5 ); 21
MySQL 의경우 Insert into em_tran (tran_pr, tran_phone, tran_callback, tran_status, tran_date, tran_msg, tran_type ) values (null, '019-111-8888', '02-1111-2222', '1', sysdate(),'http://wap.test.co.kr 테스트 ', 5 ); Informix 의경우 Insert into em_tran (tran_phone, tran_callback, tran_status, tran_date, tran_msg, tran_type ) values ('019-111-8888', '02-1111-2222', '1', current, 'http://wap.test.co.kr 테스트 ', 5 ); 6.2.2. File-Creation 파일로전송할때는 emma.senddir 이지정되어야하며, 이디렉터리에파일을생성하면전송요청이된다. 파일은메시지하나당하나의파일을만들어주어야하며, emma 가확인한즉시삭제되며, 확인된메시지는 DB 에 Insert 된다. T 는 tran_date 를나타내며적어주지않으면현재시간이고, 예약전송시에는 YYYYMMDDHHMI 의형태로보내고자하는시간을대입시켜주면된다. 다음은메시지전송요청파일포맷이다. 예시 ) P<tran_receivernum> C<tran_callback> I<tran_id> M<tran_msg> T<tran_date> P019-111-8888 C0221891567 Mtest Message 입니다. Mfile 로보내는것이지요. Message 를여러줄로전송하기위하여 M 은여러번반복될수있으며, 각 M 마다하나의행이된다. C 와 I, T 는생략가능하다. File-Creation 전송시 status 변화 : 0 (Key 생성 ), 1 ( 전송요구 ), 2 (SMSG 에전송됨, 결과대기중 ), 3 (SMSG 에서결과받음 ) 0 번이하나더있는것이 DB 전송방식과다른점이다. 이는 tran_pr 값을생성하기위함이다. 22
6.2.3. Socket 소켓을통하여전송하려면, emma.port 에 TCP 접속을위한포트설정이되어야한다. 이포트에 TCP 로접속하여다음과같은패킷을보내면전송된다. BEGIN POST RECEIVERNUM:<tran_phone> CALLBACK:<tran_callback> KEY:<tran_refkey> DATA:<tran_msg> ID:<tran_id> SENDTIME:<tran_date> END 위패킷은라인단위로 \r\n (HEX: 0D 0A) 의 new line 코드가따라오게되며, END 뒤에도반드시와야한다. 필드명과값을구분하는코드인 : 양쪽에는 Space 가없어야한다. SENDTIME 은예약전송시사용되며 YYYYMMDDHHMI 의형태로보내고자하는시간을대입시켜주면된다. 송신을하게되면, 바로다음과같은 ACK 패킷이전송되어온다. BEGIN ACK CODE:<code> KEY:<tran_refkey> DATA:<code explain> END 이때, <code> 값은 100 과 300 이오게되며, 100 은성공, 300 은실패를의미한다. 실패인경우는 emma 가접수불가능한경우를말하며, 접수불가능한경우는대개파일시스템에여유공간이없거나, SMSG 와접속이끊긴뒤 50000 건정도의캐싱버퍼가모두찼을때생긴다. <tran_refkey> 는 POST 할때넣어준 key 가그대로오며, DATA 는 <code> 에대한설명을나타낸다. EMMA 는 ACK 를보낸뒤접속을종료하게되므로, 한번의접속에하나의메시지를보낼수밖에없다. Socket 을통해전송하는것은 Web page 등에서 socket 을통해전송하는인터페이스를제공하기위함이다. 23
6.3. 결과수신연동 6.3.1. 상태변화 tran_status 는다음과같은상태변화도를갖는다. 결과 (3) 는 1 번과 2 번상태에서올수있는데, 1 번상태에서바로결과가온상태로되는경우는 Phone 번호가망식별번호오류 (011,016,017,018,019 가아닌 ) 인경우와메시지에내용이없는경우에발생한다. 6.3.2. 결과수신 tran_rslt 는 0 성공, 1 전송실패, 2 잘못된전화번호등의값을갖는다. 전송된메시지에대하여결과가수신되었을때에는 ( 상태변화 2 3) 결과가도착할때, UDP 로 emma.receive_udp_port 에지정된포트에다음과같은패킷을전송한다. 이때 UDP port 로수신하는서버를만들어확인한다. <tran_pr><space><code> tran_pr 및 code 는모두 readable character 로되어있으며, space 는 ascii code: 0x20 이다. 일반적으로 UDP 는전송확인을하지않으므로, 반드시 UDP 를통해결과가도착하는것을알아야할필요는없다. 다만, 결과가도착하는지에대해서연동할필요가있을때에만한다. UDP 결과알림은보낸메시지에대한결과가도착했을때에만알려오며, 처음전송시없는망식별번호에의한에러 ( 상태변화 1 3) 는알리지않는다. 24
6.3.3. 로그테이블 일반적으로 em_tran 에있는레코드수는 5 만개이내가적당하다. 더더욱빈번하다면, 1 만개이하로유지하는것이좋다. 이때문에, 일정시간이지난레코드들에대해서가장빈번한입출력이일어나는 em_tran 에서다른테이블로옮기도록정책을세우는것이좋은데환경설정파일에서다룬두값으로정책을결정한다. 레코드는결과수신여부와상관없이 tran_date 에해당하는날짜에서일정한시간 (emma.recordlife; 단위 : 시간 ) 이지나면, em_tran 테이블에서 em_log_yyyymm 테이블로옮겨지게된다. Log 테이블은 tran_date 의년 / 월에해당하는테이블로옮겨지게되며, 테이블이없어서실패가된경우에는테이블을작성하고다시옮기게된다. emma.recordlife 값이 0 이면, 옮기지않는다. 또, emma.moveonresult 값이 0 이아닌값으로되어있다면, emma.recordlife 값과는상관없이상태가 3 이되면바로로그테이블로옮겨지게된다. 로그테이블또한 em_tran 과똑같은 scheme 으로되어있으므로, 로그테이블참조시 em_tran 처럼다루면된다. 만약, 어떤이유로 em_tran 에서모든일을처리하도록, 로그테이블로옮기지않도록하는방법은 emma.recordlife = 0, emma.moveonresult = 0 으로설정하면된다. 25
7. EMMA Monitor 모니터의기능은 em_tran 테이블의상태를감시하고, 월별통계를보여주는데사용된다. 월별통계는일별, 망별전송, 성공, 실패, 오류, 성공률을보여준다. 7.1. 트랜잭션테이블감시 테이블의레코드들중최근 300 개만을보여주는메뉴 ( [Overview.300] ) 로레코드의상태변화를알수있다. 출력되는필드는 tran_pr, tran_phone, tran_status, tran_date, tran_id 이다. tran_pr 에대해서내림차순으로정렬되어출력된다. 따라서항상최근메시지가맨위에오게된다. 만약환경설정파일에서 emma.moveonresult 값이 1 이라면, 모든결과는바로로그로옮겨지기때문에, 이메뉴에서보여지는것은, 결과가도착하지않은것만보이게된다. 7.2. Transaction Error 감시 이메뉴는 emma.moveonresult 값이 0 일경우에만보이는메뉴 ( [Error.300] ) 이며, 결과가도착하지않은것과, 성공하지않은결과들을보여주는메뉴이다. 이메뉴를통해서결과가제대로오고있지않은것에대해알수있다. 7.3. Transaction Statistics em_tran 의통계를보여주는것으로시간대별로전송분포도를알수있다. Em_tran 에있는것만보여주므로, emma.moveonresult 가 1 일경우에는결과가도착하지않은것에대한분포를보여준다. 7.4. 로그테이블 Statistics 월별로그를보여주는것으로, 해당년각월과전년후반여섯개월에대한선택메뉴로시작한다. 각메뉴를선택하면, em_monthly_stat 테이블에서일별전송량을수집하여보여준다. 이메뉴는하루에한번씩내는통계를바탕으로만들어지므로, 로그테이블로옮겨진것이라할지라도하루가지난다음에반영되어나타난다. Emmamon 은하루중밤 3 시에그날로부터 emma.recordlife 시간의영향이미치는날까지의전송건에대해갱신한다. 만일 emma.moveonresult 를 1 로해놓으면, 그날과그전에대해서는성공한것만로그테이블에옮겨지므로성공률이 100% 에가깝게된다. ------------- 끝 ------------- 26