# 설치 및 실행

## 설치

### 에이전트 설치 사양

<table><thead><tr><th width="170.66666666666666">항목</th><th width="293.2943925233645">사양</th><th>비고</th></tr></thead><tbody><tr><td>설치 환경</td><td><p>리눅스, 윈도우, OSX</p><p>JDK 1.8 이상</p></td><td>java 구동 환경과 동일 </td></tr><tr><td>설치 권장 사양</td><td>CPU – 4Core <br>Memory – 512M <br>Hard Disk – 50G</td><td>월 100만 건 기준 3년</td></tr><tr><td>발송 속도</td><td>2,000건~5,000건/분</td><td>설정 조건 및 설치 장비의 성능에 의존됨</td></tr><tr><td>접속 도메인</td><td>https://api-v2.fingerpush.com</td><td>SSL 사용</td></tr><tr><td>사용 포트</td><td>443</td><td>SSL 포트 사용</td></tr></tbody></table>

### Java SDK 설치

1\) 에이전트는 JDK1.8 이상 설치가 필요하며, OpenJDK, Oracle JDK 모두 가능합니다.&#x20;

2\) JDK 다운로드 및 설치 방법은 아래 링크를 참조해 주세요.&#x20;

{% embed url="<http://openjdk.java.net/install/>" %}

{% embed url="<http://www.oracle.com/technetwork/java/javase/downloads>" %}

### 에이전트 설치

1\) 설치는 압축된 파일을 풀면 완료됩니다.

2\) 설치 경로 예시

<table><thead><tr><th width="150">OS</th><th>Path</th></tr></thead><tbody><tr><td>Windows</td><td>D:/FingerPushAgent</td></tr><tr><td>Linux</td><td>/home/fingerpush/FingerPushAgent</td></tr></tbody></table>

3\) 정상적인 경우 아래와 같은 디렉토리 구조를 가집니다. 실행 파일은 cmd 폴더 내에 위치합니다.

<table><thead><tr><th width="150">OS</th><th>Command</th></tr></thead><tbody><tr><td>Windows</td><td>startup.bat, fpAgent.bat</td></tr><tr><td>Linux</td><td><p>시작 fpAgent.sh start</p><p>종료 fpAgent.sh stop</p></td></tr></tbody></table>

<table><thead><tr><th width="150">1depth</th><th width="150">2depth</th><th>Description</th></tr></thead><tbody><tr><td>bin</td><td>cmd</td><td>에이전트 실행 경로</td></tr><tr><td>bin</td><td>com</td><td>프로그램 class 경로</td></tr><tr><td>database</td><td><p>mssql</p><p>mariadb</p><p>mssql</p><p>mysql</p><p>oracle</p><p>postgreSQL</p><p>edb</p><p>tibero</p></td><td>데이터베이스 종류별 스크립트</td></tr><tr><td>JavaService</td><td></td><td>자바용 윈도우 서비스 등록 프로그램</td></tr><tr><td>lib</td><td></td><td>라이브러리 폴더</td></tr><tr><td>logs</td><td></td><td>실행, 에러 로그</td></tr></tbody></table>

### **데이터 베이스 환경 설정**

1\) 설정파일은 \
메인 설정파일 agentDistServerConfig.xml, \
데이터베이스 설정파일 agentDistServerConfig\_.xml 두 개로 구분됩니다. \
샘플은 아래와 같습니다.

{% code title="agentDistServerConfig.xml" %}

```xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
	<version>3.0.0</version>
	<reloadtime>10000</reloadtime>
	<database>mysql</database> 
	<fingerpush>
	   ...
```

{% endcode %}

{% hint style="info" %}
위 샘플처럼 mysql을 태그에 입력하면 agentDistServerConfig\_mysql.xml 파일이 로딩됩니다.
{% endhint %}

2\) 데이터베이스 연결을 위한 정보를 입력합니다. 파일 내용 중 아래 태그 내의 항목을 서버 정보에 맞게 입력합니다.

{% code title="MSSQL - agentDistServerConfig\_mssql.xml" %}

