SAP 시스템을 운영하거나 개발할 때, 우리 회사에 맞게 개발된 수많은 Z 프로그램이나 Z 함수 모듈들을 파악해야 할 때가 많습니다. 어떤 Z 객체들이 있는지, 각각이 어떤 역할을 하는지 대략적인 설명이라도 빠르게 확인하고 싶을 때 유용하게 사용할 수 있는 SQL 쿼리가 있습니다.
이번 글에서는 SAP HANA 데이터베이스에서 Z로 시작하는 프로그램과 함수 모듈의 목록을 조회하고, SAP 시스템에 등록된 한국어 설명까지 함께 확인하는 SQL 쿼리 작성 방법을 자세히 알아보겠습니다. (S/4HANA 2021 버전 기준)
왜 Z 프로그램/함수 모듈 목록 조회가 필요할까요?
- 시스템 분석: 현재 시스템에 어떤 커스터마이징 개발 객체들이 있는지 파악하여 시스템 구조를 이해하는 데 도움이 됩니다.
- 영향도 분석: 특정 변경이나 업그레이드 작업 시 어떤 Z 객체들이 영향을 받을 수 있는지 미리 파악할 수 있습니다.
- 문서화 및 관리: Z 개발 객체 목록을 확보하여 내부 기술 문서 작성이나 관리에 활용할 수 있습니다.
- 문제 해결: 특정 오류 발생 시 관련 Z 객체를 빠르게 찾고 분석하는 데 시작점이 될 수 있습니다.
SAP Repository 객체는 어디에 저장될까?
SAP 시스템의 프로그램, 함수 모듈과 같은 개발 객체 정보는 주로 특정 데이터베이스 테이블에 저장됩니다.
- TRDIR (Directory of ABAP Programs): ABAP 프로그램의 기본적인 기술적 속성(이름, 유형 등)이 저장됩니다.
- TFDIR (Function Module Directory): 함수 모듈의 기술적 속성(이름 등)이 저장됩니다.
하지만 이 테이블들 자체에는 프로그램이나 함수 모듈의 상세 설명(제목)이 직접 저장되어 있지 않습니다. 설명 텍스트는 언어별로 별도의 테이블에 관리됩니다.
- TRDIRT (Title texts for programs in TRDIR): TRDIR에 있는 프로그램들의 언어별 제목 텍스트가 저장됩니다.
- TFTIT (Function Module Short Text): TFDIR에 있는 함수 모듈들의 언어별 짧은 텍스트(설명)가 저장됩니다.
따라서 프로그램이나 함수 모듈의 이름과 설명을 함께 조회하려면 이 테이블들을 적절히 조인해야 합니다.
Z 프로그램 목록 및 설명 조회 쿼리
TRDIR 테이블에서 프로그램 기본 정보를 가져오고, TRDIRT 테이블에서 한국어 설명을 가져와 조인하는 쿼리입니다. 여기서는 설명 텍스트가 존재하는 프로그램만 조회하도록 조건을 추가했습니다.
SELECT
T1.NAME AS Program_Name, -- 프로그램 기술 이름
T2.TEXT AS Program_Description, -- 프로그램 설명 (제목)
'Program' AS Object_Type -- 객체 유형 구분
FROM
"SAPHANADB".TRDIR AS T1 -- 프로그램 디렉토리 테이블 (별칭 T1)
LEFT JOIN
"SAPHANADB".TRDIRT AS T2 -- 프로그램 제목 텍스트 테이블 (별칭 T2)
ON
T1.NAME = T2.NAME AND T2.SPRSL = '3' -- 프로그램 이름과 언어 키('3')로 조인 (언어 키는 회사 설정 확인 필요)
WHERE
T1.SUBC IN ('1', 'M', 'S') -- 객체 하위 유형: '1'-실행 프로그램, 'M'-모듈 풀, 'S'-서브루틴 풀
AND T1.NAME LIKE 'Z%' -- 'Z'로 시작하는 프로그램 필터링
AND T2.TEXT IS NOT NULL -- 설명 텍스트가 존재하는 경우만 포함
- FROM "SAPHANADB".TRDIR AS T1: SAP HANA DB의 SAPHANADB 스키마에 있는 TRDIR 테이블을 T1이라는 별칭으로 사용합니다. "SAPHANADB"는 예시이며, 실제 사용하시는 SAP 시스템의 스키마 이름으로 반드시 변경해야 합니다. 스키마 이름은 대소문자를 구분하므로 이중 따옴표로 묶는 것이 좋습니다.
- LEFT JOIN "SAPHANADB".TRDIRT AS T2 ON T1.NAME = T2.NAME AND T2.SPRSL = '3': TRDIR 테이블의 프로그램 이름(NAME)과 TRDIRT 테이블의 프로그램 이름(NAME) 및 언어 키(SPRSL)를 사용하여 조인합니다. 언어 키 '3'은 한국어를 나타낸다고 가정했지만, 실제 시스템 설정된 값(TADIR 테이블 등에서 확인 가능)을 사용해야 합니다. LEFT JOIN을 사용하면 TRDIRT에 해당 언어의 설명이 없는 프로그램도 일단 결과 집합에 포함시킨 후, WHERE 절에서 T2.TEXT IS NOT NULL 조건을 통해 설명이 있는 경우만 최종 선택합니다.
- WHERE T1.SUBC IN ('1', 'M', 'S'): TRDIR 테이블의 SUBC 필드는 프로그램의 유형을 나타냅니다. '1'은 실행 프로그램(Report), 'M'은 모듈 풀(Module Pool), 'S'는 서브루틴 풀(Subroutine Pool) 등을 의미하며, 일반적으로 실행 가능한 형태의 프로그램들을 선택합니다.
- AND T1.NAME LIKE 'Z%': 프로그램 이름이 'Z'로 시작하는 모든 프로그램을 대상으로 합니다.
- AND T2.TEXT IS NOT NULL: TRDIRT 테이블에서 가져온 설명 텍스트(T2.TEXT)가 NULL이 아닌 경우, 즉 한국어 설명이 존재하는 경우만 최종 결과에 포함시킵니다.
Z 함수 모듈 목록 및 설명 조회 쿼리
TFDIR 테이블에서 함수 모듈 기본 정보를 가져오고, TFTIT 테이블에서 한국어 설명을 가져와 조인하는 쿼리입니다.
SELECT
T1.FUNCNAME AS Function_Module_Name, -- 함수 모듈 기술 이름
T2.STEXT AS Function_Module_Description, -- 함수 모듈 짧은 설명
'Function Module' AS Object_Type -- 객체 유형 구분
FROM
"SAPHANADB".TFDIR AS T1 -- 함수 모듈 디렉토리 테이블 (별칭 T1)
LEFT JOIN
"SAPHANADB".TFTIT AS T2 -- 함수 모듈 짧은 텍스트 테이블 (별칭 T2)
ON
T1.FUNCNAME = T2.FUNCNAME AND T2.SPRAS = '3' -- 함수 모듈 이름과 언어 키('3')로 조인 (언어 키는 회사 설정 확인 필요)
WHERE
T1.FUNCNAME LIKE 'Z%'; -- 'Z'로 시작하는 함수 모듈 필터링
- FROM "SAPHANADB".TFDIR AS T1: SAPHANADB 스키마에 있는 TFDIR 테이블을 T1이라는 별칭으로 사용합니다.
- LEFT JOIN "SAPHANADB".TFTIT AS T2 ON T1.FUNCNAME = T2.FUNCNAME AND T2.SPRAS = '3': TFDIR 테이블의 함수 모듈 이름(FUNCNAME)과 TFTIT 테이블의 함수 모듈 이름(FUNCNAME) 및 언어 키(SPRAS)를 사용하여 조인합니다. TRDIRT는 SPRSL 필드를 사용하는 반면 TFTIT는 SPRAS 필드를 사용하니 주의하세요. LEFT JOIN을 사용하여 TFTIT에 해당 언어의 설명이 없는 함수 모듈도 결과에 포함시킵니다. 이 경우 Function_Module_Description 컬럼 값은 NULL이 됩니다.
- WHERE T1.FUNCNAME LIKE 'Z%': 함수 모듈 이름이 'Z'로 시작하는 모든 함수 모듈을 대상으로 합니다.
프로그램과 함수 모듈 목록을 하나로 합치기
위 두 쿼리의 결과를 하나의 목록으로 보고 싶다면 UNION ALL을 사용하여 합칠 수 있습니다. 이때 각 쿼리에서 선택하는 컬럼의 개수, 데이터 타입, 순서가 일치해야 합니다. 컬럼 이름은 UNION ALL 후 최종 결과에 표시될 이름으로 통일합니다.
SELECT
T1.NAME AS Object_Name, -- 객체 기술 이름 (프로그램 이름)
T2.TEXT AS Object_Description, -- 객체 설명 (프로그램 설명)
'Program' AS Object_Type -- 객체 유형 구분
FROM
"SAPHANADB".TRDIR AS T1
LEFT JOIN
"SAPHANADB".TRDIRT AS T2
ON
T1.NAME = T2.NAME AND T2.SPRSL = '3' -- '3'는 한국어 언어 키 (각 회사에 맞는 값 사용)
WHERE
T1.SUBC IN ('1', 'M', 'S')
AND T1.NAME LIKE 'Z%'
AND T2.TEXT IS NOT NULL -- 설명이 존재하는 프로그램만 포함
UNION ALL -- 두 쿼리의 결과를 합칩니다.
SELECT
T1.FUNCNAME AS Object_Name, -- 객체 기술 이름 (함수 모듈 이름)
T2.STEXT AS Object_Description, -- 객체 설명 (함수 모듈 설명)
'Function Module' AS Object_Type -- 객체 유형 구분
FROM
"SAPHANADB".TFDIR AS T1
LEFT JOIN
"SAPHANADB".TFTIT AS T2
ON
T1.FUNCNAME = T2.FUNCNAME AND T2.SPRAS = '3' -- '3'는 한국어 언어 키
WHERE
T1.FUNCNAME LIKE 'Z%';
이 합친 쿼리를 실행하면 SAPHANADB 스키마에서 Z로 시작하는 프로그램 (한국어 설명이 있는 경우)과 함수 모듈 (한국어 설명 유무와 상관없이)의 목록을 하나의 결과 집합으로 확인할 수 있습니다.
주의사항: 프로그램/함수 모듈 내 사용 테이블 정보
다시 한번 강조하지만, 위 쿼리들은 프로그램이나 함수 모듈의 소스 코드 내부에서 어떤 테이블을 사용하고 있는지 직접적으로 보여주지는 않습니다. 소스 코드 분석 및 객체 간 종속성 정보는 SAP의 내부 관리 영역이며, 일반적인 SQL 쿼리만으로는 정확하고 완벽하게 파악하기 매우 어렵습니다.
프로그램/함수 모듈이 사용하는 테이블 정보를 확인하려면 다음과 같은 SAP 표준 툴을 사용해야 합니다.
- SE80 (Object Navigator): 해당 객체를 찾아 '사용처 목록 (Where-Used List)' 기능을 실행합니다.
마무리하며
SAP S/4HANA 시스템에서 Z로 시작하는 프로그램 및 함수 모듈의 기본적인 목록과 설명을 SQL 쿼리를 통해 조회하는 방법을 알아보았습니다. 이 쿼리들은 시스템에 어떤 커스텀 객체들이 개발되어 있는지 빠르게 파악하는 데 유용한 시작점이 될 수 있습니다. 실제 사용 시에는 반드시 스키마 이름("SAPHANADB")과 언어 키('3')를 사용하시는 시스템 환경에 맞게 수정하시기 바랍니다.
이 정보가 SAP 시스템 분석 및 관리에 도움이 되기를 바랍니다!