런타임 환경 관리
ProFrame의 런타임은 UNIX 시스템을 기반으로 운영되며 환경변수, 환경설정 파일 그리고 파라미터 등을 통해 런타임 환경을 관리한다.
1. 환경변수 설정
ProFrame의 환경변수는 ProFrame의 필수 디렉터리 경로 및 컴파일 경로 그리고 실제 운영할 때 제어하기 위한 정보뿐만 아니라 TmaxSoft Tmax와 JEUS 그리고 각종 DB의 경로 및 정보를 설정할 수 있다.
ProFrame의 환경설정 파일은 ProFrame을 설치할 때 아래의 디렉터리에 자동으로 설치되며, 각 개발 환경에 맞게 환경설정 파일의 설정을 변경해야 한다.
$PRJROOT/proframe5.0/package/proframe/pfm/tpl/env
각 환경설정 파일의 대략적인 설명은 다음과 같다.
| 환경설정 파일 | 설명 | |
|---|---|---|
profile |
환경변수 entry 파일이다. profile을 제일 먼저 읽고 각 장비에 따라 상세 항목으로 분기한다. 공통 alias를 정의할 수 있다. |
|
Profile.proframe |
ProFrame의 런타임과 관련된 항목을 기술한다. |
|
profile.{OS} |
profile.aix profile.hpux profile.hpux_parisc profile.sun profile.linux |
OS 및 장비 설정에 따라 변경되는 항목을 기술한다. |
profile.{DB} |
profile.oracle profile.tibero |
DB 설정에 따라 변경되는 항목을 기술한다. |
profile.{TP} |
profile.tmax profile.tuxedo |
TP-Monitor 설정에 따라 변경되는 항목을 기술한다. |
profile.{WAS} |
profile.jeus |
통합 서버를 관리하기 위한 JEUS 항목과 관련된 내용을 기술한다. |
profile.xml |
ProFrame에서 사용되는 XML 관련 항목을 기술한다. |
|
1.1. profile 환경설정 파일
OS, WAS, TP, DB 제품에 대한 벤더 이름 및 설치된 경로를 설정한다.
현재 각 항목별로 지원되는 벤더는 다음과 같다.
| 제품종류 | 지원 벤더 |
|---|---|
OS |
hpux, hpux_parisc, aix, sun, linux |
DB |
Oracle or Tibero |
TP |
Tmax, TUXEDO |
WAS |
JEUS |
다음은 실제 profile 파일의 내용이다. 아래 profile 내용 중에서 “VENDOR 설정” 부분은 사용하는 제품별 벤더에 맞게 설정한다.
#!/usr/bin/ksh
##################################################################
# PATH 및 LD_LIBRAYRY 설정
##################################################################
export PATH=$PATH
export LD_LIBRARY_PATH=""
export LIBPATH=""
export LD_LIBRARY_PATH_64=""
##################################################################
# VENDOR 설정
# - 각 VENDOR를 설정하고 각각의 HOME directory를 설정한다.
#
##################################################################
export OS_VENDOR={OS 종류를 적어준다. hpux, hpux_parisc, aix, sun, linux }
export DB_VENDOR={DB 종류를 적어준다. oracle or tibero }
export DB_HOME={DB의 HOME의 위치를 적어준다. /data/oracle }
export TP_VENDOR={TP-Monitor 종류를 적어준다. tmax, tuxedo }
#export TP_VERSION=5 # TMAX 버전이 4.8 이상일 때만 사용
export TP_HOME=$PRJROOT/package/tmax # TP-Monitor 위치가 다른 경우 수정
export WAS_VENDOR=jeus
export WAS_HOME=$PRJROOT/package/jeus # JEUS 위치가 다른 경우 수정
export PFM_HOME=$PRJROOT/package/proframe/pfm
export PFMADM_HOME=$PRJROOT/package/proframe/pfmadm
##################################################################
# Vendor Environment
##################################################################
# OS 환경변수 설정
. $ENVHOME/profile.$OS_VENDOR
# DB 환경변수 설정
. $ENVHOME/profile.$DB_VENDOR
# TP 환경변수 설정
. $ENVHOME/profile.$TP_VENDOR
# JEUS 환경변수 설정
. $ENVHOME/profile.$WAS_VENDOR
# proframe
. $ENVHOME/profile.proframe
# XML Environment set
. $ENVHOME/profile.xml
export PATH=.:$PATH
export LIBPATH=$LIBPATH:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH_64=$LD_LIBRARY_PATH_64:$LD_LIBRARY_PATH
##################################################################
# HOME Environment
##################################################################
export HOMEINC=$HOME/inc
export HOMELIB=$HOME/lib
export HOMEBIN=$HOME/bin
export HOMESHL=$HOME/shl
CDPATH=.:$HOME:$TMAXDIR:$TMAXDIR/log:$PFMROOT:$PFMROOT/tpl; export CDPATH
export OWNER=`whoami`
######## Aliases-1 #########
alias ptpl='cd $PFMROOT/tpl'
alias pinc='cd $PFMROOT/inc'
alias psrc='cd $PFMROOT/src'
alias pbin='cd $PFMROOT/bin'
alias plib='cd $PFMROOT/lib'
alias rm='rm -i'
alias tmax='cd $TMAXDIR'
alias xgrep='find . -name '\''*.[ch]'\''| xargs egrep -n'
#alias 가 필요한 경우 추가 삽입
1.2. profile.proframe 환경설정 파일
ProFrame 런타임에서 사용되는 각종 환경변수를 설정한다. 각종 디렉터리, 로그, 환경설정 파일 위치, DBIO, AMS 연동 등이 profile.proframe에 설정된다.
###########################################################################
# ProFrame Environment #
###########################################################################
export PFMROOT=$PFM_HOME # ProFrame Runtime의 Root 디렉터리
## For MultiPorject and Workspace/Release Image ##
export PROJECT_ID={project ID 기입(Studio Login할 때 project ID값과 동일)} # Project ID
export PFMRELDIR_WS=$PRJROOT/ws/release
export PFMWSPOSTFIX=_WS #workspace postfix
## For ProFrame Release ##
export PFMRELDIR=$PRJROOT/release # AP가 위치하는 Root Release 디렉터리
umask 0000 # File 생성할 때 사용되는 권한 Masking 옵션
export LC_ALL=C
export LANG=ko_KR.eucKR # CharSet 설정
export PFMTPL=$PFMROOT/tpl # 환경설정 및 빌드 설정 파일이 위치하는
# Root 디렉터리
export PFMLOG=$PRJROOT/logging # Log 파일이 생성되는 Root Log 디렉터리
######## config file Setting ########
export PFMCONFIG=$PFMROOT/cfg # 각종 환경설정 파일이 위치하는
# 디렉터리
export TCACHECONF=$PFMCONFIG/pfmtcache.cfg # pfmTCache 설정 파일
export APMMEM_CONF=$PFMCONFIG/apmmem.cfg # sysmaster 연동 설정 파일
######## TCACHE OPTION ########
export PFM_TCACHE_MODE=ON # Runtime 엔진에서 pfmTCache를
# 사용할지 여부를 설정 (ON/OFF)
######## TDLSEQ OPTION ########
export PFM_TDLSEQNO_SYNC=OFF # tdlcall 정합성 보장 로직의
# 사용 여부를 설정 (ON/OFF)
######## Logging Option ########
export PFMLOGNAMETYPE=0 # SVR_LOG : 0 – 서버별 로그 파일 생성
# SVC_LOG : 1 – 온라인은 서비스별 로그 파일 생성
# 배치는 프로세스별 로그 파일 생성
# PRC_LOG : 2 – 프로세스별 로그 파일 생성
# 배치는 서버별 로그 파일 생성
# BAT_LOG : 3 – 온라인은 서비스별 로그 파일 생성
# 배치는 서버별 로그 파일 생성
export PFMLOGTYPE=EWITD # LOG_TYPE의 기본값.
# 거래 시에는 PFM_SVC의 로그 타입이 사용됨.
export PFMTRACELOGLEVEL=AL # TRACE_LOG_LEVEL의 기본값
export PFMDEBUGLOGLEVEL=AL # DEBUG_LOG_LEVEL의 기본값
export PFM_USR_LOG_DIR=$PFMLOG/ulog # User 로그의 위치
export PFM_USR_LOG_FILE=usr # User 로그에 사용되는 파일명
export PFM_SYS_LOG_DIR=$PFMLOG/slog # System 로그의 위치
export PFM_SYS_LOG_FILE=sys # System 로그에 사용되는 파일명
export PFM_ERR_LOG_DIR=$PFMLOG/errlog # Error 로그의 위치
export PFM_ERR_LOG_FILE=err # Error 로그에 사용되는 파일명
export PFM_CON_LOG_DIR=$PFMLOG/conlog # Console 로그의 위치
export PFM_CON_LOG_FILE=con # Console 로그에 사용되는 파일명
export PFM_BAT_LOG_DIR=$PFMLOG/batlog # 배치로그의 위치
export PFM_BAT_LOG_FILE=bat # 배치로그에 사용되는 파일명
export PFM_AMS_LOG_DIR=$PFMLOG/amslog # Ams 로그의 위치
export PFM_ANAL_LOG_DIR=$PFMLOG/analog #
export PFM_CORE_DIR=$PFMLOG/core # Coredump 발생할 때 core 파일이 생성될 위치
export PFM_NLOG_FLAG=ON # ON : PFM_NLOG Macro On
# OFF : PFM_NLOG Macro Off
export PFM_NLOG_DIR=$PFMLOG/nlog
export PFM_NLOG_FILE_NM=ndbg
export PFM_NSLOG_FLAG=OFF # ON : Write slog to User Defined File.
# OFF : Write slog to PFM_SYS_LOG_FILE, default
export PFM_NSLOG_DIR=$PFM_SYS_LOG_DIR/nslog
export PFM_NSLOG_FILE_NM=nslog
export PFM_ADM_LOG=ON # ON : Write call count log to PFM_ADM_LOG table
# OFF : Call count log off. default
export PFM_ULOG_ONLY=0 # 1 : Only write ulog
# 0 : Write all, ulog, slog, elog, conslog analog, default
## For ProFrame ##
export PFMINCDIR=$PFMROOT/inc # ProFrame Runtime 헤더파일 위치
export PFMLIBDIR=$PFMROOT/lib # ProFrame Runtime 라이브러리 위치
export PFMBINDIR=$PFMROOT/bin # ProFrame Runtime 실행파일 위치
export PFMSHLDIR=$PFMROOT/shl # ProFrame Runtime Shell script 파일 위치
## For ProFrame DBIO ##
export DBIOHOME=$PFMRELDIR/dbio # DBIO ROOT 디렉터리
export DBIOSRCDIR=$DBIOHOME/src # DBIO 모듈 소스가 위치
export DBIOLOGDIR=$DBIOHOME/log # DBIO Log 파일 위치
export DBIOINCDIR=$DBIOHOME/inc # DBIO 모듈 헤더파일이 위치
export DBIOLIBDIR=$DBIOHOME/lib # DBIO 모듈 라이브러리가 위치
## For ProFrame Workspace DBIO ##
export DBIOHOME_WS=$PFMRELDIR_WS/dbio # Workspace DBIO ROOT 디렉터리
export DBIOSRCDIR_WS=$DBIOHOME_WS/src # Workspace DBIO 모듈 소스가 위치
export DBIOLOGDIR_WS=$DBIOHOME_WS/log # Workspace DBIO Log 파일 위치
export DBIOINCDIR_WS=$DBIOHOME_WS/inc # Workspace DBIO 모듈 헤더 파일이 위치
export DBIOLIBDIR_WS=$DBIOHOME_WS/lib # Workspace DBIO 모듈 라이브러리가 위치
export DBIO_DEFAULT_SCHEMA=NPFM # DBIO Default Schema 설정
export DBIO_CURTAIL=5 # DBIO library 만들 때 이름을 잘라내는 길이
# PFM_CONFIG의 DBIO.CUTLENGTH 항목과 같은 의미
## For ProFrame PROMAPPE ##
export PMAPHOME=$PFMRELDIR/pmap # ProMapper ROOT 디렉터리
export PMAPSRCDIR=$PMAPHOME/src # ProMapper 모듈 소스 위치
export PMAPINCDIR=$PMAPHOME/inc # ProMapper 모듈 헤더파일 위치
export PMAPLIBDIR=$PMAPHOME/lib # ProMapper 모듈 라이브러리 위치
export PMAP_DECIMAL_POLICY=err # ProMapper Decimal 초과 시 절사/오류 처리 옵션
## For ProFrame Workspace PROMAPPE ##
export PMAPHOME_WS=$PFMRELDIR_WS/pmap # Workspace ProMapper ROOT 디렉터리
export PMAPSRCDIR_WS=$PMAPHOME_WS/src # Workspace ProMapper 모듈 소스 위치
export PMAPINCDIR_WS=$PMAPHOME_WS/inc # Workspace ProMapper 모듈 헤더파일 위치
export PMAPLIBDIR_WS=$PMAPHOME_WS/lib # Workspace ProMapper 모듈 라이브러리 위치
## AMS Config
export PFM_AMS_USE_FLAG=SYSMASTER # AMS 시스템 옵션
# (SYSMASTER/OFF)
# Default : OFF
## PATH Assignment ##
export PATH=$PFMBINDIR:$PFMSHLDIR:$PATH
export LD_LIBRARY_PATH=$PFMLIBDIR:$DBIOLIBDIR:$PMAPLIBDIR:$LD_LIBRARY_PATH
## TDLERROR RESTART
export PFM_TDL_TRAN_ERR_RESTART=FALSE # default : FALSE
## TP Server Down, Memory Manager Free Skip ##
export TP_SVR_DOWN_MEM_FREE_SKIP=FALSE
1.3. profile.{OS} 환경설정 파일
OS 명령어 및 라이브러리 사용을 위해 PATH 및 LD_LIBRARY_PATH 환경변수를 설정한다.
#!/usr/bin/ksh ################################################################## # OS Environment # - OS에서 설정해야 하는 환경변수이다. # 만일 /etc/profile 또는 PATH 등에 아래의 내용이 설정되어 있다면 제거해도 된다. ################################################################## ## PATH Assignment ## export PATH=/usr/bin:/usr/sbin:/usr/local/bin:/usr/ccs/bin:/opt/langtools/bin:$PATH export LD_LIBRARY_PATH=/usr/lib/hpux64:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH export OBJECT_MODE=64 #AIX인 경우 사용
profile.{DB} 환경설정 파일 - Oracle인 경우
DB 사용을 위해 각 DB 벤더가 요구하는 환경변수를 설정한다. 각 환경변수에 대한 자세한 설명은 DB 벤더가 제공하는 매뉴얼을 참조한다.
#!/usr/bin/ksh
##################################################################
# DB Environment
# - DB에 대한 환경변수다.
# - 아래의 CONNECT_INFO는 batch 및 서버가 Non-XA 형태로 DB 접속할 때 사용해야
# 하는 user이다.
##################################################################
export ORACLE_BASE=$DB_HOME
export ORACLE_HOME=$ORACLE_BASE
###################################################################
# 기본적으로 아래 값은 그대로 사용하면 되지만, 문제가 있다면 ORACLE 설치 환경을
# 확인하여 그에 맞게 설정함
##################################################################
export ORA_NLS33=$ORACLE_HOME/nls/data
export TNS_ADMIN=$ORACLE_HOME/network/admin
export OCIDIR=$ORACLE_HOME/rdbms/public
###################################################################
# ORACLE 설치 환경에 따라 필수 설정해야 함
##################################################################
export ORACLE_SID={Oracle sid}
export CONNECT_INFO={database 접속 계정 정보}@$ORACLE_SID
###################################################################
# 따로 설정을 하지 않아도 되는 부분
##################################################################
export ORACLE_TERM=vt220
#export NLS_LANG=American_America.KO16KSC5601
export NLS_LANG=korean_korea.KO16KSC5601
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export TWO_TASK=$ORACLE_SID
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
profile.{DB} 환경설정 파일 - Tibero인 경우
DB 사용을 위해 각 DB 벤더가 요구하는 환경변수를 설정한다. 각 환경변수에 대한 자세한 설명은 DB 벤더가 제공하는 매뉴얼을 참조한다.
#!/usr/bin/ksh
##################################################################
# DB Environment
# - DB에 대한 환경변수다.
# - 아래의 CONNECT_INFO는 배치 및 서버가 Non-XA 형태로 DB 접속 시 사용해야
# 하는 user 이다.
##################################################################
export TIBERO_BASE=$DB_HOME
export TB_HOME=$DB_HOME
export TIBERO_HOME=$TIBERO_BASE_BASE/client
###################################################################
# 기본적으로 아래 값은 그대로 사용하면 되지만, 문제가 있다면 TIBERO 설치 환경을
# 확인하여 그에 맞게 설정함
##################################################################
export TNS_ADMIN=$TIBERO_HOME/config
###################################################################
# TIBERO 설치 환경에 따라 필수 설정해야 함
##################################################################
export TIBERO_SID={Oracle sid}
export CONNECT_INFO={database 접속 계정 정보}@$TIBERO_SID
###################################################################
# 따로 설정을 하지 않아도 되는 부분
##################################################################
export NLS_LANG=korean_korea.KO16KSC5601
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
profile.{TP} 환경설정 파일 – Tmax인 경우
TP-Monitor 사용을 위해 각 TP 벤더가 요구하는 환경변수를 설정한다. 각 환경변수에 대한 자세한 설명은 TP 벤더가 제공하는 매뉴얼을 참조한다.
#!/usr/bin/ksh
##################################################################
# Tmax Environment
# - TMAX_HOST_ADDR과 TMAX_HOST_PORT는 환경에 맞게 수정
##################################################################
export TMAX_HOST_ADDR={Tmax 접속 IP를 기술}
export TMAX_HOST_PORT={Tmax 접속 Port를 기술}
##################################################################
# Tmax 기본 설치가 되었었다면 수정하지 않아도 되는 항목
##################################################################
export TMAXDIR=$TP_HOME
export TMAX_CONNECT_TIMEOUT=3
export FDLFILE=$TMAXDIR/sample/fdl/tmax.fdl
export TMAX_TRACE=*:ulog
export TDLDIR=$TMAXDIR/tdlcall
## PATH Assignment ##
export PATH=$TMAXDIR/bin:$PATH
#export LD_LIBRARY_PATH=$TMAXDIR/lib64:$LD_LIBRARY_PATH
# 32bit Mode일 경우 아래 사용
export LD_LIBRARY_PATH=$TMAXDIR/lib:$LD_LIBRARY_PATH
profile.{WAS} 환경설정 파일 – JEUS일 경우
WAS를 사용하기 위해 WAS 벤더가 요구하는 환경변수를 설정한다. JAVA를 실행하기 위한 PATH 환경변수와 CLASSPATH 환경변수를 설정한다.
################################################################## # Jeus Environment # - JAVA_HOME은 장비에 따라 위치가 달라질 수 있으므로 확인 필요 ################################################################## export JEUS_HOME=$WAS_HOME export JAVA_HOME=/opt/java1.5 # java 위치 기술 JAVA 버전 1.5 이상 # PATH Setting export PATH=$JAVA_HOME/bin:$JEUS_HOME/bin:$JEUS_HOME/webserver/bin:$PATH ## CLASS PATH for JAVA and JEUS ## export CLASSPATH=.:$JAVA_HOME/lib/*.jar:$JAVA_HOME/jre/lib/*.jar: $JEUS_HOME/lib/system/jeus.jar export CLASSPATH=$CLASSPATH:$JEUS_HOME/lib/system/webt50.jar
profile.xml 환경설정 파일
XML 분석기 사용을 위해 요구되는 환경변수를 설정한다. XML 분석기는 ProFrame와 함께 제공된 것을 사용하므로, 일반적으로 수정할 필요가 없다.
#!/usr/bin/ksh ################################################################## # XML Environment # - libxml2 ################################################################## export XML_BASE=$PFMROOT/xml_parser export XML_HOME=$XML_BASE/xml export XML_SOURCE=$XML_BASE/libxml2-2.6.26 ## PATH Assignment ## export PATH=$XML_HOME/bin:$PATH export LD_LIBRARY_PATH=$XML_HOME/lib:$LD_LIBRARY_PATH
2. 환경설정
ProFrame의 런타임 환경설정은 다음과 같이 크게 2가지로 나누어진다.
ProFrame의 런타임 환경설정 파일은 ProFrame을 설치할 때 아래의 디렉터리에 자동으로 설치되며, 각 개발 환경에 맞게 환경설정 파일의 설정을 변경해야 한다
$PRJROOT/proframe5.0/package/proframe/pfm/cfg
-
Flow 환경설정 파일
ProFrame의 런타임을 수행할 때 Flow를 제어한다.
-
PFM_CONFIG 테이블
ProFrame의 기능을 제어하기 위한 것으로 DB에 있다.
2.1. Flow 환경설정 파일
Flow 환경설정 파일은 소스의 수정 및 컴파일 없이 런타임 엔진의 동작을 변경하기 위한 Flow 제어기능을 설정하는 파일이다.
Flow 환경설정 파일에 대한 자세한 설명은 아래와 같다.
| 파일 종류 | 파일 설명 |
|---|---|
ippr_flow.cfg |
IPPR의 Flow를 제어하기 위한 파일이다. |
svc_flow.cfg |
Service의 Flow를 제어하기 위한 파일이다. |
link_flow.cfg |
연동 모듈 내부 Flow를 제어하기 위한 파일이다. |
exit_flow.cfg |
Timeout이나 signal 발생 등과 같은 비정상 종료되는 경우 전문을 전송하기 위해 Flow를 제어하기 위한 파일이다. |
bat_flow.cfg |
Batch Flow를 제어하기 위한 파일이다. |
-
Flow 환경설정 파일(ippr_flow.cfg)
다음은 IPPR를 수행할 때 각 모듈의 수행 순서를 설정한 파일이다. 기본적으로 설정된 모듈들을 순차적으로 실행하지만, 에러가 발생하는 경우에는 jump 섹션으로 이동하여, 에러처리 루틴을 수행하게 된다. 여기에서는 IPPR의 Flow 제어 파일을 예제로 하여 Flow vi 환경설정 파일에 대해서 설명한다.
*IPPR_SUCCESS_FLOW #library name function name Error jump section pfmIpprProcess pfmInitializeIppr NULL pfmAmsWrapper pfmAmsInitialize NULL pfmIpprExternalProcess pfmWriteImageLog NULL pfmIpprProcess pfmSetSharedVariable PFM_CATCH1 pfmIpprProcess pfmGetServiceParameter PFM_CATCH10 pfmIpprProcess pfmValidateServiceParameterItem PFM_CATCH11 pfmAmsWrapper pfmAmsSetThresholdFromParameter NULL pfmAmsWrapperExt pfmAmsInitParamInfo NULL pfmAmsWrapper pfmAmsLogStart NULL pfmIpprProcess pfmInitializeHeader PFM_CATCH20 pfmIpprProcess pfmConvertHeaderMessageToStruct PFM_CATCH20 pfmIpprProcess pfmConvertHeaderPostProcessing PFM_CATCH20 pfmIpprExternalProcess pfmConvertHeaderExtensionMessageToStruct PFM_CATCH30 pfmIpprExternalProcess pfmGetServiceExtensionParameter PFM_CATCH40 pfmIpprProcess pfmSetComBufData PFM_CATCH60 pfmAmsWrapper pfmAmsLogEnd NULL *PFM_CATCH1 pfmIpprProcess pfmHandleErrorOfSettingSharedVariable NULL *PFM_CATCH10 pfmIpprProcess pfmInitializeHeader PFM_CATCH20 pfmIpprProcess pfmConvertHeaderMessageToStruct PFM_CATCH20 … pfmOpprExternalProcess pfmComposeOutputMessage PFM_CATCH190 pfmTransactionFrame pfmTransactionFrameRollback PFM_CATCH200 *PFM_CATCH20 … *PFM_CATCH200 …
위의 예제에서 “*(asterisk)”가 붙어있는 항목은 섹션의 시작을 나타낸다. 섹션은 각 Flow의 이름을 지칭하며 에러가 발생한 경우에 jump할 다음 섹션 위치를 지정하기 위한 이름이다.
Flow 제어 파일의 기본 원칙은 다음과 같다.
-
호출된 함수가 정상인 경우 다음 flow를 진행한다.
-
호출된 함수가 에러인 경우 jump 섹션에 정의된 섹션으로 넘어가서 정의된 flow를 호출한다.
-
Section의 마지막까지 도착했거나 또는 에러가 발생했으나 jump 섹션이 NULL인 경우 flow는 종료된다.
IPPR_SUCCESS_FLOW는 ippr_flow.cfg에서 flow가 시작되는 부분은 제일 처음에 정의된다. 라이브러리명과 함수명 그리고 jump 섹션명이 기록되어 있으며, 각각의 호출할 라이브러리명과 함수명 그리고 에러가 발생할 경우 처리할 섹션명이 기록되어 있다.
위의 ippr_flow.cfg에서 제일 처음에 수행되는 함수는 pfmIpprProcess 라이브러리의 pfmInitializeIppr 함수를 호출하고 함수의 처리 결과가 정상이면 그 다음에 기술된 pfmAmsWrapper 라이브러리의 pfmAmsInitialize 함수를 호출하고 pfmInitializeIppr 함수 처리 결과가 정상이 아니면 jump 섹션에 정의된 섹션으로 넘어가서 flow를 진행한다. ippr_flow.cfg와 같이 jump 섹션이 NULL인 경우에는 에러 처리가 종료되었거나 에러처리를 할 수 없는 상황을 의미하며 더 이상 flow를 진행하지 않고 flow를 종료한다.
-
2.2. PFM_CONFIG 테이블
ProFrame 런타임의 동작에 사용되는 환경설정 항목을 설정한 DB 테이블로 런타임 엔진의 데이터베이스에서 확인할 수 있다.
전문 분석을 위한 Offset 및 Length 설정, DBIO, 센터 컷 등에서 사용하는 설정, CommBuff 전달 영역 설정 등의 다양한 설정을 통해서 런타임 엔진의 동작을 제어한다.
DB의 PFM_CONFIG 테이블에 설정하는 항목들에 대한 설명은 다음과 같다. 그밖에 사이트에서 정의한 환경설정 항목을 추가해 사용할 수 있다.
| 환경설정 항목 | 비고 |
|---|---|
befimg.useflag |
Before Image 사용 여부이다. (Y/N) |
ccut.checkBizDate |
센터 컷 수행 중 영업일 확인 여부이다. (Y/N) |
DBIO.CUTLENGTH |
DBIO library를 만들 때 잘라내는 physical name의 길이이다. (기본값: 6) |
dbio.lastSqlBufSize |
pfmDbioGetLastSql()에서 반환하는 string 최대 크기이다. (기본값: 5000) |
dwio.delimiter |
dwlog에서 사용할 delimiter 정의이다. (기본값: |+) |
dwio.pre-mdfstr.type |
미사용 (기본값: ALL) |
dwio.systimeunit |
dwlog 테이블 sys_lging_time 컬럼에 micro 또는 nano second 로깅 여부이다. (기본값: micro) |
dwio.useflag |
dwlog에서 사용할 delimiter 정의이다. (Y/N) |
inputHeader.custmizeHeader.length |
입력 전문에서 커스터마이즈 헤더의 길이 정보이다. (기본값: 290) |
inputHeader.custmizeHeader.offset |
입력 전문에서 커스터마이즈 헤더의 위치 정보이다. (기본값: 256) |
inputHeader.custmizeHeader.structName |
입력 전문에서 커스터마이즈 헤더의 변환에 사용될 헤더 구조체 이름이다. (기본값: PfmCustomizeHeaderStr) |
inputHeader.dataHeader.length |
입력전문에서 데이터 부분의 길이이다. (기본값: -1, 길이 정해지지 않음) |
inputHeader.dataHeader.offset |
입력 전문에서 데이터 부분의 위치 정보이다. (기본값: 546) |
inputHeader.proframe.length |
입력 전문에서 ProFrame 헤더의 길이 정보이다. (기본값: 256) |
inputHeader.proframe.offset |
입력 전문에서 ProFrame 헤더의 위치 정보이다. (기본값: 0) |
inputHeader.proframe.structName |
입력 전문에서 ProFrame 헤더의 변환에 사용될 헤더 구조체 이름이다. (기본값: PfmSystemHeaderStr) |
inputItem.globalId.length |
입력 필수항목인 Global ID의 길이 정보이다. (기본값: 32) |
inputItem.globalId.offset |
입력 필수항목인 Global ID의 위치 정보이다. (기본값: 8) |
inputItem.instNo.length |
입력 필수항목인 inst_no의 길이 정보이다. (기본값: 4) |
inputItem.instNo.offset |
입력 필수항목인 inst_no의 위치 정보이다. (기본값: 64) |
inputItem.txCode.length |
입력 필수항목인 tx_code의 길이 정보이다. (기본값: 24) |
inputItem.txCode.offset |
입력 필수항목인 tx_code의 위치 정보이다. (기본값: 40) |
pfmAnalysis.analLogHashNum |
Analysis log 내부에서 사용할 hash의 크기이다. (기본값: 1024) |
pfmAnalysis.checkAnalLogFlag |
Analysis log 사용 여부이다. (TRUE/FALSE) |
pfmAnalysis.checkQueryFlag |
Query 수행시간 로깅 사용여부이다. (TRUE/FALSE) |
pfmComBuf.deliveryIndexRange |
Commbuff 전달 영역 정의로 콤마(,)를 사용하여 중복지정 가능하다. (기본값: 0~50) |
pfmConfig.nodeNo.{host name} |
호스트명으로 각각의 고유 sequence를 설정한다. (기본값: 0~N) |
pfmLog.locale |
Message 로깅을 사용할 때 locale을 설정한다. (기본값: KR) |
pfmMalloc.VarrayAllocErrorType.Batch |
배치에서 varray를 사용할 때 메모리를 과다 사용할 경우 처리 방법이다.
|
pfmMalloc.VarrayAllocErrorType.Online |
온라인에서 varray를 사용할 때 메모리를 과다 사용할 경우 처리 방법이다.
|
renumbering.aplog.time.interval |
aplog numbering할 경우 각 cycle 간의 pfmTpSchedule() 시간이다. (기본값: 1초) |
renumbering.aplog.update.count |
aplog numbering할 경우 한 cycle에서 처리하는 최대 건수이다. (기본값: 100) |
renumbering.cmlog.time.interval |
cmlog numbering할 경우 각 cycle 간의 pfmTpSchedule() 시간이다. (기본값: 1초) |
renumbering.cmlog.update.count |
cmlog numbering할 경우 한 cycle에서 처리하는 최대 건수이다. (기본값: 1000) |
renumbering.dwlog.time.interval |
dwlog numbering할 경우 각 cycle 간의 pfmTpSchedule() 시간이다. (기본값: 5초) |
renumbering.dwlog.update.count |
dwlog numbering할 경우 한 cycle에서 처리하는 최대 건수이다. (기본값: 1000) |
3. 런타임 파라미터 설정
ProFrame에서는 개발 또는 운영상의 편의를 위해 파라미터에 의한 구동(Parameter Driven) 방식을 지원한다.
다음과 같은 파라미터를 사용하여 런타임 엔진의 동작을 동적으로 제어한다.
| 파라미터 | 설명 |
|---|---|
PFM_MSG |
로그 및 메시지를 관리하기 위한 메시지 파라미터이다. |
PFM_SVC, PFM_SVC_EXT |
온라인 서비스를 제어하기 위한 서비스 파라미터이다. |
PFM_SM, PFM_SM_EXT |
서비스 모듈을 제어하기 위한 서비스 모듈 파라미터이다. |
PFM_BATCH, PFM_BATCH_EXT |
배치 업무를 제어하기 위한 배치 파라미터이다. |
3.1. PFM_MSG 테이블
로그 및 메시지 파라미터는 DB의 PFM_MSG 테이블을 이용한다.
PFM_MSG 테이블의 상세 내용은 다음과 같다.
| 컬럼 이름 | 설명 |
|---|---|
PROJECT_ID |
Project를 구분하기 위한 Project ID 값이다. |
LOCALE |
지역 구분자로 지역별로 언어를 달리하여 출력할 때 지정되는 값이다. ("KR", "EN", "JP" 사용) |
CHANNEL |
채널 구분자이다. 채널별로 구분하여 각기 다른 메시지를 출력할 때 지정되는 값으로서 사이트에서 정의하여 사용한다. (기본값: "PFM") |
CODE |
메시지 또는 로깅할 때에 사용될 코드 값이다. |
RTN_VALUE |
에러가 발생할 때 최종적으로 헤더에 반환될 값이다. (기본값: 99999) |
AREA |
로깅할 때 사용되는 구분자이다. "(E) PFM: ~~~~" 형식과 같이 로깅의 두 번째 컬럼에 출력되는 값이다. |
OUT_TYPE |
로깅할 때 출력방향을 지정하는 값이다.
Message 출력할 경우의 값이다.
단, 메시지 출력할 때 구분자는 미정이다. |
MESSAGE |
실제 로깅 또는 출력되는 메시지이다. 단순 문자열일 수도 있으나, 일반적으로는 printf() 형태의 함수에 사용되는 포맷의 의미를 가진다. |
3.2. PFM_SVC 및 PFM_SVC_EXT 테이블
서비스 파라미터는 DB의 PFM_SVC와 PFM_SVC_EXT 테이블을 이용한다.
-
PFM_SVC 테이블
ProFrame을 설치할 때에 기본적으로 설치되고 커스터마이즈할 수 없는 테이블이다.
PFM_SVC 테이블의 상세 내용은 다음과 같다.
컬럼 이름 설명 PROJECT_ID
Project를 구분하기 위한 Project ID 값이다.
INST_NO
기관 코드이다.
TX_CODE
거래 코드이다.
APPLY_SDATE
적용 시작일자이다. (YYYYMMDD)
APPLY_STIME
적용 시작시간이다. (HHSS)
APPLY_EDATE
적용 종료일자이다. (YYYYMMDD)
APPLY_ETIME
적용 종료시간이다. (HHSS)
STOP_FLAG
정지 여부이다. (Y/N)
STOP_SDATE
정지 시작일자이다. (YYYYMMDD)
STOP_STIME
정지 시작시간이다. (HHSS)
STOP_EDATE
정지 종료일자이다. (YYYYMMDD)
STOP_ETIME
정지 종료시간이다. (HHSS)
CALLEE_NAME
호출 모듈명이다.
STA_TYPE
상태 구분이다.
-
0 : 정상
-
1 : 비정상
TX_NAME
거래 코드에 대한 설명이다.
SVC_NAME
실제 호출할 서비스명이다.
DUMMY_SVC_NAME
dummy 호출 서비스명이다.
IN_STRUCT_NAME
Input 구조체 이름이다.
IN_MAP_NAME
Input 변환 맵 이름이다.
OUT_STRUCT_NAME
Output 구조체 이름이다.
OUT_MAP_NAME
Output 변환 맵 이름이다.
LOG_TYPE
로그 레벨이다. (기본값: 없음)
-
E : 에러 로그
-
W : Warning
-
I : Info 로그
-
T : Trace 로그
-
D : Debug 로그
-
H : Hex 로그
AP_LOG_PROCESS
업무 로그 수행 여부이다.
-
0 : 거래성
-
1 : 조회성
-
9 : 수행하지 않음 (기본값)
ERROR_LOG_PROCESS
업무 로그 수행 여부이다.
-
0 : 수행 (기본값)
-
1 : 수행하지 않음
TRACE_LOG_LEVEL
추적 로그 레벨이다.
-
AL : 전체 trace
-
DB : DB 정보 trace
-
TP : TP 정보 trace
-
DL : Dlcall 정보 trace
-
TC : Try 정보 trace
-
TS : Sys Try 정보 trace
-
IO : IO 정보 trace
-
CB : CommBuff 정보 trace
-
SV : Svc 정보 trace
-
OF : 전체 Off (기본값)
DEBUG_LOG_LEVEL
Debug 로그 레벨이다.
-
AL : All
-
IP : IPPR 정보 debug
-
SV : Svc 정보 debug
-
SI : Svc Init 정보 debug
-
SF : Svc Fini 정보 debug
-
FR : Flow 모듈 정보 debug
-
MO : 서비스 모듈의 전체 on
-
MF : 서비스 모듈의 전체 off
-
MD : 서비스 모듈 파라미터의 값을 따름
-
OP : 출력 변환 정보 debug
-
OF : Debug 정보 전체 off (기본값)
TRACE_LEVEL
Trace 레벨이다.
-
0 : 트랙킹 사용하지 않음 (기본값)
-
1 : 서비스만 트랙킹
-
2 : 서비스, DBIO
-
3 : 서비스, DBIO, 외부기관
-
4 : 서비스, DBIO, 외부기관, Dlcall
-
5 : 서비스, DBIO, 외부기관, Dlcall, function
THRESHOLD
SysMaster를 연동할 때 트랜잭션 수행시간에 대한 임계값이 값을 초과한 거래는 SysMaster에서 모니터링된다. (단위: milli second, 기본값: 0)
SQL_TRACE_LEVEL
SysMaster 연동 요건이다. (DB 성능 모니터링)
-
0 : 모니터링하지 않음 (기본값)
-
1 : SQL code
-
4 : SQL code & 변수 값
-
8 : SQL code & wait time
-
12 : ALL (SQL code & 변수 값 & wait time)
-
-
PFM_SVC_EXT 테이블
key 항목인 “NIST_NO”와 “TX_CODE”를 제외하고 커스터마이즈가 가능하다. PFM_SVC_EXT 테이블은 사이트에서 커스터마이즈하는 영역이므로 별도로 설명하지 않는다.
3.3. PFM_SM 및 PFM_SM_EXT 테이블
서비스 모듈 파라미터는 DB의 PFM_SM과 PFM_SM_EXT 테이블을 이용한다.
-
PFM_SM 테이블
ProFrame을 설치할 때에 기본적으로 설치되고 커스터마이즈할 수 없는 테이블이다.
PFM_SM 테이블의 상세 내용은 다음과 같다.
필드 이름 설명 PROJECT_ID
Project를 구분하기 위한 Project ID 값이다.
NAME
서비스 모듈 이름이다.
APPLY_SDATE
적용 시작일자이다. (YYYYMMDD)
APPLY_STIME
적용 시작시간이다. (HHSS)
APPLY_EDATE
적용 종료일자이다. (YYYYMMDD)
APPLY_ETIME
적용 종료시간이다. (HHSS)
STOP_FLAG
정지 여부이다. (Y/N)
STOP_SDATE
정지 시작일자이다. (YYYYMMDD)
STOP_STIME
정지 시작시간이다. (HHSS)
STOP_EDATE
정지 종료일자이다. (YYYYMMDD)
STOP_ETIME
정지 종료시간이다. (HHSS)
DEBUG_LOG_LEVEL
서비스 모듈 내의 debug 로그 레벨이다.
-
AL : All
-
SM : 서비스 모듈 debug
-
SI : 서비스 모듈 선처리 debug
-
SF : 서비스 모듈 후처리 debug
-
OF : 전체 Off (기본값)
-
-
PFM_SM_EXT 테이블
key 항목인 “NAME”을 제외하고 커스터마이즈가 가능하다. PFM_SM_EXT 테이블은 사이트에서 커스터마이즈하는 영역이므로 별도로 설명하지 않는다.
3.4. PFM_BATCH 및 PFM_BATCH_EXT 테이블
배치 파라미터는 DB의 PFM_BATCH 와 PFM_BATCH_EXT 테이블을 이용한다.
-
PFM_BATCH 테이블
ProFrame을 설치할 때에 기본적으로 설치되고 커스터마이즈할 수 없는 테이블이다.
PFM_BATCH 테이블의 상세 내용은 다음과 같다.
컬럼 이름 일반 배치 상주 배치 POD 배치 PROJECT_ID
Project를 구분하기 위한 Project ID 값이다.
BAT_CODE
배치 코드이다.
BAT_PHYSICAL_NAME
배치 물리명이다.
BAT_LOGICAL_NAME
배치 논리명이다.
STA_TYPE
상태구분이다.
-
0: 정상
-
1: 사용 안함
상태구분이다.
-
0: 정상
-
1: 사용 안함(UCS Server 다운)
상태구분이다.
-
0: 정상
-
1: 사용 안함(TP Server 다운)
STOP_FLAG
정지여부이다.
-
0: 정상
-
1: 정지
정지 여부이다.
-
0: 정상
-
1: 정지 (정지 flag가 설정되어 있는 경우 SCHDL_SEC만큼 tpsleep하고 parameter를 다시 로딩한다)
정지 여부이다.
-
0: 정상
-
1: 정지
BAT_TYPE
배치 구분이다.
-
G: 일반 배치
배치 구분이다.
-
U: UCS 배치
배치 구분이다.
-
P: POD 배치
EXEC_NODE
실행 노드이다.
-
ALL: 모든 노드에서 실행
-
그외(1~N): 해당 노드에서만 실행(N 값은 PFM_CONFIG에 설정된 pfmConfig.nodeNo.{host name} 값)
EXEC_PARALLEL_YN
동시 실행가능 여부이다. (현재 사용하지 않는다.)
ARGS_CTNT
기본값 입력 arguments를 나타낸다. 배치를 실행할 때 별도로 argument를 입력하지 않으면, 여기에 설정된 값이 사용된다.
SCHDL_SEC
상주 형태만 스케줄한다. 현재 사용하지 않는다. (단위: 초)
상주 형태만 스케줄한다. stop flag on 상태에서 입력된 초만큼 tpusleep으로 예를 들어 5.5가 입력될 경우 tpusleep(5500000)을 수행한다. (단위: 초)
상주 형태만 스케줄한다. 현재 사용하지 않는다.
(단위: 초)
CALLEE_NAME
호출 업무 모듈명이다.
IN_STRUCT_NAME
Input struct 이름이다. "dummy"인 경우 전문 변환하지 않는다.
IN_MAP_NAME
Input 변환할 때 사용할 맵 이름이다.
OUT_STRUCT_NAME
Output struct 이름이다. "dummy"인 경우 전문 변환하지 않는다.
OUT_MAP_NAME
Output 변환할 때 사용할 맵 이름이다.
AP_LOG_PROCESS
업무 로그 구분이다. 현재 사용하지 않는다.
ERROR_LOG_PROCESS
에러 로그 구분이다. 현재 사용하지 않는다.
LOG_DIR
로그 디렉터리 설정이다.
LOG_FILE
로그 파일명이다. 일반 배치에 한하여 [stdout]를 허용한다.
로그 파일명이다. 파일명 설정 가능하다.
LOG_TYPE
로그 레벨이다. (기본값: EWITD)
-
E : 에러 로그
-
W : Warning
-
I : Info 로그
-
T : Trace 로그
-
D : Debug 로그
-
H : Hex 로그
TRACE_LOG_LEVEL
Trace 로그 레벨이다.
-
AL : 전체 trace
-
DB : DB 정보 trace
-
TP : TP 정보 trace
-
DL : Dlcall 정보 trace
-
TC : Try 정보 trace
-
TS : sys Try 정보 trace
-
IO : IO 정보 trace
-
CB : CommBuffer 정보 trace
-
SV : Svc 정보 trace
-
OF : 전체 Off (기본값)
DEBUG_LOG_LEVEL
Debug 로그 레벨이다.
-
A L: all
-
SV : Svc 정보 debug
-
FR : Flow 모듈 정보 debug
-
MO : 서비스 모듈의 전체 on
-
MF : 서비스 모듈의 전체 off
-
OF : debug 정보 전체 off (기본값)
JOB_INFO_FLAG
JOB INFO 수행 여부를 결정한다.
-
0 : 수행
-
1 : 수행하지 않음
TRACE_LEVEL
SysMaster trace 로그 레벨이다. 현재 사용하지 않는다.
THRESHOLD
SysMaster 임계값이다. 현재 사용하지 않는다.
SQL_TRACE_LEVEL
SysMaster DB 모니터링 레벨이다. 현재 사용하지 않는다.
-
-
PFM_BATCH_EXT 테이블
key 항목인 “BAT_CODE”을 제외하고 커스터마이즈 가능하다. PFM_BATCH_EXT 테이블은 사이트에서 커스터마이즈하는 영역이므로 별도로 설명하지 않는다.
4. pfmTCache 관리
pfmTCache는 ProFrame의 운영 중에 DB에서 가져오는 정보를 Shared Memory에 캐싱하여 ProFrame의 성능을 보장해 주는 유틸리티이다.
pfmTCache는 환경설정 파일을 이용하여 pfmTCache가 관리할 메모리 항목 등에 대한 정보를 변경할 수 있으며 pfmtcacheadmin를 이용하여 pfmTCache가 관리하는 Shared Memory를 생성, 삭제 등에 대한 동작을 수행할 수 있다.
4.1. pfmTCache 설정
pfmTCache를 사용하기 위해서는 환경변수와 환경설정 파일을 등록해야 한다. 환경변수는 $PFMTPL/env/profile.proframe에 등록되어 있다.
pfmtcache.cfg는 아래와 같이 환경변수 “PFMCONFIG” 폴더 하위에 위치한다.
export TCACHECONF=$PFMCONFIG/pfmtcache.cfg
pfmtcache.cfg 파일 내용은 다음과 같다("#"으로 시작하는 줄은 comment line이고, 나머지는 환경설정 부분이다).
# the configuration file of TCACHE
SHMKEY=0x70005 # the key of Shared Memory
IPCPERM=0777 # permission of the Shared Memory
SIZE_LOCAL=0 # L1 cache size in kilo-bytes
LIB_PTHREAD=libpthread.so # the pthread library file name
INVALIDATE_TYPE=0 # Invalidate type 0:multi-node 1:multi-domain
AGENT_SVC=SPFMAGENT # multi-node sync. svc
#INVALIDATE_TYPE=1일 때의 설정
#AGENT_SVC=SPFMAGENT|3 # multi-domain sync. svc
#SPFMAGENT|3 = SPFMAGENT01, SPFMAGENT02, SPFMAGENT03
# cache for PFM_SVC
CACHE_NAME=PFM_SVC
SIZE_MEM=65536 # the total cache memory size in kilo-bytes
SIZE_HASH=1024 # the number of hash key (MAX=65536)
SIZE_KEY=30 # the number of digits of the index column
SIZE_REC=2048 # the size of a single record in bytes
INV_TIMEOUT=10 # invalidation timeout in sec
# cache for PFM_SVC_EXT
CACHE_NAME=PFM_SVC_EXT
SIZE_MEM=65536 # the total cache memory size in kilo-bytes
SIZE_HASH=1024 # the number of hash key (MAX=65536)
SIZE_KEY=30 # the number of digits of the index column
SIZE_REC=2048 # the size of a single record in bytes
INV_TIMEOUT=10 # invalidation timeout in sec
# cache for PFM_SVC
CACHE_NAME=PFM_SM
SIZE_MEM=65536 # the total cache memory size in kilo-bytes
SIZE_HASH=1024 # the number of hash key (MAX=65536)
SIZE_KEY=33 # the number of digits of the index column
SIZE_REC=2048 # the size of a single record in bytes
INV_TIMEOUT=10 # invalidation timeout in sec
# cache for PFM_SVC_EXT
CACHE_NAME=PFM_SM_EXT
SIZE_MEM=65536 # the total cache memory size in kilo-bytes
SIZE_HASH=1024 # the number of hash key (MAX=65536)
SIZE_KEY=33 # the number of digits of the index column
SIZE_REC=2048 # the size of a single record in bytes
INV_TIMEOUT=10 # invalidation timeout in sec
# cache for PFM_MSG
CACHE_NAME=PFM_MSG
SIZE_MEM=65536 # the total cache memory size in kilo-bytes
SIZE_HASH=1024 # the number of hash key (MAX=65536)
SIZE_KEY=66 # the number of digits of the index column
SIZE_REC=2048 # the size of a single record in bytes
INV_TIMEOUT=10 # invalidation timeout in sec
# cache for PFM_CONFIG
CACHE_NAME=PFM_CONFIG
SIZE_MEM=65536 # the total cache memory size in kilo-bytes
SIZE_HASH=1024 # the number of hash key (MAX=65536)
SIZE_KEY=128 # the number of digits of the index column
SIZE_REC=2048 # the size of a single record in bytes
INV_TIMEOUT=10 # invalidation timeout in sec
다음은 각 설정항목에 대한 설명이다.
-
TCache 공통 영역
항목 설명 SHMKEY
캐시를 할 Shared Memory 위치를 지정한다.
IPCPERM
Shared Memory의 접근권한을 설정한다.
INV-TIMEOUT
TCache invalidate할 때 타임아웃을 설정한다. (단위: 초)
FORCE_LOCAL
TCache 환경에 대한 기타 설정사항이다.
LIB_PTHREAD
Pthread 라이브러리 파일명이다.
-
#TCache 개별 영역
설명 설명 CACHE_NAME
TCache 호출할 때 사용할 대표 캐시 이름이다.
SIZE_MEM
TCache가 사용할 총 메모리의 용량을 기록한다. (단위: KB)
SIZE_HASH
TCache의 hash 테이블의 총 개수이다. (최대: 65536)
SIZE_KEY
TCache의 hash 키의 자릿수를 지정한다.
SIZE_REC
TCache의 hash 테이블에서 1개 슬롯의 최대 크기이다. (단위: Byte)
4.2. pfmTCache 관리 유틸리티(pfmtcacheadmin)
다음과 같은 명령어를 통해 pfmTCache를 관리할 수 있다.
-
pfmTCache 생성
pfmTCache를 생성한다. 단, TCache가 이미 Shared Memory에 올려져 있다면 아무 작업도 수행하지 않는다.
$> pfmtcacheadmin –c -
pfmTCache 삭제
pfmTCache를 삭제한다. 단, pfmTCache를 삭제할 때 처음 TCache를 실행했던 사용자만 삭제 명령을 실행할 수 있다.
$> pfmtcacheadmin -d -
pfmTCache 재생성
pfmTCache를 삭제(pfmtcacheadmin –d) 후 다시 생성(pfmtcacheadmin –c)한다.
$> pfmtcacheadmin –r -
pfmTCache 일시 중지
pfmTCache에 저장된 캐시 데이터는 보존하면서 일시적으로 pfmTCache API를 사용할 수 없도록 한다.
$> pfmtcacheadmin -t다시 사용할 수 있도록 변경하려면 위 명령어를 다시 한번 실행한다.
-
pfmTCache 부분 항목 초기화
cacheName에 해당하는 pfmTCache의 데이터를 모두 초기화한다.
$> pfmtcacheadmin -i [cacheName]cacheName은 pfmtcache.cfg의 "CACHE_NAME"에 정의된 이름이다. 여러 개의 캐시가 있는 경우 특정한 하나의 캐시 영역을 초기화할 때 사용한다.
-
pfmTCache 상태 정보 조회
pfmTCache의 동작에 대한 리포트를 한다. 메모리 사용현황 및 pfmTCache 동작 상태 그리고 cache hit 및 miss에 대한 횟수 정보를 보여준다.
$> pfmtcacheadmin -s
5. tdlcall 관리
tdlcall은 ProFrame를 이용하여 만들어진 라이브러리들을 온라인 및 배치 프로그램 수행 중 동적으로 변경 가능하도록 제공되는 바이너리이다.
tdlcall은 Shared Memory를 관리하기 위한 관리 바이너리와 프로그램을 수행할 때에 접근하기 위한 공유 라이브러리로 구성된다.
|
본 절에서는 tdlcall을 수행하는 경우 접근하기 위한 API 사용법에 대해서는 설명하지 않고, tdlcall을 관리하기 위한 방법에 대해서만 설명한다. tdlcall을 이용한 모듈 호출 방법은 ProFrame C 온라인 프로그래밍 안내서를 참고한다. |
5.1. tdlcall 설정
tdlcall을 사용하기 위해서는 환경변수와 환경설정 파일을 등록해야 한다. 환경변수는 $PFMTPL/env/profile.tmax에 등록되어 있다.
tdl.cfg는 아래와 같이 환경변수 TDLDIR 폴더 하위에 위치한다.
export TDLDIR=$TMAXDIR/tdlcall
|
Tmax 5.0 이후 버전은 tdlcall이 Tmax에 포함되어 있으며, TDLDIR/config 디렉터리에 있는 tdl.cfg 파일을 읽는다. 자세한 설명은 "Tmax Programming Guide(Dynamic Library)"를 참조한다. |
tdl.cfg 파일 내용은 다음과 같다("#"으로 시작하는 줄은 comment line이고, 나머지는 환경설정 부분이다).
# shared memory version (1|1D|2|2D|3)
VERSION=3
# shared memory key
SHMKEY={shared memory 주소, 0x90000}
# shared memory and file creation permission
IPCPERM=0777
# number of dynamic loadable modules, rouded up to powers of 2
MAXMODULES={호출할 함수의 최대 개수 정의. 204800}
# shared memory backup
BACKUP=tdl.shm
# path of a command file for searching export functions
#COMMAND=tdlcmd
# path of a log directory
#LOGDIR=log
tdl.cfg의 자세한 설명은 다음과 같다.
| 항목 | 설명 |
|---|---|
VERSION |
tdlcall Shared Memory 버전이다. 버전 2 이상이거나 2D인 경우에는 하나의 라이브러리에 여러 개의 함수를 둘 수 있다. |
SHMKEY |
tdlcall을 운영할 때 사용하는 Shared Memory의 유일한 키이다. |
IPCPERM |
동적 모듈의 runtime copy($TDLDIR/run/*)와 Shared Memory의 권한이다. |
MAXMODULES |
$TDLDIR/mod에 놓일 동적 모듈의 최대 개수이다. 2^n으로 올림되어 사용한다. |
COMMAND |
라이브러리에서 export 함수를 자동 추출하기 위한 명령설정 파일명이다. 전체 경로명을 지정하거나 파일명($TDLDIR/bin/에서 찾음)만 지정할 수 있다. |
BACKUP |
tdlinit과 tdlupdate할 때 자동으로 TDL Shared Memory가 지정한 파일로 백업된다. |
LOGDIR |
유틸리티 에러 및 정보 메시지 로깅 디렉터리 경로를 지정한다. $TDLLOGDIR보다 우선적으로 적용된다. |
5.2. tdlcall 관리
다음과 같은 명령어를 통해 tdlcall을 관리할 수 있다.
|
tdlcall에 대한 자세한 내용은 “Tmax Programming Guide (Dynamic Library)"를 참고한다. |
tdlinit
tdlcall 사용환경을 초기화하는 도구이다.
$TDLDIR/tdl.cfg 파일과 $TDLDIR/mod 하위에 위치한 동적 모듈들을 읽어 들여 Shared Memory를 초기화하고, $TDLDIR/run 디렉터리를 운영 중에 사용할 수 있도록 초기화한다.
-
사용법
$> tdlinit [-p tdldir] [-f] [-b | -B backupfile [-i]]옵션 설명 [-p tdldir]
$TDLDIR을 환경변수로부터 읽어 들이지 않고, 인수로 주는 경우 사용한다.
[-f]
강제 초기화 옵션으로 tdlinit는 Shared Memory를 검사하여 tdlcall이 사용 중이면, 초기화 작업을 수행하지 않고 종료하는데, -f 옵션을 사용하면 사용 유무와 관계없이 초기화 작업을 수행한다.
[-b]
tdlinit할 때 -b 옵션을 주면 백업 파일에서 Shared Memory를 로드하여 빠른 초기화(fast-tdlinit)를 제공한다. 단, 백업 파라미터가 지정되어 있어야 하며, 백업 파일도 존재해야 한다.
[-B backupfile]
tdlinit할 때 백업 파일에서 Shared Memory를 로드하여 빠른 초기화(fast-tdlinit)를 제공한다. 백업 파라미터가 지정되어 있지 않아도 된다.
[-i]
백업 파일에서 Shared Memory를 로드한 후 $TDLDIR/run 디렉터리에 해당 라이브러리가 존재하는지 점검한다. (-b, -B 옵션과 함께 사용)
ProFrame에서는 tdlinit을 편리하게 사용하기 위하여 tdlinit.sh을 제공한다.
$> tdlinit.sh
tdlinit.sh은 $TDLDIR/mod 하위에 있는 라이브러리에 대하여 존재 여부를 조사하여, 존재하지 않는 라이브러리를 제거한 후에 tdlinit을 수행한다.
tdlupdate
라이브러리를 tdlcall 관리자에게 등록한다.
tdlupdate는 $TDLDIR/mod 하위에 있는 라이브러리를 tdlcall 메모리 관리자에게 등록함과 동시에 $TDLDIR/run 디렉터리로 라이브러리를 복사한다.
-
사용법
$> tdlupdate –m {라이브러리 이름_확장자 제외}
ProFrame에서는 tdlupdate를 편리하게 사용하기 위하여 pfmdlupdate를 제공한다. pfmdlupdate는 입력된 라이브러리를 지정된 경로에 복사한 후 $TDLDIR/mod에 링크를 생성하고 tdlupdate를 수행한다.
-
사용법
$> pfmdlupdate {라이브러리 이름}
tdlclean
tdlcall가 관리하고 있는 라이브러리 중에 더 이상 사용하지 않는 라이브러리를 제거한다.
tdlclean은 모듈 업데이트 후 $TDLDIR/run 디렉터리에 남는 불필요한 파일들을 정리해주는 도구이다. Shared Memory를 참조하여 현재 사용되고 있지 않는 파일들을 지운다.
-
사용법
$> tdlclean [-p tdldir] [-m library_name | -M module_name [-b]] [-d yyyymmddhhmi] [-D "num hour|day"] [-n num]옵션 설명 [-p tdldir]
$TDLDIR을 환경변수로부터 읽어 들이지 않고, 인수로 주는 경우 사용한다.
[-m library_name]
Shared Memory에서 지정한 라이브러리 삭제 및 run 디렉터리의 관련 파일을 삭제한다.
[-M module_name]
Shared Memory에서 해당 함수만 삭제하고, run 디렉터리의 관련 파일은 삭제하지 않는다. (단, version=1|1D일 경우는 -m 옵션과 동일한 기능 수행)
[-b]
백업 파라미터가 지정되어 있으면 tdlclean는 자동으로 백업 파일을 유지한다. 만일 백업을 하고 싶지 않다면 -b 옵션을 지정한다. (-m, -M 옵션과 함께 사용)
[-d yyyymmddhhmi]
yyyymmddhhmi로 지정한 시간 이전의 이전 버전 라이브러리는 삭제한다.
[-D "num hour|day"]
num 시간|일 이전의 이전 버전 라이브러리를 삭제한다.
[-n num]
num개의 라이브러리만 남기고 나머지 이전 버전 라이브러리를 삭제한다.
(n >= 1)
tdlseqno
tdlcall 관리 하에 있는 함수들의 sequence 번호를 조회한다.
-
사용법
$> tdlseqno [-p tdldir] -m module_name | -M library_name옵션 설명 [-p tdldir]
$TDLDIR을 환경변수로부터 읽어 들이지 않고, 인수로 주는 경우 사용한다.
-m module_name
정보를 보고 싶은 모듈의 이름이다.
-M library_name
정보를 보고 싶은 라이브러리의 이름으로, 공유 모듈 확장자인 .so을 뺀 이름이다.
tdlrm
tdlcall을 관리하는 Shared Memory를 삭제한다.
-
사용법
$> tdlrm [-p tdldir]옵션 설명 [-p tdldir]
$TDLDIR을 환경변수로부터 읽어 들이지 않고, 인수로 주는 경우 사용한다.
tdlnm
라이브러리에서 추출된 함수 목록을 조회한다.
-
사용법
$> tdlnm [-p tdldir] -m library_name옵션 설명 [-p tdldir]
$TDLDIR을 환경변수로부터 읽어 들이지 않고, 인수로 주는 경우 사용한다.
-m library_name
Update된 모듈의 이름으로 공유 모듈 확장자인 .sl을 뺀 이름이다.
tdlsync
TDL Shared Memory를 백업한다. 백업 파라미터가 지정된 파일로 백업된다. 만일 다른 파일로 백업하고 싶으면 -B 옵션을 사용한다.
-
사용법
$> tdlsync [-p tdldir] [-B backupfile]옵션 설명 [-p tdldir]
$TDLDIR을 환경변수로부터 읽어 들이지 않고, 인수로 주는 경우 사용한다.
[-B backupfile]
백업할 파일을 지정한다.