```xml
<kindofdb>mssql</kindofdb>
<mssql>
      <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>      
      <url>jdbc:sqlserver://아이피:포트;databaseName=디비명;</url>      
      <minidle>5</minidle>
      <maxactive>30</maxactive>
      <username>디비사용자</username>
      <password>디비암호</password>
</mssql>
```

{% endcode %}

{% code title="Mysql Ver.5 - agentDistServerConfig\_mysql.xml" %}

```xml
<kindofdb>mysql</kindofdb>
<mysql>
      <driver>com.mysql.jdbc.Driver</driver>
      <url>jdbc:mysql://아이피:포트/디비명</url>
      <minidle>5</minidle>
      <maxactive>30</maxactive>
      <username>디비사용자</username>
      <password>디비암호</password>
</mysql>
```

{% endcode %}

{% code title="Mysql Ver.8 - agentDistServerConfig\_mysql.xml" %}

```xml
<kindofdb>mysql</kindofdb>
<mysql>
      <driver>com.mysql.cj.jdbc.Driver</driver>
      <url>jdbc:mysql://아이피:포트/디비명</url>
      <minidle>5</minidle>
      <maxactive>30</maxactive>
      <username>디비사용자</username>
      <password>디비암호</password>
</mysql>
```

{% endcode %}

{% code title="Mariadb - agentDistServerConfig\_mariadb.xml" %}

```xml
<kindofdb>mariadb</kindofdb>
<mariadb>
      <driver>org.mariadb.jdbc.Driver</driver>
      <url>jdbc:mariadb://아이피:포트/디비명</url>
      <minidle>5</minidle>
      <maxactive>30</maxactive>
      <username>디비사용자</username>
      <password>디비암호</password>
</mariadb>
```

{% endcode %}

{% code title="Oracle - agentDistServerConfig\_oracle.xml" %}

```xml
<kindofdb>oracle</kindofdb>
<oracle>
      <driver>oracle.jdbc.driver.OracleDriver</driver>
      <url>jdbc:oracle:thin:@아이피:포트:SID</url>
      <minidle>5</minidle>
      <maxactive>30</maxactive>
      <username>디비사용자</username>
      <password>디비암호</password>
</oracle>
```

{% endcode %}

{% code title="Tibero - agentDistServerConfig\_tibero.xml" %}

```xml
<kindofdb>tibero</kindofdb>
<tibero>
      <driver>com.tmax.tibero.jdbc.TbDriver</driver>
      <url>jdbc:tibero:thin:@아이피:포트:SID</url>
      <minidle>5</minidle>
      <maxactive>30</maxactive>
      <username>디비사용자</username>
      <password>디비암호</password>
</tibero>
```

{% endcode %}

{% code title="PostgreSql - agentDistServerConfig\_postgresql.xml" %}

```xml
<kindofdb>postgresql</kindofdb>
<postgresql>
    <driver>org.postgresql.Driver</driver>
    <url>jdbc:postgresql://아이피:포트/디비명?currentSchema=스키마명</url>
    <minidle>5</minidle>
    <maxactive>30</maxactive>
    <username>디비사용자</username>
    <password>디비암호</password>
</postgresql>
```

{% endcode %}

{% code title="edb- agentDistServerConfig\_edb.xml" %}

```xml
<kindofdb>edb</kindofdb>
<edb>
    <driver>org.edb.Driver</driver>
    <url>jdbc:edb://아이피:포트/디비명?currentSchema=스키마명</url>
    <minidle>5</minidle>
    <maxactive>30</maxactive>
    <username>디비사용자</username>
    <password>디비암호</password>
</edb> 
```

{% endcode %}

3\) 테이블 생성 옵션을 설정합니다.

{% code title="DB 공통- agentDistServerConfig\_DBNAME.xml" %}

```xml
<table autocreate="true">
    <master table="AGPUSH_MASTER">
    <queue table="AGPUSH_QUEUE">
    <result table="AGPUSH_RESULT" monthly-backup="true" monthly-backup-max="6" pre-create="2">
</table>
```

{% endcode %}

* autocreate: 테이블 자동생성 옵션. False일 경우 database 폴더의 스크립트를 사용하여 직접 생성할 필요가 있습니다.
* monthly-backup: 테이블 매월 백업 옵션.

  True일 경우 RESULT 테이블명이 AGPUSH\_RESULT\_YYYYMM 형태가 됩니다.
