영향도 분석 환경설정
1. 기본 설정
데이터 소스 설정
설정 파일 위치: <<$BXM_HOME>>/admin/bin/config/datasource.properties
-- Oracle
driver-classname=oracle.jdbc.OracleDriver
uri=jdbc:oracle:thin:@<<DBUrl>>:<<DBPort>>:<<SID>>
username=<<DBUserName>>
password=<<DBPassword>>
-- MySql
driver-classname=com.mysql.jdbc.Driver
uri=jdbc:mysql://<<DBurl>>:<<DBPort>>/<<database>>
username=<<dbUserName>>
password=<<dbPassword>>
BXM Web Admin이 사용하는 데이터 소스를 설정한다.
실행 쉘 설정
실행 파일 위치: <<$BXM_HOME>>/admin/bin/dniAnalyzer.sh
#!/usr/bin/ksh
# set classpath
BXM_HOME={bxmHomeDir} (1)
CLASSPATH=$BXM_HOME/admin/bin/config
APP_HOME={bxmAppOnlineHome} (2)
JAVA_BIN=$JAVA_HOME/bin/java
for f in `find $BXM_HOME/admin/bxmAdmin/WEB-INF/lib -type f -name "*.jar"`
do
CLASSPATH=$CLASSPATH:$f
done
for f in `find $BXM_HOME/lib/bxm -type f -name "*.jar"`
do
CLASSPATH=$CLASSPATH:$f
done
for f in `find $BXM_HOME/lib/deps -type f -name "*.jar"`
do
CLASSPATH=$CLASSPATH:$f
done
OPT="-Xms512m -Xmx1024m -classpath $CLASSPATH "
# execute
for appName in $APP_HOME/*
do
FILE_NAME=$(basename $appName)
$JAVA_BIN $OPT bxm.app.analyze.AppAnalyzeApplication $appName false 2>&1 > $FILE_NAME.log &
done
#$JAVA_BIN $OPT bxm.app.analyze.AppAnalyzeApplication $APP_HOME false AnalyzeResources
sleep 300
V_GREP=$(ps aux | grep AppAnalyzeApplication | grep -v grep)
FLAG=$(expr length "$V_GREP")
#waiting analyze
while ["$FLAG" != "0"]
do
sleep 300
V_GREP=$(ps aux | grep AppAnalyzeApplication | grep -v grep)
FLAG=$(expr length "$V_GREP")
done
#start AfterAnalyze
$JAVA_BIN $OPT bxm.app.analyze.AppAnalyzeApplication $appName false AfterAnalyze 2>&1 > AfterAnalyze.log &
1 | BXM_HOME={bxmHomeDir}
BXM이 설치된 디렉토리를 입력한다. |
||
2 | APP_HOME={bxmAppOnlineHome}
BXM의 온라인 Home 디렉토리를 입력한다. 분석 대상이 복수일 경우에는 CSV로 입력한다.
|
BXM Config 설정
BXM Web Admin의 "Admin 설정"에서 다음 값들을 확인하고 필요시 수정한다.
키 | 샘플(기본) 값 | 설명 |
---|---|---|
bxm.admin.dni.include.callee |
bxm.web.admin.online.* |
Caller, |
bxm.admin.dni.exclude.callee |
Na |
Caller, Callee 관계를 분석할때 제외할 |
bxm.admin.dni.service. executor.name |
DefaultServiceExecutor |
service |
bxm.admin.dni.service. executor.info.class |
bxm.app.analyze.meta.visiter. DftServiceExecutorMethod |
service executor가 custom되어 가지고 있는 meta정보가 |
bxm.admin.dni.dynamic. query.dft.rule |
bxm.app.analyze.meta.query. |
*.dbio 파일에서 SQL 파싱할 때, Dynamic SQL에서 |
2. 옵션 설정
bxm.admin.dni.dynamic.query.dft.rule설정
* SQL Parser를 위해 태그를 없애는 옵션이며, 태그를 없앤 후 올바른 SQL이 아니면 SQL 분석 에러가 날 수 있음을 숙지한다. (SQL 분석이 정상종료되지 않은 경우, 해당 SQL ID의 테이블 명은 #ERROR로 저장된다.)
-
설정 방법
key=value 형태로 입력한다. key는 admin.dni.dynamic.query.dft.rule이고, value는 Dynamic SQL의 태그를 걸러내는 Rule Class의 Full Qualified Name을 입력한다. 2개 이상일 경우 CSV(,)로 구분한다.
-
기본 클래스 설명
-
DftRemoveTag
if, choose, when, otherwise 태그에 해당된다. 아래와 같이 태그만 제거해서 SQL Parsing이 정상동작하게 한다.
select emp_no from EMP_TST where 1=1 < if test="empDept != null && empDept != ''" > and emp_dept = #{empDept} </if> ↓ select emp_no from EMP_TST where 1=1 and emp_dept = #{empDept}
-
DftRemoveTagRange
selectKey, bind 태그에 해당된다. 아래와 같이 태그로 묶인 범위를 제거해서 SQL Parsing이 정삭동작하게 한다.
<selectKey keyProperty="id" resultType="int" order="BEFORE"> select SEQ_ID.nexyval FROM DUAL </selectKey> insert into Students (id, name , email) values (#{id}, #{name}, #{email}) ↓ insert into Students (id, name , email) values (#{id}, #{name}, #{email})
-
DftReplaceTag
where, set 태그에 해당된다. where 태그는 WHERE 1=1로, set 태그는 SET으로 치환해 SQL Parsing이 정상동작하게 한다.
select emp_nm from emp_tst <where> <if> and emp_no = #{empNo}</if> </where> ↓ select emp_nm from emp_tst WHERE 1=1 <if> and emp_no = #{empNo}</if>
-
DftReplaceTagRange
foreach 태그에 해당된다. foreach로 묶인 범위를 NULL로 치환해 SQL Parsing이 정상동작하게 한다.
SELECT emp_nm FROM emp_tst WHERE emp_dept in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> ↓ SELECT * FROM emp_tst WHERE emp_dept in NULL
-
커스터마이징 영역
"bxm.admin.dni.dynamic.query.dft.rule설정"에서 설정하는 Dynamic SQL Rule 클래스를 커스터마이징할 수 있다.
-
BXM Web Admin 커스터마이징 소스를 연다. Install set 기준으로 CustomizingSource/WebAdmin/bxm.web.admin 프로젝트이다.
-
bxm/web/admin/dni/analyze/sql/dft 하위에 Default Dynamic Parsing Rule 클래스가 존재하며, 동일한 레벨에 있는 custom 패키지에 IParsingRuleIntrfc 인터페이스를 implement하는 클래스를 만든다.
public class CustomRemoveTag implements IParsingRuleIntrfc { @Override public String applyParsingRule(String sql) throws Exception { // TODO Auto-generated method stub return null; } }
-
메소드를 override해서 작성한다.
-
소스 배포와 bxm-instance-management.xml에 옵션 값을 변경해준 후 Web Admin의 WAS를 재기동한다.
HTTPS 사용 환경에서 영향도 분석 설정
영향도 분석의 dniAnalyzer.sh 쉘에서 BXM Web Admin으로 분석 요청을
보내는데, 환경이 HTTPS일 경우 영향을 받는다. HTTPS 환경에서 정상 작동을
위해 SSL 관련 설정이 필요하다.아래는 HTTPS 환경에서 영향도 분석을 실행할 때 필요한 설정을 추가한
dniAnalyzer.sh 이다.#!/usr/bin/ksh # set classpath BXM_HOME={bxmHomeDir} CLASSPATH=$BXM_HOME/admin/bin/config APP_HOME={bxmAppOnlineHome} JAVA_BIN=$JAVA_HOME/bin/java for f in `find $BXM_HOME/admin/bxmAdmin/WEB-INF/lib -type f -name "*.jar"` do CLASSPATH=$CLASSPATH:$f done for f in `find $BXM_HOME/lib/bxm -type f -name "*.jar"` do CLASSPATH=$CLASSPATH:$f done for f in `find $BXM_HOME/lib/deps -type f -name "*.jar"` do CLASSPATH=$CLASSPATH:$f done SSL_PATH=<<keystore>> #인증키 위치 (1) SSL_PASS=password #password (2) SSL_CTXT=SSLv3 #SSL version (3) # execute option JAVA_BIN=$JAVA_HOME/bin/java OPT="-Xms512m -Xmx1024m -Dbxm.cacert.path=$SSL_PATH -Dbxm.cacert.pass=$SSL_PASS -Dbxm.ssl.context=$SSL_CTXT -Djavax.net.debug=ssl -classpath $CLASSPATH " (4) # execute for appName in $APP_HOME/* do FILE_NAME=$(basename $appName) $JAVA_BIN $OPT bxm.app.analyze.AppAnalyzeApplication $appName false 2>&1 > $FILE_NAME.log & done #$JAVA_BIN $OPT bxm.app.analyze.AppAnalyzeApplication $APP_HOME false AnalyzeResources sleep 300 V_GREP=$(ps aux | grep AppAnalyzeApplication | grep -v grep) FLAG=$(expr length "$V_GREP") #waiting analyze while ["$FLAG" != "0"] do sleep 300 V_GREP=$(ps aux | grep AppAnalyzeApplication | grep -v grep) FLAG=$(expr length "$V_GREP") done #start AfterAnalyze $JAVA_BIN $OPT bxm.app.analyze.AppAnalyzeApplication $appName false AfterAnalyze 2>&1 > AfterAnalyze.log &
1 SSL_PATH 인증키가 존재하는 위치를 Canonical Path로 입력한다.
2 SSL_PASS 인증서 암호를 입력한다.
3 SSL_CTXT SSL Context를 입력한다. TLSv1.2, SSLv3 과 같은 컨텍스트 값을 입력한다.
4 -Dbxm.cacert.path=$SSL_PATH -Dbxm.cacert.pass=$SSL_PASS -Dbxm.ssl.context=$SSL_CTXT -Djavax.net.debug=ssl java 옵션을 설정해준다. -Djavax.net.debug=ssl 옵션은 SSL 관련 로그를 볼 수 있는 옵션이며, BXM Web Admin의 WAS 환경에 셋팅해주면 Admin Log에서 SSL 관련 로그를 확인할 수 있다.