SAP S/4HANA 구현은 전통적인 SAP GUI 트랜잭션을 SAPUI5 애플리케이션으로 대체하는 중앙 사용자 인터페이스로 Fiori 런치패드에 크게 의존합니다. 이러한 애플리케이션은 종종 레거시 RFC(원격 함수 호출) 함수 모듈을 감싸는 OData 서비스를 통해 데이터를 소비합니다. 배포 아키텍처는 여러 계층으로 구성되어 있습니다: 프론트엔드 BSP(Business Server Pages) 애플리케이션, OData를 노출하는 SAP Gateway 계층, 백엔드 ABAP 스택, 그리고 PFCG(프로필 생성기) 권한 프로필.
경관 프로모션(Development → Quality Assurance → Production) 동안, 불일치는 종종 코드 결함이 아니라 구성 변경에서 발생합니다. OData 서비스는 IWBEP 구성 요소에서 메타데이터를 공격적으로 캐싱하는 반면, PFCG 역할은 새로운 Authorization Objects(예: S_START 또는 사용자 정의 Z* 오브젝트)를 전파하기 위해 수동으로 재생성해야 합니다. 이 질문은 테스터가 n-tier 아키텍처를 탐색하고 누락된 타일이 프론트엔드 캐시, 게이트웨이 메타데이터, 전송 순서 또는 권한 버퍼 대기 시간 때문에 발생했는지 체계적으로 분리할 수 있는 능력을 테스트합니다.
중요한 도전 과제는 증상 모호성입니다: 사용자가 Fiori 런치패드에 로그인했을 때 회색으로 표시된 타일이 보이거나, 완전히 누락되거나, 클릭하면 "애플리케이션을 열 수 없습니다. 나중에 다시 시도하십시오."라는 메시지가 나타납니다. 이러한 증상은 다음에서 발생할 수 있습니다:
OData 메타데이터 구식 상태: SAPUI5 애플리케이션은 $metadata를 가져와 엔터티 구조를 이해합니다. 전송 이후 Gateway 캐시(/IWFND/CACHE)가 이전 버전을 보유하고 있다면, 애플리케이션은 백엔드에서 변경된 RFC 필드에 바인딩되지 않을 수 있습니다.
PFCG 역할 전파 지연: Transport Request가 QAS로 Role을 성공적으로 이동했더라도, User Master(USR04) 테이블은 비교가 실행될 때까지 혹은 사용자가 다시 로그인할 때까지 새로운 Profile 버전을 반영하지 않을 수 있습니다. 역할은 Catalog를 나열할 수 있지만 OData 서비스에 대한 특정 S_IWSG(인터넷 통신 프레임워크) 권한이 없을 수 있습니다.
대상 매핑 고아: LPD_CUST(런치패드 사용자 정의) 항목 또는 CATALOG 할당은 Semantic Object(예: ZPurchaseOrder)와 Action(create)을 참조할 수 있지만, 전송이 Group 할당을 놓치거나 manifest.json에서 SAPUI5 구성 요소 ID가 BSP 애플리케이션 이름과 불일치할 경우 타일은 렌더링되지만 아무 곳으로도 이동하지 않습니다.
체계적인 접근 방식이 없으면 테스터는 문제의 원인이 SM59에서 누락된 System Alias이거나 클린되지 않은 SU56 권한 버퍼인지 확인하기 위해 수 시간을 낭비하게 됩니다.
정적 구성에서 동적 런타임으로 작업하는 계층별 제거 프로토콜이 필요합니다:
1단계: 전송 일관성 감사
모든 기능 테스트 전에 SE01 및 SE09를 사용하여 Transport of Copies (TOC) 또는 Workbench Request 내용을 확인하십시오. 동시성 확인: BSP 애플리케이션, ICF 노드(트랜잭션 SICF), OData 서비스(/IWFND/MAINT_SERVICE), Fiori Catalog/Group 할당(/UI2/FLPD_CUST), 및 PFCG 역할은 동일한 전송에 있거나 문서화된 순서가 있어야 합니다. SCMP(View/Table Comparison)를 사용하여 시스템 간의 LPD_T(런치패드 데이터) 테이블을 비교하십시오.
2단계: 메타데이터 캐시 무효화
Gateway 시스템에서 /IWFND/CACHE_CLEANUP을 실행하여 모델 및 메타데이터 캐시를 지웁니다. 브라우저에서 강제 하드 새로 고침(Ctrl+F5)을 수행하고 SAPUI5 부트스트랩 URL에 ?sap-ui-xx-noCache=true를 추가하십시오. Network 탭에서 $metadata 요청을 확인하고, XML 응답이 현재 RFC 서명을 일치하는 올바른 EntitySets를 포함하는지 확인하십시오.
3단계: 권한 버퍼 플러시
트랜잭션 SU56을 사용하여 현재 사용자의 권한 버퍼를 삭제합니다. PFUD(User Master Data Adjustment)를 "비교" 옵션과 함께 실행하여 PFCG 역할의 Profile가 최신인지 확인합니다. 실패한 타일 접근 직후에 SU53을 실행하여 마지막 실패한 권한 검사를 표시합니다. 특히 S_START(일반 시작 권한), S_IWSG, 및 S_SERVICE 객체를 찾아보십시오.
4단계: 대상 매핑 해결 확인
트랜잭션 /UI2/FLIA(Fiori Launchpad Intent Analysis)를 사용하여 Semantic Object와 Action을 입력합니다. 이렇게 하면 어떤 SAPUI5 애플리케이션(Component ID를 통해)이 해결되는지, ICF 경로 및 LPD_CST 항목이 유효한지 확인할 수 있습니다. FLIA가 매핑을 표시하지만 사용자가 이를 볼 수 없다면 문제는 PFCG(누락된 카탈로그 할당)입니다. FLIA가 매핑을 표시하지 않으면 문제는 LPD_CUST 또는 전송에 있습니다.
5단계: RFC 연결 추적
Gateway 오류 로그를 /IWFND/ERROR_LOG를 통해 활성화합니다. SM59 → 연결 테스트를 사용하여 RFC 대상을 추적한 다음, SM50(프로세스 개요)에서 OData 서비스가 백엔드에 도달할 때 RFC 오류가 발생하는지 관찰합니다. SM21(시스템 로그)에서 S_RFC 또는 S_RFCACL 권한 오류를 확인하십시오.
문제 설명
S/4HANA 2022 업그레이드 프로젝트 중 SAP Fiori "구매 요청 관리" 애플리케이션은 Development에서는 완벽하게 작동했지만 Quality Assurance에서는 "SAPUI5 구성 요소 ui.sscim.prereq를 로드할 수 없기 때문에 애플리케이션을 열 수 없습니다."라는 오류와 함께 실패했습니다. Basis 팀은 모든 전송이 성공적으로 가져와진 것에 대한 RC=0(리턴 코드 0)을 확인했습니다. SAPUI5 ABAP 레포지토리(SE80)에서는 ui.sscim.prereq BSP 애플리케이션이 QAS에 존재함을 보여주었습니다. OData 서비스 C_PURCHASEREQ_SRV는 /IWFND/MAINT_SERVICE에서 활성 상태였지만, 타일은 관리자에게는 나타났지만 구매 직원에게는 보이지 않아 권한 문제를 나타내었으며, 관리자는 타일을 클릭했을 때도 로딩 오류를 받았습니다.
해결책 1: 브라우저 캐시 지우기 및 UI5 버전 롤백
초기 가설은 QAS의 SAPUI5 캐시가 손상되었거나 ABAP 레포지토리에서 버전 불일치가 있다는 것이었습니다. 팀은 모든 사용자의 브라우저 캐시를 지우고 수동으로 /UI5/APP_INDEX_CALCULATE를 사용하여 MIME 레포지토리 캐시를 무효화했습니다.
장점: 이는 SAPUI5 리소스 로딩 문제(404s를 Component-preload.js에서 발생할 때) 해결을 위해 빠르고 비침습적인 수정입니다. ABAP 코딩 변경이 필요 없습니다.
단점: 이 문제를 해결하지 않았습니다. 오류가 지속되었고, 더 중요한 것은 타일이 직원에게 보이지 않는 이유를 설명하지 못했습니다. 이는 증상(로딩 오류)을 치료했지만 메타데이터가 로드되지 않는 이유에 대한 진단을 수행하지 않았으며, 잠재적으로 더 깊은 OData 서비스 구성 문제를 숨겼습니다.
해결책 2: 전체 PFCG 역할 재생성 및 사용자 비교
팀은 Fiori Catalog 할당이 PFCG에서 누락된 것으로 의심했습니다. 그들은 조달 역할에 대한 모든 프로필을 재생성하고 모든 사용자가 업데이트된 권한을 수신하도록 하기 위해 "완전 조정" 옵션으로 PFUD를 실행했습니다.
장점: 이는 Authorization Profiles(PROF_NAME이 UST04에서)를 Role 정의와 동기화합니다. 이 조치는 QAS 역할 버전에서 Catalog 그룹 할당이 실제로 누락되어 있었기 때문에 직원에게서 "보이지 않는 타일" 문제를 해결했습니다.
단점: 타일이 보이게 되었지만, 클릭 시 여전히 "구성 요소를 로드할 수 없습니다."라는 오류가 발생했습니다. 이 접근 방식은 권한 레이어(PFCG)에만 집중하고 OData 서비스에서 RFC 매핑 층을 무시했기 때문에 실패했습니다. 타일을 볼 수 있는 관리자는 여전히 타일을 열 수 없었으며, 이는 문제가 권한을 초월했다는 것을 증명했습니다.
해결책 3: 체계적인 Gateway 및 ICF 노드 검증(선택된 접근 방식)
선택된 방법론은 UI5 앱과는 독립적으로 OData 서비스 활성화 상태를 확인하는 것이었습니다. 트랜잭션 /IWFND/GW_CLIENT를 사용하여 C_PURCHASEREQ_SRV?sap-client=100에 대한 GET 요청을 실행했습니다. 요청은 HTTP 200을 반환했지만, XML 페이로드는 메타데이터가 최근 RFC 인터페이스 변경 이전 캐시된 버전에서 온 것임을 보여주었습니다. 이후에 트랜잭션 SICF(서비스 관리)를 확인하면, ICF 노드 /sap/bc/ui5_ui5/sap/ui_sscim_prereq가 DEV에서는 활성 상태지만 QAS에서는 비활성 상태였으며(수입이 침묵 중 객체 잠금 때문에 실패했습니다), 최종적으로 /IWFND/ERROR_LOG를 확인했을 때 애플리케이션이 $metadata를 가져오려고 할 때 System Alias 매핑에서 권한 오류가 발생했음을 보았습니다. 이는 마이그레이션 후 폐기된 구식 SM59 목적지를 가리키고 있었습니다.
선택 이유: 이 접근 방식은 (1) OData 캐시 불일치로 인한 DEV와 QAS 간의 메타데이터 불일치, (2) ICF 노드 비활성화로 인해 SAPUI5 리소스가 HTTP를 통해 제공되지 않음, (3) QAS에서 존재하지 않는 RFC 대상을 가리키는 System Alias 잘못 구성으로 인해 발생하는 세 가지 동시 오류를 구분했습니다. 이 접근 방식은 일반 사용자 메시지보다 특정 오류 코드(ICF 403s 대 OData 404s)를 제공합니다.
결과
/IWFND/CACHE_CLEANUP을 실행하여 OData 메타데이터를 새로운 RFC 서명에 맞도록 새로 고쳤습니다. SICF를 통해 ICF 노드를 활성화하여 **구성 요소를 로드할 수 없습니다.**라는 오류를 해결한 이후 BSP 애플리케이션의 HTML 및 JS 파일에 접근할 수 있게 되었습니다. /IWFND/MAINT_SERVICE → SAP System Aliases에서 System Alias를 수정하여 Gateway가 백엔드에 도달할 수 있도록 했습니다. 이제 조달 직원이 현재 기능하는 타일에 대한 접근 권한을 부여한 PFCG 역할(해결책 2에서 수정됨)을 통해 애플리케이션을 보고 열 수 있었습니다. 체계적인 접근 방식은 코드에 결함이 있다고 가정할 경우 낭비될 수 있는 약 8시간의 ABAP 디버깅 시간을 절약했습니다.
누락된 Fiori 타일이 누락된 대상 매핑(LPD_CUST)으로 인한 것인지 아니면 PFCG의 누락된 카탈로그 할당으로 인한 것인지 어떻게 확실히 결정합니까? 두 경우 모두 타일이 표시되지 않기로 종료됩니다.
답변:
누락된 대상 매핑(LPD_CUST 또는 Fiori CATALOG 디자이너에서 구성됨)은 Semantic Object와 Action 조합에 대해 연관된 SAPUI5 애플리케이션이 없음을 의미하지만, PFCG에서 카탈로그 할당이 존재하는 경우 타일이 여전히 나타날 수 있습니다. 클릭하면 "네비게이션 대상이 발견되지 않았습니다."라는 오류가 발생합니다. 이를 확인하려면 트랜잭션 /UI2/FLIA(Fiori Launchpad Intent Analysis)를 사용하십시오. Semantic Object와 Action을 입력하면, FLIA가 "이 의도에 대한 애플리케이션을 찾을 수 없습니다."를 반환하면 대상 매핑이 누락되었거나 매핑에서 BSP 애플리케이션 이름이 잘못된 것입니다.
반대로, FLIA가 성공적으로 목표 SAPUI5 애플리케이션과 Component ID를 표시하지만 타일이 사용자의 런치패드에서 누락된 경우 문제는 PFCG 관련입니다. 타일이 포함된 Catalog가 사용자의 Role에 PFCG에서 할당되었는지( Menu 탭 확인) 확인하고, 타일이 런치패드 홈 페이지에서 정렬되는 Group(타일을 정리함)도 할당되었는지 확인하십시오. 또한, 사용자의 SU53 추적에서 값이 WEBGUI인 권한 객체 S_START가 포함되어 있는지 확인하십시오. 이는 모든 Fiori 앱을 런칭하는 데 필요하며 종종 SAP GUI 전용 시스템에서 역할 업그레이드 시 누락되는 경우가 많습니다.
Gateway 클라이언트(/IWFND/GW_CLIENT)를 통해 OData 서비스 테스트가 성공했지만 브라우저에서 SAPUI5 애플리케이션 호출 시 403 Forbidden 오류가 발생하는 이유는 무엇입니까?
답변:
Gateway Client(/IWFND/GW_CLIENT)는 SAP GUI 세션 컨텍스트 내에서 실행되며 SAP Logon 인증을 사용하고 HTTP Internet Communication Framework(ICF) 노드 보안 검사를 우회합니다. 그러나 SAPUI5 애플리케이션은 요청을 ICF 노드 구조(/sap/bc/ui5_ui5/... 또는 /sap/opu/odata/...)를 통해 라우팅합니다.
따라서 브라우저에서의 403은 일반적으로 다음을 나타냅니다:
ICF 노드 비활성: 특정 서비스 노드가 대상 클라이언트에서 SICF에서 비활성 상태이며, OData 서비스 자체는 /IWFND/MAINT_SERVICE에서 등록되어 있을 수 있습니다.
S_ICF 권한: 사용자가 해당 특정 HTTP 경로에 접근하기 위해 올바른 ICF 필드 값(서비스 이름, 호스트 등)을 가진 S_ICF 권한 객체를 결여하고 있습니다. 실패 직후에 트랜잭션 SU53을 확인하십시오.
CSRF 토큰 검증: SAPUI5 애플리케이션은 HEAD 요청을 통해 가져온 유효한 CSRF(교차 사이트 요청 변조) 토큰이 필요합니다. 프론트엔드와 백엔드 시스템이 잘못 구성된 경우(예: Fiori Front-end Server 시나리오에서 서로 다른 System IDs), 토큰 검증이 실패하고 403이 발생하는 반면, GW_CLIENT(상태 비유지 및 CSRF 무관)은 성공합니다.
PFCG 역할 업데이트에서 동시 전송 요청이 권한 프로필 변경을 포함하는 경우 경쟁 조건을 테스트하려면 어떻게 해야 합니까?
답변:
여러 Transport Requests가 동시에 PFCG 역할을 포함하여 수입될 때, Profile 생성(PFCG → Generate Profile)은 USR10 또는 USR12에서 테이블 잠금 충돌을 생성할 수 있으며, 이로 인해 일부 사용자가 부분적인 역할 업데이트를 받는 불완전한 권한 버퍼가 생성됩니다. 이를 테스트하려면:
단계적 가져오기 시뮬레이션: QAS 시스템에서 역할 전송을 동시에가 아닌 순차적으로 가져옵니다. Return Codes(대상 RC=0 또는 RC=4 경고)를 문서화합니다. 그런 다음, 시스템을 재설정하고 동시에 가져옵니다. 두 시나리오 간의 User Master 기록(table UST04)을 SE16을 사용하거나 AGR_USERS를 쿼리하여 역할 할당이 다른지 비교합니다.
권한 추적 비교: 동일한 사용자에 대해 동시 가져오기 전후에 ST01(권한 추적)을 사용합니다. Authorization Check 버퍼를 캡처합니다. 순차 가져오기에서 Z_CUSTOM_AUTH_OBJECT에 대해 성공적인 검증이 나타나지만 동시 가져오기에서 실패가 나타나면 Profile 생성에서 경쟁 조건이 발생한 것으로 보이게 됩니다.
PFUD 지연 테스트: 동시 가져기 직후에 SUIM → User → By Complex Selection Criteria를 실행하여 Profile 버전(PROFN이 USR10에서)이 PFCG의 Role 버전과 일치하는지 확인합니다. 일치하지 않을 경우, User Master 조정(PFUD)이 건너뛰거나 침묵 중 실패했을 수 있습니다. 해결책은 서명이 완료되기 전에 RSUSR200(사용자-역할 할당 분석) 검증과 함께 필수 PFUD 실행을 강제하는 것입니다.