* monthly-backup-max: 백업 테이블 보관 기한.\
  6일 경우 6개월 지난 테이블을 삭제. -1일 경우 삭제 비활성
* pre-create: 테이블 사전 생성 옵션.\
  2일 경우 테이블 생성 시 다음 두 달의 테이블을 추가 생성. 0일 경우 비활성

4\) 테이블 데이터 정리 옵션을 설정합니다.

{% code title="DB공통- agentDistServerConfig\_DBNAME.xml" %}

```xml
<table autocreate="true">
    <master table="AGPUSH_MASTER">
    <queue table="AGPUSH_QUEUE" useless-eviction="true" evict-deadline="72" evict-starttime="1" evict-endtime="5">
    <result table="AGPUSH_RESULT">
</table>
```

{% endcode %}

* useless-eviction: 테이블 자동정리 옵션 on/off 설정\
  True일 경우 QUEUE 테이블의 데이터 중 senddate가 일정시간 이상 지난 데이터를 삭제합니다.
* evict-deadline: QUEUE 테이블 데이터 정리하는 기준 시간\
  (현재시간으로부터 evict-deadline시간 이상 지난 데이터 삭제)
* evict-starttime: 자동정리 시작시간
* evict-endtime: 자동정리 종료시간\
  자동정리는 evict-starttime 이상 evict-endtime 미만의 범위에서 1일 1회 동작합니다.

### **에이전트 로그 환경 설정**

1\) 설치경로/bin/log4j2.properties 파일을 메모장으로 로딩합니다.

2\) 설치 경로의 logs 폴더로 경로를 설정합니다.(변경도 가능합니다.)

![](https://1606198054-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ff5XCUiUhwc0T57hW21TH%2Fuploads%2FjjGFhJA5QFPyQgUOgDjZ%2Flog4j2.png?alt=media\&token=e50b10e2-8059-4183-8f23-eab80aa83d54)

* 생성되는 로그파일명은 fpagent.log
* 날짜/용량별로 롤오버 되는 로그파일은 fpagent\_2022-03-04\_1.log.gz 형태

### **실행 환경 설정**

1\) 설치경로/bin/cmd/실행파일 \
윈도우의 경우 startup.bat, fpAgent.bat, \
리눅스/유닉스의 경우 fpAgent.sh 파일을 메모장으로 로딩 합니다.

| Windows             | Linux                                                                       |
| ------------------- | --------------------------------------------------------------------------- |
| bin\cmd\startup.bat | <p>bin/cmd/fpAgent.sh</p><p>bin/cmd/stop.sh</p><p>위 두 파일은 실행 권한이 필요합니다.</p> |

2\) JAVA\_HOME에 설치 서버에 동작 중인 JAVA프로그램 설치 경로를 입력합니다.&#x20;

3\) AGENT\_HOME에 프로그램 설치 단계에서 설치했던 경로를 입력합니다. \
예) /home/user/FingerPushAgent

4\) fpAgent.bat, Startup.bat 파일 내용

{% code title="Windows – fpAgent.bat" %}

```batch
@echo off
setLocal EnableDelayedExpansion

set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_80(경로 설정)
set JVM_PATH=%JAVA_HOME%\bin\java.exe
set AGENT_HOME=C:\에이전트(경로 설정)
set SVC_NAME=FingerPushAgent
set TARGET_APP=com.finger.agents.server.AgentDistServer

cd %AGENT_HOME%

set CLASSPATH="
for /R .\lib %%a in (*.jar) do (
	set CLASSPATH=!CLASSPATH!;%%a
)
set CLASSPATH=!CLASSPATH!;%AGENT_HOME%\bin;"

"%JAVA_HOME%\bin\java.exe" -classpath %CLASSPATH% -Xms128m -Xmx512m %TARGET_APP%
```

{% endcode %}

{% code title="Windows – startup.bat" %}

```batch
@echo off
setLocal EnableDelayedExpansion

set AGENT_HOME=C:\에이전트(경로 변경)
set SVC_NAME=FingerPushAgent
set NSSM32=%AGENT_HOME%\JavaService\nssm32.exe
set NSSM64=%AGENT_HOME%\JavaService\nssm64.exe
.
.
.
:EXIT
echo.
pause
REM exit
```

