이 글의 목적과 도달점
SAP Fiori Launchpad(FLP)를 처음 접하면 사용자 화면에 표시되는 타일과 그룹이 어디에서 오는지, 어떤 순서로 조립되는지 파악하기가 쉽지 않습니다. 특히 Role Catalog(역할 카탈로그)와 Role Group(역할 그룹)이라는 두 축이 헷갈리기 시작하면, 타일을 추가했는데 사용자 화면에 안 나오거나, 반대로 지우려는 타일이 계속 남는 문제를 만나게 됩니다. 이 글은 두 개념의 구조적 차이를 실제 관리 시나리오와 함께 정리하고, S/4HANA 온프레미스와 SAP BTP Launchpad Service 양쪽에서 어떻게 접근해야 하는지 예제로 확인합니다.
- Role Catalog와 Role Group이 각각 무엇을 담고 어떤 시점에 로드되는지 구분
- PFCG(온프레미스) 및 Site Manager(BTP) 관점에서 타일 할당 흐름 이해
- 사용자 홈페이지에 타일이 노출되기까지의 조립 순서 추적
- 흔히 발생하는 "타일이 안 보임" 이슈의 원인 진단 체크리스트 확보
Fiori Launchpad 권한 구조의 배경
이 글은 초급 난이도로 작성되었지만 몇 가지 기본 개념은 알고 있어야 이해가 매끄럽습니다. FLP가 브라우저에서 실행되는 SAPUI5/Fiori 애플리케이션이라는 점, PFCG 트랜잭션에서 ABAP 권한 역할(Role)을 만들고 사용자에게 배정한다는 점, 그리고 SAP BTP Cockpit에서 서브어카운트와 서비스 인스턴스를 구분한다는 점 정도가 필요합니다. Semantic Object와 Action이라는 인텐트(intent) 개념을 이미 접해봤다면 카탈로그 내부 구조 이해가 훨씬 수월합니다.
실습 환경과 준비물
본문의 화면 흐름과 트랜잭션명은 일반적으로 다음 환경에서 검증한 결과를 기반으로 합니다. 사용자의 시스템 버전에 따라 UI 라벨이 조금씩 다를 수 있으므로 표기가 다를 경우 SAP Help Portal의 해당 릴리스 문서를 함께 확인하는 방식을 권장합니다.
- SAP S/4HANA 2022 FPS02 (온프레미스) 또는 Business Suite on HANA + Fiori Front-end Server 2020
- 트랜잭션: PFCG, /UI2/FLPD_CUST, /UI2/FLPD_CONF, /UI2/FLP
- SAP BTP Launchpad Service (Standard Plan), Cloud Foundry 런타임 서브어카운트
- 브라우저: Chromium 계열 최신, 개발자 도구(F12)로 네트워크/콘솔 확인 가능
- 권한: PFCG 역할 편집 권한(S_USER_AGR), Launchpad Designer 접근(카탈로그 관리자 역할)
BTP Launchpad Service의 경우 Site Manager에서 Content Explorer를 통해 표준 콘텐츠 패키지(예: SAP S/4HANA Cloud content)를 임포트할 수 있어야 하며, 이 작업에는 Launchpad_Admin 역할 컬렉션이 일반적으로 필요합니다.
두 개념의 구조 이해
가장 큰 오해는 "카탈로그와 그룹이 비슷한 것"이라는 인식입니다. 실제로는 완전히 다른 목적을 가진 두 개의 계층입니다. 비유하자면 카탈로그는 창고이고, 그룹은 진열대입니다. 창고(Role Catalog)에는 이 사용자가 실행할 수 있는 모든 앱이 등록되어 있고, 진열대(Role Group)에는 그중 초기 화면에 보여줄 앱만 선별해 배치합니다.
즉 카탈로그는 "권한(Authorization)"과 "앱 검색(App Finder)"의 소스이며, 그룹은 "홈 화면 레이아웃(Layout)"의 소스입니다. PFCG 역할을 사용자에게 할당하면 그 역할이 참조하는 카탈로그의 모든 타일이 App Finder에 자동으로 나타나지만, 홈 화면에는 그룹에 명시적으로 담긴 타일만 등장합니다.
사용자(User)
└─ PFCG Role (Z_ROLE_SD_MANAGER)
├─ Catalog Assignment (X-SAP-UI2-CATALOGPAGE:Z_CAT_SD_ALL)
│ └─ 60개 타일 → App Finder 표시 + 실행 권한
└─ Group Assignment (X-SAP-UI2-PAGE:Z_GRP_SD_HOME)
└─ 8개 타일 → 홈 화면 기본 표시
여기서 중요한 규칙 하나가 있습니다. 그룹에 담을 수 있는 타일은 반드시 같은 사용자에게 카탈로그로도 할당되어 있어야 합니다. 그룹에만 넣고 카탈로그에서 빼면 사용자 화면에서 해당 타일이 "회색 처리(unresolved)"되거나 아예 사라집니다. 이는 FLP가 런타임에 "이 타일을 볼 권한이 있는가"를 카탈로그 기반으로 다시 검증하기 때문입니다.
S/4HANA 2020 이후로는 그룹 대신 Spaces & Pages가 표준으로 권장되고 있으나, 개념적 위치는 그룹과 동일합니다. 카탈로그는 여전히 권한과 앱 인벤토리의 원천이며, Space/Page가 레이아웃 컨테이너 역할을 이어받았다고 이해하면 됩니다.
단계별 실전 예제
1단계 · 기본 카탈로그와 그룹 만들기
가장 단순한 시나리오부터 시작합니다. 영업 관리자(SD Manager)를 위한 카탈로그와 그룹을 만들고, PFCG 역할에 함께 배정하는 흐름입니다. 트랜잭션 /UI2/FLPD_CUST(고객 네임스페이스용 Launchpad Designer)를 실행한 뒤 다음 순서로 진행합니다.
* 1. 카탈로그 생성 (Launchpad Designer)
Catalog ID : ZC_SD_MANAGER_ALL
Title : SD Manager - All Apps
Type : Business Catalog
* 2. 카탈로그에 타일 추가
- Tile: Sales Order List (SO_LIST)
- Target Mapping: SalesOrder-manage
* 3. 그룹 생성
Group ID : ZG_SD_MANAGER_HOME
Title : 영업 관리자 홈
Reference tiles from: ZC_SD_MANAGER_ALL
* 4. PFCG 역할에 두 개 모두 할당
Transaction PFCG → Role Z_ROLE_SD_MGR → Menu 탭
Insert Node → SAP Fiori Launchpad Catalog → ZC_SD_MANAGER_ALL
Insert Node → SAP Fiori Launchpad Group → ZG_SD_MANAGER_HOME
사용자에게 Z_ROLE_SD_MGR를 배정하고 로그오프 후 다시 FLP에 접속하면, 홈 화면에는 그룹에 포함된 타일이, App Finder(연필 아이콘 → All Apps)에는 카탈로그 전체 타일이 노출됩니다.
2단계 · 실무 시나리오와 오류 로깅
실제 프로젝트에서는 "재무팀 사용자가 SD 앱까지 볼 수 있다"는 문제가 자주 발생합니다. 이유는 대개 카탈로그를 과도하게 광범위하게 만들었기 때문입니다. 이때는 카탈로그를 기능 단위로 잘게 쪼개고, 그룹은 페르소나(persona) 단위로 조합합니다.
* 카탈로그 분할 예
ZC_SD_ORDER " 판매 오더 관련
ZC_SD_DELIVERY " 출하 관련
ZC_FI_AR " 매출채권 관련
* 페르소나별 역할 조합
Z_ROLE_SD_CLERK → Catalogs: ZC_SD_ORDER, ZC_SD_DELIVERY
Groups : ZG_SD_CLERK_HOME
Z_ROLE_KAM → Catalogs: ZC_SD_ORDER, ZC_FI_AR
Groups : ZG_KAM_HOME
타일이 예상대로 표시되지 않을 때 원인을 추적하려면 브라우저 개발자 도구와 백엔드 로그를 함께 봐야 합니다. 다음은 자주 활용하는 진단 명령/URL입니다.
// 브라우저 콘솔에서 현재 사용자에게 로드된 카탈로그/그룹 확인
sap.ushell.Container.getServiceAsync("LaunchPage").then(function (svc) {
svc.getGroups().then(function (groups) {
groups.forEach(function (g) {
console.log("Group:", g.title, "| Tiles:", g.tiles.length);
});
});
});
// PageBuilding 서비스에서 원본 응답 확인 (2020 이전 클래식)
// GET /sap/opu/odata/UI2/PAGE_BUILDER_PERS/PageSets('%2FUI2%2FFlp')?$expand=Pages/PageChipInstances
ABAP 백엔드에서는 트랜잭션 /UI2/FLP_LNG_MAINT와 /UI2/CACHE_DEL로 언어별 캐시 문제를 배제하고, ST22에서 /UI2/* 네임스페이스 덤프를 확인합니다. 그룹에 있으나 카탈로그에 없는 타일은 응답 JSON의 isTileIntentSupported: false로 표시되며, 이 값이 진단의 핵심 힌트입니다.
3단계 · 프로덕션 배포와 BTP 확장
운영 환경에서는 세 가지를 반드시 고려합니다. 첫째, 카탈로그/그룹은 Customizing Request가 아니라 Workbench Request로 이동시켜야 이관 오류가 적습니다. 둘째, 언어 종속 텍스트는 반드시 별도 태스크로 분리해 다국어 이관 누락을 방지합니다. 셋째, 대규모 카탈로그(200개 이상 타일)는 초기 로딩 성능에 영향을 주므로 /UI2/CHIP_HIER 캐시 워밍업 잡을 사전 스케줄링합니다.
SAP BTP Launchpad Service에서는 카탈로그/그룹 대신 Content Package → Role → Site 계층이 사용되며, JSON 기반으로 정의됩니다. 아래는 Site Manager에서 export한 역할 정의의 재구성 예입니다.
{
"identifier": "ZR_SD_MANAGER",
"description": "SD Manager Composite Role",
"assignedCatalogs": [
"ZC_SD_ORDER_BTP",
"ZC_SD_DELIVERY_BTP"
],
"assignedGroups": [
{
"id": "ZG_SD_MGR_HOME_BTP",
"title": "SD Manager Home",
"tileReferences": [
{ "catalogId": "ZC_SD_ORDER_BTP", "tileId": "SalesOrder-manage" },
{ "catalogId": "ZC_SD_ORDER_BTP", "tileId": "SalesOrder-analytics" }
]
}
],
"spaces": [ "ZSP_SD_MANAGER" ]
}
이 역할을 XSUAA 역할 컬렉션에 매핑하고 사용자에게 할당하면, 온프레미스와 동일한 "카탈로그=권한, 그룹=레이아웃" 규칙이 클라우드에서도 그대로 적용됩니다. Spaces가 활성화된 사이트에서는 그룹 배열이 페이지(Page) 배열로 대체되지만, 카탈로그 참조는 유지됩니다.
자주 마주치는 함정과 해결법
실무에서 반복적으로 등장하는 이슈를 FAQ 형태로 정리합니다.
Q1. 카탈로그에는 타일이 있는데 홈 화면과 App Finder 모두에서 안 보입니다.
가장 흔한 원인은 Target Mapping(인텐트 매핑) 누락입니다. 타일은 실행할 앱의 Semantic Object + Action을 Target Mapping으로 매핑해야 실제로 실행 가능한 상태가 됩니다. 매핑이 없으면 FLP가 "실행 불가"로 판단해 목록에서 필터링합니다. 또한 /UI2/CACHE_DEL로 사용자 캐시를 초기화한 뒤 재로그인해야 반영됩니다.
Q2. 그룹에 담은 타일이 회색(unresolved) 상태로 나타납니다.
그룹과 같은 카탈로그가 사용자에게 배정되어 있지 않은 상태입니다. PFCG 역할 메뉴에서 카탈로그 노드가 함께 들어있는지 확인하고, 배정된 역할이 사용자에게 유효 기간 내로 할당되어 있는지 SU01에서 점검합니다.
Q3. Spaces & Pages를 켠 뒤 기존 그룹이 갑자기 사라졌습니다.
S/4HANA 2021 이후 Spaces가 기본 활성화되면 그룹은 표시되지 않고 페이지가 표시됩니다. 파라미터 /UI2/FLP_SPACES=X가 켜져 있는 상태이므로, 마이그레이션 기간에는 사용자별 파라미터로 예외를 두거나 그룹→페이지 변환 유틸리티(/UI2/PAGE_MIGRATION 계열 리포트)를 활용해 순차 이행하는 방식을 권장합니다.
Q4. 사용자가 개인화로 삭제한 타일이 재로그인해도 복구되지 않습니다.
개인화 데이터는 그룹의 "기본 상태"와 별도로 저장됩니다. 초기 상태로 되돌리려면 사용자 스스로 홈 화면에서 "타일 초기화(Reset)"를 수행하거나, 관리자가 /UI2/DELETE_PERS 리포트로 개인화 스키마를 제거합니다.
Q5. 카탈로그를 지웠는데도 사용자 화면에 여전히 타일이 남습니다.
클라이언트 사이드 캐시(브라우저)와 서버 사이드 캐시(/UI2/CHIP) 두 곳이 함께 갱신되어야 합니다. 브라우저 새로고침(Ctrl+F5) 후에도 남으면 서버 캐시 갱신 잡을 실행합니다.
온프레미스 vs BTP: 구조 차이 요약
두 환경의 타일 관리 구조를 병렬로 비교하면 다음과 같습니다.
항목 온프레미스 (S/4HANA) BTP Launchpad Service
─────────────────────────────────────────────────────────────────────
권한 소스 PFCG Role + Catalog XSUAA + Content Package Role
타일 카탈로그 /UI2/FLPD_CUST Site Manager → Content Explorer
레이아웃 컨테이너 Group / (Spaces & Pages) Page / Space
사용자 할당 SU01 역할 배정 IdP → 역할 컬렉션 매핑
개인화 저장소 ABAP 테이블 (LPD_CUST 등) SaaS 스토리지 (사용자별 격리)
캐시 관리 /UI2/CACHE_DEL 플랫폼 자동 관리 (수동 개입 최소)
핵심 차이는 권한 매핑 체계입니다. 온프레미스는 PFCG 역할이 카탈로그와 그룹을 직접 품고 있는 반면, BTP는 XSUAA 역할 컬렉션이 Site Manager에서 정의한 콘텐츠 역할을 참조하는 간접 구조입니다. 이로 인해 BTP에서는 PFCG 없이도 역할 기반 타일 관리가 가능하지만, 온프레미스 백엔드와 연동할 경우 두 권한 체계를 동시에 관리해야 하는 복잡도가 생깁니다.
댓글 0
아직 댓글이 없습니다.