 |  |
|
난이도 : 중급 Petroula Pantazopoulos, Rational Insight Data Warehouse Developer, IBM
원문 게재일 : 2009 년 9 월 10 일 번역 게재일 : 2009 년 10 월 27 일 Rational Insight와 함께 포함된 ETL(Extract, Transform, and Load) 도구를 사용하여 둘 이상의
IBM® Rational® Team Concert 데이터 소스를 처리하는 방법을 학습합니다. 이 기사에서는 Cognos Data Manager를 사용하여
IBM® Rational® Insight에서 다수의 Rational Team Concert 데이터 소스에 ETL 동작을 실행하는 방법을 설명합니다.
Rational Team Concert용 IBM® Rational® Insight ETL(Extract, Transform, and Load) 프로세스는
특정 Data Manager 카탈로그에서 제공하는 기타 지원 지점 제품 데이터 추출과는 다른데, 이는 이 프로세스가
IBM® Rational® Team Concert™ 데이터 웨어하우스의 데이터베이스에 직접 연결되기 때문이다. ETL에 데이터를
제공할 수 있는 REST 서비스가 없으며 관련된 XML 메타데이터 구성 파일도 없다.
Rational Insight에서 다수의 Rational Team Concert 데이터를 대상으로 ETL 동작을 실행하려면 IBM® Cognos® Data Manager
프로시저 구성요소를 사용하여 시스템 호출을 작성해야 한다. 이 작업을 수행하려면 환경을 다음과 같이 설정해야 한다.
- 카탈로그 데이터베이스에 연결하는 사용자 계정의 암호화된 암호를 얻을 수 있도록 Insight Data Manager 카탈로그에서
IBM Cognos Data Manager 데이터베이스를 등록한다.
- 처리되어야 할 각각의 Rational Team Concert 자원을 대상으로 해당 데이터베이스를 등록한다. 연결 프로파일 이름에는
"Rational Team Concert X(X는 숫자)”와 같은 특정 이름 지정 규칙을 사용한다.
RTCE2E 작업에서 RESOURCEGROUP_ID 변수의 정의를 제거한다.
- 등록된 데이터베이스 별명을 카탈로그 데이터베이스에서 수동으로 내보낸다.
- Rational Team Concert 자원을 대상으로 실행할 수 있는
rundsnode.exe와 같이 사용할 별명 파일을 작성하는 배치 파일을 생성한다.
- 이전 단계에서 작성한 모든 Rational Team Concert 자원을 처리할 수 있는 실행 명령과 배치 파일을 생성한다.
이 절차에서는 엔드 투 엔드 시나리오에서 모든 Rational Team Concert 자원을 처리할 수 있는 별명 파일을 생성하기 위한
자동 프로세스를 설정한다. 하나의 스케쥴된 작업만을 사용하여 모든 Rational Team Concert 저장소에 대하여
RTCE2E 노드를 순차적으로 호출한다. 이 프로세스는 동일한 DBMS에 전개된 모든 Rational Team Concert 자원에 대해서만
동작한다. 즉, 이러한 자원은 DB2나 Oracle 또는 SQL Server에 전개된 모든 자원을 말한다.
IBM Cognos Data Manager 등록
다음과 같이 Insight Data Manager 카탈로그에 IBM Cognos Data Manager를 등록한다.
- Insight Data Manager에서 Library > Connections 를 차례로 선택한다(그림 1 참조).
- Insight Data Manager 카탈로그 데이터베이스의 항목을 작성한다(그림 2 참조).
그림 1. Insight Data Manager 카탈로그 항목
그림 2. Insight Data Manager 카탈로그 데이터베이스 연결 정보
Rational Team Concert 자원 등록
- Data Manager에서 Library > Connections를 차례로 선택한다.
- 처리해야 할 각각의 추가 Rational Team Concert 데이터베이스를 대상으로 "Rational Team Concert X(X는 숫자)"
이름 지정 규칙을 사용하여 연결 항목을 작성한다(그림 3 참조).
그림 3. 다중 Rational Team Concert 데이터베이스 항목
RESOURCEGROUP_ID 변수 정의 제거
RTCE2E 작업 노드의 사전 정의된 RESOURCEGROUP_ID 변수는 다양한 Rational Team Concert 자원의 모든
데이터를 동일한 데이터 소스로 그룹화한다. 둘 이상의 Rational Team Concert 자원을 처리해야 하기 때문에 RTCE2E 노드에서 해당 변수를 제거해야 한다.
Rational Insight 데이터 웨어하우스에서 각 Rational Team Concert 자원의 데이터를 고유하게 식별하려면
먼저 작업 범위 밖에서 RESOURCEGROUP_ID 변수를 정의해야 한다. 즉, 런타임 시에 명령행에서 이 변수를 정의하고
설정한 후 이 변수에 설정할 알맞는 고유 값을 찾는다.
다음 예제에서는 이 변수를 해당 데이터베이스 별명의 값으로 설정한다.
rundsjob 실행 파일을 호출할 경우 명령행에서 변수를 설정하려면 설정할 변수 이름 및 값과 -V 플래그를
같이 사용해야 한다.
카탈로그에서 별명 내보내기
첫 번째 단계에서 등록한 IBM Cognos Data Manager 데이터베이스의 암호화된 암호를 얻을 수 있도록 등록된
데이터베이스 별명을 내보낸다. 이렇게 하면 다음 단계에서 생성되는 배치 파일이 일반 텍스트 암호를 저장하거나
사용하지 않게 된다.
- 별명을 내보내려면 Data Manager에서
catexp 유틸리티를 사용한다.
- 해당 파일을 생성하고 모든 정보를 추출한 후에는 프로파일과 연결 정보가 남지 않도록 해당 파일을 삭제해야
한다. 해당 파일, 서버, 카탈로그 정보 및 카탈로그에 포함된 작업에 대한 액세스 권한이 있는 사용자가 저장소에
대한 Data Manager 작업을 호출할 수도 있다.
IBM® DB2® 데이터베이스의 명령 프롬프트에서 다음과 같은 명령을 실행할 수 있다.
catexp DB2 DSN=DMCAT;UID=<user name>;PWD=<passwd> DMCatAlias.txt A
|
여기서 <user name>는 카탈로그 데이터베이스에 연결하기 위해 사용할 계정이며 <password>는
이 계정의 암호이다. 내보낸 내용은 DMCatAlias.txt 파일에 저장되며 A 플래그는 데이터베이스 별명만을 내보내도록 한다.
DMCatAlias.txt 파일에서 Data Manager 카탈로그와 관련된 항목을 찾아서 암호화된 암호를 확인한다.
// Database Alias specification
// Data Manager - catalog API v8.0
<DEFAULT> 'DMCAT' DB2 'DSN=DMCAT;UID=dweadmin;
PWD=~3EC298FE80F9AD09D22FE05EF394CE4C0B;TRUSTED=FALSE;COGNOSSQL=FALSE'
|
연결 파일의 자동 생성
Insight Data Manager 카탈로그에서는 기본 Rational Team Concert 빌드가 "Rational Team Concert" 프로파일
이름을 사용하여 해당 연결을 처리한다. 각 리소스 카탈로그에서 이 빌드를 복제하지 않고 둘 이상의
Rational Team Concert 자원을 처리하려면 "Rational Team Concert" 연결 정보를 동적으로 변경해야
한다. 이렇게 하려면 다음과 같이 한다.
- 각 Rational Team Concert 자원의 별명 파일을 작성한다. 이 파일에는 Rational Insight 웨어하우스의 연결
항목과 해당 Rational Team Concert 자원이 포함된다.
- 그런 다음 작업을 작성하고 시스템 명령을 실행하는 프로시저 노드를 사용하여 배치 파일을 생성하고 실행한다.
그림 4의 UI에는 작업 레벨에서의 해당 변수와 그 값 그리고 정의된 변수 목록에 대한 예가 표시되어 있다.
그림 4. 작업을 정의하기 위한 Data Manager 변수 목록
- DMCATUSER: Data Manager 카탈로그 데이터베이스에 연결하기 위해 사용할 계정
- DMCATPASSWD: 해당 프로세스에서 이전에 추출한 계정의 암호화된 암호
- DMCATDRIVER: IBM DB2, Oracle 또는 Microsoft® SQL Server®에 연결하기 위해 사용할 RDBMS 드라이버
- SQLSERVINST: Data Manager 카탈로그 데이터베이스에 SQL Server를 사용할 경우 여기에서 SQL Server 인스턴스를 지정한다.
- WINAUTH: Data Manager 카탈로그 데이터베이스에 SQL Server를 사용하는 경우 여기에서 Windows 인증(값을 TRUE로 설정)
또는 SQL Server 인증(값을 FALSE로 설정) 중 어는 것을 사용할지 여부를 지정한다.
- DMCATCONST:
DMCATDRIVER(드라이버) 유형에 따라 Data Manager 카탈로그 데이터베이스에 대한 연결 문자열을 지정한다.
여기서 DB2, Oracle 및 SQL Server 드라이버의 경우를 시험한다. 해당 목록을 추가하거나 지정하여 해당 환경에서
하나의 드라이버만을 지원할 수 있다. 다음은 Microsoft® Windows® 및 Linux®용 정의이다.
Listing 1. Windows용 드라이버 정의
CASE Upper($DMCATDRIVER) OF
BEGIN
'DB2': RETURN 'DB2 DSN={$DMCATDB};UID={$DMCATUSR};PWD={$DMCATPASSWD}';
'ORACLE': RETURN CONCAT('ORACLE ','{$DMCATUSR}','/','{$DMCATPASSWD}','@','{$DMCATDB}');
'OLEDB': CASE $WINAUTH OF
BEGIN
TRUE:RETURN CONCAT('OLEDB "Data Source"=','{$SQLSERVINST}',';
"Integrated Security"=TRUE',';Database=','{$DMCATDB}');
DEFAULT:RETURN CONCAT('OLEDB "Data Source"=','{$SQLSERVINST}',';
"User Id"=','{$DMCATUSR}',';Password=','{$DMCATPASSWD}',';"Integrated Security"=FALSE',
';Database=','{$DMCATDB}');
END
DEFAULT: RETURN 'NOT SUPPORTED RDBMS';
|
참고:
Linux에서는 세미콜론(;)이 문장의 종료 문자이기 때문에 백슬래시(\)를 사용하여 ;을 이스케이프해야 한다.
Listing 2. Linux용 드라이버 정의
CASE Upper($DMCATDRIVER) OF
BEGIN
'DB2': RETURN 'DB2 DSN={$DMCATDB}\;UID={$DMCATUSR}\;PWD={$DMCATPASSWD}';
'ORACLE': RETURN CONCAT('ORACLE ','{$DMCATUSR}','/','{$DMCATPASSWD}','@','{$DMCATDB}');
DEFAULT: RETURN 'NOT SUPPORTED RDBMS';
END
|
작업 노드는 시스템 호출을 포함하고 있는 프로시저 노드이다(그림 5, 6, 7 참조).
그림 5. Windows용 Data Manager 노드
그림 6. Linux용 Data Manager 노드
그림 7. 프로시저 노드의 내용
이미지 확대
Listing 3. Windows의 프로시저 노드 코드
System('mkdir ..\ricon');
System('catexp {$DMCATCONSTR} ..\ricon\ListRTC.txt A');
System('echo @echo off> ..\ricon\rtc.bat');
System('echo pushd ..\ricon >> ..\ricon\rtc.bat');
System('echo SETLOCAL ENABLEDELAYEDEXPANSION >> ..\ricon\rtc.bat');
System('echo set /A TOTRTC=1 >> ..\ricon\rtc.bat');
System(concat('echo for /F "tokens=*" %%g in (',char(39),'findstr /I
/C:"Rational Team Concert"
ListRTC.txt',char(39),') do (>> ..\ricon\rtc.bat'));
System('echo findstr /I /C:"Rational Data Warehouse"
ListRTC.txt ^>RTC!TOTRTC!.txt >> ..\ricon\rtc.bat');
System(Concat('echo FOR /F "tokens=2 delims=',char(39), ' eol=/" %%a in (',char(39),
'echo "%%g"',char(39),') do ( >> ..\ricon\rtc.bat'));
System('echo set GSUB=%%g >> ..\ricon\rtc.bat');
System('echo set GSUB=!GSUB:%%a=Rational Team Concert! >> ..\ricon\rtc.bat');
System('echo echo !GSUB! ^>^> RTC!TOTRTC!.txt>> ..\ricon\rtc.bat');
System('echo SET /A TOTRTC=!TOTRTC!+1>> ..\ricon\rtc.bat');
System('echo )>> ..\ricon\rtc.bat');
System('echo )>> ..\ricon\rtc.bat');
System('echo ENDLOCAL>> ..\ricon\rtc.bat');
System('echo popd >> ..\ricon\rtc.bat');
System('call ..\ricon\rtc.bat');
System('del /F /Q ..\ricon\rtc.bat');
|
Listing 4. Linux의 프로시저 노드 코드
System('mkdir $COG_ROOT/ricon');
System('catexp {$DMCATCONSTR} $COG_ROOT/ricon/ListRTC.txt A');
System('echo "#!/bin/ksh"> $COG_ROOT/ricon/rtc.sh');
System('echo "curDir=\`pwd\`" >> $COG_ROOT/ricon/rtc.sh');
System('echo "cd \$COG_ROOT/ricon" >> $COG_ROOT/ricon/rtc.sh');
System('echo "typeset -i TOTRTC=1" >> $COG_ROOT/ricon/rtc.sh');
System('echo "RIDW=\`cat ListRTC.txt|grep
-e \"Rational Data Warehouse\"\`
">>$COG_ROOT/ricon/rtc.sh');
System('echo "while read line" >>$COG_ROOT/ricon/rtc.sh ');
System('echo "do" >>$COG_ROOT/ricon/rtc.sh ');
System('echo "echo \$line|grep \"Rational Team Concert\">/dev/null"
>>$COG_ROOT/ricon/rtc.sh ');
System('echo "if [ \$? -eq 0 ]" >>$COG_ROOT/ricon/rtc.sh ');
System('echo "then" >>$COG_ROOT/ricon/rtc.sh ');
System('echo "echo \$RIDW>RTC\$TOTRTC.txt" >>$COG_ROOT/ricon/rtc.sh');
System(Concat('echo "echo \$line |sed ',char(39),
's/Rational Team Concert [1-9]/Rational Team Concert/g',char(39),' >>RTC\$TOTRTC.txt"
>>$COG_ROOT/ricon/rtc.sh'));
System('echo "TOTRTC=\$TOTRTC+1" >>$COG_ROOT/ricon/rtc.sh ');
System('echo "fi" >>$COG_ROOT/ricon/rtc.sh ');
System('echo "done <ListRTC.txt" >>$COG_ROOT/ricon/rtc.sh ');
System('echo "cd \$curDir" >>$COG_ROOT/ricon/rtc.sh');
System('chmod +x $COG_ROOT/ricon/rtc.sh');
System('$COG_ROOT/ricon/rtc.sh');
System('rm -f $COG_ROOT/ricon/rtc.sh');
|
이 코드를 실행하면 rtc.bat/rtc.sh라고 하는 배치 파일이나 쉘 스크립트 파일이 생성되어
$COg_ROOT/ricon에 저장된다. 이 코드는 실행되고 나면 바로 삭제된다.
그림 8의 예제에 있는 결과물에는 3개의 텍스트 파일이 표시되어 있는데, 각각 Rational Team Concert용 DB2 데이터베이스 및
DB2 Rational Insight 데이터베이스의 연결 프로파일을 나타낸다.
- Rational Team Concert
- Rational Team Concert 2
- Rational Team Concert 3
그림 8. Windows에서 런타임 시에 생성된 파일
RTC*.txt 파일에는 Listings 5, 6 및 7에서 본 다음 코드가 포함되어 있다.
Listing 5. RTC1.txt(Rational Team Concert 연결 프로파일)
<DEFAULT> 'Rational Data Warehouse' DB2 'DSN=RIDW;UID=db2admin;
PWD=~850926D39C5C57FA0AAEA66B472FB0757B;COGNOSSQL=FALSE'
<DEFAULT> 'Rational Team Concert' DB2 'DSN=JAZZDB;UID=dbjzadmin;
PWD=~BA3E90727065956DB28BB8B2C3E09690CB;TRUSTED=FALSE;COGNOSSQL=FALSE'
|
Listing 6. RTC2.txt(Rational Team Concert 2 연결 프로파일)
<DEFAULT> 'Rational Data Warehouse' DB2 'DSN=RIDW;UID=db2admin;
PWD=~850926D39C5C57FA0AAEA66B472FB0757B;COGNOSSQL=FALSE'
<DEFAULT> 'Rational Team Concert' DB2 'DSN=RTCDB;UID=dbdwjadm;
PWD=~BA3E90727065956DB28BB8B2C3E09690CB;TRUSTED=FALSE;COGNOSSQL=FALSE'
|
Listing 7. RTC3.txt (Rational Team Concert 3 연결 프로파일)
<DEFAULT> 'Rational Data Warehouse' DB2 'DSN=RIDW;UID=db2admin;
PWD=~850926D39C5C57FA0AAEA66B472FB0757B;COGNOSSQL=FALSE'
<DEFAULT> 'Rational Team Concert' DB2 'DSN=RTCDW;UID=dbdwadm;
PWD=~BA3E90727065956DB28BB8B2C3E09690CB;TRUSTED=FALSE;COGNOSSQL=FALSE'
|
Rational Team Concert 연결 프로파일의 실제 데이터베이스 연결 정보가 변경되었다. 이제 이 파일을
사용하여 Rational Team Concert 작업을 시작할 수 있다.
Rational Team Concert 자원의 자동 처리
앞 섹션에서 생성한 각 RTC*.txt 별명 파일을 대상으로 Insight Rational Team Concert Data Manager
작업 RTCE2E를 실행해야 한다. 이 프로세스를 자동화하려면 이전 단계의 프로시저 노드를 사용해야 하며 아래의
명령문을 프로시저 노드에 추가해야 한다. 이 프로세스는 다음을 수행한다.
- 각
RTC*.txt 연결 프로파일로 이동하여 RTCE2E 작업을 호출한다.
- 이 과정이 완료되면 해당 파일은 자동으로 삭제된다.
Listing 8. Windows용
System(concat ('@echo OFF && for %c in (..\ricon\RTC*.txt) do (',char(13),
'for /F "skip=1 tokens=2 delims=^=.*;" %g in (',char(39),
'findstr /C:DSN %c',char(39),') do (',char(13),'rundsjob.exe {$DMCATCONSTR}
"{$JOB_NAME}" -A%c -VRESOURCEGROUP_ID=%g))'));
System(concat ('cmd /V:ON /C "@echo OFF && for %c in (..\ricon\RTC*.txt)
do (',char(13),'for /F "skip=1 tokens=2 delims=@" %g in (',char(39),
'findstr /R .* %c',char(39),') do (',char(13),'set vg=%g && rundsjob.exe
{$DMCATCONSTR} "{$JOB_NAME}" -A%c -VRESOURCEGROUP_ID=!vg:',char(39),'=!))"'));
System(concat ('cmd /V:ON /C "@echo OFF && for %c in (..\ricon\RTC*.txt)
do (',char(13),'for /F "skip=1 tokens=4 delims=',char(39),'; eol=;" %g in
(',char(39),'findstr .* %c',char(39),') do (',char(13),'for /F %a in (',char(39),
'echo %g^|FIND /C "Database"',char(39),') do (set ER=%a) && if "!ER!"
EQU "1" (set vg=%g && rundsjob.exe {$DMCATCONSTR} "{$JOB_NAME}" -A%c
-VRESOURCEGROUP_ID=!vg:~9!)))"'));
System(concat ('cmd /V:ON /C "@echo OFF && for %c in (..\ricon\RTC*.txt) do
(',char(13),'for /F "skip=1 tokens=6 delims=',char(39),';
eol=;" %g in (',char(39),'findstr .* %c',char(39),') do (',char(13),'for /F %a
in (',char(39),'echo %g^|FIND /C
"Database"',char(39),') do (set ER=%a) && if "!ER!" EQU "1" \
(set vg=%g && rundsjob.exe {$DMCATCONSTR}
"{$JOB_NAME}" -A%c -VRESOURCEGROUP_ID=!vg:~9!)))"'));
System('RMDIR /S /Q ..\ricon');
|
Listing 9. Linux용
System('rm -f $COG_ROOT/ricon/rtc.sh');
System(concat('echo "for FILE in \`ls $COG_ROOT/ricon/RTC*.txt\`; do if [ \`sed 1d
\$FILE|grep -c DSN \` -gt 0 ]; then $COG_ROOT/bin/rundsjob {$DMCATCONSTR} \"{$JOB_NAME}\"
-A\$FILE -VRESOURCEGROUP_ID=\`sed -n ',char(39),'/Rational Team \ Concert/p',
char(39),' \$FILE |sed ',char(39),'s/.*DSN=//g',char(39),' |sed \
',char(39),'s/;.*//g',char(39),'\`; fi;
done">$COG_ROOT/ricon/ex_rtc.sh'));
System(concat('echo "for FILE in \`ls $COG_ROOT/ricon/RTC*.txt\`; do if [ \`sed 1d
\$FILE|grep -c @ \` -gt 0 ]; then $COG_ROOT/bin/rundsjob {$DMCATCONSTR} \"{$JOB_NAME}\"
-A\$FILE -VRESOURCEGROUP_ID=\`sed -n ',char(39),'/Rational Team Concert/p', char(39),
' \$FILE |sed
',char(39),'s/\(.*\)@//g',char(39),'|sed s/\',char(39),'//g\`; fi;
done">>$COG_ROOT/ricon/ex_rtc.sh'));System('chmod +x $COG_ROOT/ricon/ex_rtc.sh');
System('$COG_ROOT/ricon/ex_rtc.sh');
System('rm -fR $COG_ROOT/ricon');
|
이 작업은 rundsjob.exe 파일을 실행한 후 RTC*.txt 파일에 지정된 데이터베이스에
연결하여 RTCE2E 작업을 실행한다. 동시에 RESOURCEGROUP_ID 값을 설정한다.
다운로드 하십시오 | 설명 | 이름 | 크기 | 다운로드 방식 |
|---|
| Sample code for listings: 1, 3, 4, 8, and 9.1 | processingmultipleresources_codelistings.txt | 6KB | HTTP |
|---|
Note - 코드 목록 1, 3, 4, 8 및 9의 경우 txt 파일로 제공된 이 코드 샘플을 사용한다.
참고자료 교육
-
IBM Rational Team Concert의 기능 및 이점은 다음을 참고한다.
-
다음 참고자료를 통해 프로젝트와 프로세스 성능을 개선할 수 있게 도움을 주는 성능 측정 및 관리 도구인 Rational Insight에
대해 자세히 학습할 수 있다.
-
IBM Rational Software Delivery Platform에서 아키텍처 관리와 자산 관리, 변경 및 출시 관리, 통합 요구사항 관리,
프로세스 및 포트폴리오 관리, 품질 관리를 위한 전문 소프트웨어와 병렬 개발 및 지리적으로 분산된 팀을 위한 협력 도구에
관해 학습할 수 있다. 또한 IBM Rational Online Documentation Center에서는 제품 매뉴얼, 설치 안내서 및 기타 문서를 확인할 수 있다.
-
developerWorks의 Rational 소프트웨어 영역에서 Rational Software Delivery Platform 제품과 관련된
기술 자료와 베스트 프랙티스를 볼 수 있다.
-
컴퓨터 기반, 웹 기반 및 강사 지도 Rational 온라인 강의를 살펴보자. 초급에서 고급까지의 다양한 강의를 통해 Rational 도구에 대한
지식을 쌓고 기술을 연마하자. 이 카탈로그의 강의는 컴퓨터 기반 교육 또는 웹 기반 교육을 통해 구입할 수 있다. 일부 "시작하기"
강의의 경우 무료로 제공된다.
-
효과적인 소프트웨어 개발에 필요한 개념에 대한 기사를 제공하는
Rational Edge 뉴스레터를 구독하자.
-
1주일 동안의 developerWorks 튜토리얼, 기사, 다운로드, 커뮤니티 활동, 웹 캐스트,
이벤트 등에 대한 소식을 전하는 IBM developerWorks 뉴스레터를 구독하자.
-
기술 서점에서 다양한 기술 주제와 관련된 서적을 살펴보자.
제품 및 기술 얻기
토론
필자소개  | |  | Petroula Pantazopoulos는 Rational Insight 웨어하우스 팀의 개발자이다. 그녀는 이전에 IBM Rational Portfolio Manager를 개발했다. |
기사에 대한 평가
 |
| 이 문서 북마킹 하기
|
|  |