{% endcode %}

{% code title="Linux" %}

```batch
#!/bin/sh

#empty

JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64
AGENT_HOME=/home/fingerpush/fingerPushAgent
.
.

DAEMONCLASS=com.finger.agents.server.AgentDistServer
DAEMONNAME=fpAgent

JAVA_PNAME="-Dpn=$DAEMONNAME"
JAVA_PROPERTY="-Xms32m -Xmx512m"

case "$1" in
start)
	echo "start FingerPush Agent!"
	nohup $JAVA_COMMAND $JAVA_PNAME $JAVA_PROPERTY -cp $CLASSPATH $DAEMONCLASS > /dev/null 2>&1&
	exit 0
	;;
stop)
	echo "stop FingerPush Agent"
	sh $AGENT_HOME/cmd/stop.sh $DAEMONNAME
	exit 0
	;;
esac
```

{% endcode %}

{% hint style="info" %} <mark style="color:blue;">실행 여부 확인:</mark> - ps -ef | grep fpAgent 명령어를 통해 실행 확인 여부 가능합니다.
{% endhint %}

## 실행

### **OS별 실행 명령어**

1\) 설치된 경로(d:\FingerPushAgentsForMssql) \bin\cmd\startup.bat를 실행하면 프롬프트창이 생기면서 에이전트가 구동됩니다.

| Windows             | Linux                         |
| ------------------- | ----------------------------- |
| bin\cmd\startup.bat | bin\cmd\fpAgent.sh start/stop |

&#x20;2\) Windows의 경우 콘솔창에서 에이전트 실행메뉴를 확인할 수 있습니다.

* 에이전트의 윈도우 서비스를 사용하려면 1번, 3번 중 윈도우 환경에 맞게 선택하면 됩니다. 서비스 등록과 동시에 실행이 됩니다.
* 5번을 선택해서 정상 동작하는 것을 확인 후 서비스에 등록합니다.
* 일반 콘솔창에서 사용하려면 5번을 선택하면 됩니다.

![](https://1606198054-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ff5XCUiUhwc0T57hW21TH%2Fuploads%2FvIo5F32EqBNGq9KodLEJ%2Fcmd.png?alt=media\&token=057590a4-495d-4f7c-8598-8267746d43ed)

{% hint style="danger" %} <mark style="color:red;">서비스 등록이 안되는 경우 CMD창을 관리자 모드로 실행 바랍니다.</mark>
{% endhint %}

### **에이전트 실행**

1\)  에이전트가 실행되면서 에이전트에서 사용하는 테이블은 자동 생성됩니다.

2\) AGPUSH\_MASTER

* 캠페인 발송 시 푸시 발송에 대한 주요 정보를 저장하는 테이블입니다.
* Master 테이블에 1개의 로우가 입력되고, msg 테이블에 대상자를 입력하면 됩니다.
* 테이블 설명: [Agent 테이블 설명](https://developers.fingerpush.com/app-push/agent/table) 페이지를 참고해 주세요.

3\) AGPUSH\_QUEUE

* 푸시 발송할 데이터를 입력하는 큐 테이블이며 테이블에 입력된 순서대로 발송이 됩니다.
* 데이터는 발송 후 AGPUSH\_RESULT\_YYYYMM로 이동되고 queue테이블에서 삭제됩니다.
* 테이블 설명: [Agent 테이블 설명](https://developers.fingerpush.com/app-push/agent/table) 페이지를 참고해 주세요.

4\) AGPUSH\_RESULT\_YYYYMM

* msg 테이블에 입력된 발송 데이터의 결과가 저장되는 테이블입니다.
* 데이터는 월별로 백업되며, senddate컬럼값을 기준으로 AGPUSH\_RESULT\_YYYYMM  테이블에 값이 저장됩니다.
* 테이블 설명: [Agent 테이블 설명](https://developers.fingerpush.com/app-push/agent/table) 페이지를 참고해 주세요.

5\) 에러 코드(error\_code)

* 코드 리스트: [Agent 테이블 설명](https://developers.fingerpush.com/app-push/agent/table) 페이지를 참고해 주세요.
