📖 이 글에서 다루는 내용과 목표
온프레미스 Fiori Launchpad를 시스템마다 따로 관리하다 보면 카탈로그·역할·테마가 제각각 흩어지고, S/4HANA·SuccessFactors·커스텀 UI5 앱을 한 화면에 모으는 일이 점점 어려워집니다. SAP Build Work Zone, standard edition(구 SAP Launchpad service)은 BTP 위에서 이 진입점을 중앙 집중형으로 통합하는 서비스입니다. 이 글을 끝까지 따라가면 아래 항목을 직접 수행할 수 있습니다.
- BTP 서브어카운트에 Work Zone standard 구독 및 역할 설정
- 커스텀 UI5 앱을 HTML5 Repository로 배포하고 사이트에 통합
- 콘텐츠 프로바이더로 S/4HANA 앱을 페더레이션
- Spaces & Pages 기반 화면 구성과 운영 트러블슈팅
📚 미리 갖춰두면 좋은 배경
BTP 서브어카운트·엔타이틀먼트 개념, Cloud Foundry 환경에 MTA를 배포해 본 경험, SAPUI5 앱의 manifest.json 구조에 대한 기본 이해가 있으면 수월합니다. XSUAA 기반 역할 컬렉션(Role Collection) 개념도 사이트 접근 제어 파트에서 그대로 쓰입니다.
🔧 환경 · 버전 · 준비물
이 글의 예제는 다음 구성을 기준으로 합니다.
- SAP BTP: Cloud Foundry 환경 서브어카운트 (트라이얼 또는 엔터프라이즈)
- SAP Build Work Zone, standard edition: 서비스 플랜
standard구독 (advanced edition은 워크스페이스·카드 등 협업 기능이 추가된 상위 에디션) - SAPUI5: 1.120 LTS 이상 권장
- 도구: SAP Business Application Studio(BAS) 또는 로컬
cf CLI+mbt빌드 도구 - 선택: 페더레이션 실습용 S/4HANA 2023(온프레미스) 또는 S/4HANA Cloud 테넌트
구독 후 BTP 콕핏에서 본인 사용자에게 Launchpad_Admin 역할 컬렉션을 반드시 할당해야 Site Manager에 들어갈 수 있습니다. 최종 사용자는 Launchpad_External_User 또는 커스텀 역할로 접근합니다.
💡 핵심 개념 — 왜 "중앙 집중형"인가
온프레미스 Launchpad는 각 백엔드 시스템에 종속된 "지점 매장"입니다. 매장마다 진열(카탈로그)과 간판(테마)을 따로 관리해야 합니다. 반면 Work Zone은 "백화점 본점" 모델입니다. 각 시스템은 상품(앱)을 공급하는 콘텐츠 프로바이더(Content Provider)가 되고, 본점인 Work Zone 사이트가 진열·권한·브랜딩을 한 곳에서 통제합니다.
구조를 계층으로 정리하면 다음과 같습니다.
- Site Manager: 관리자가 사이트를 생성·설정하는 콘솔. Site Directory, Content Manager, Provider Manager, Settings로 구성됩니다.
- Content Manager: 앱(App), 카탈로그(Catalog), 그룹(Group), 역할(Role)을 관리하는 곳. 앱은 카탈로그에 담기고, 역할이 "누가 무엇을 보는가"를 결정합니다.
- 콘텐츠 채널: 콘텐츠가 유입되는 경로가 세 가지입니다. (1) HTML5 Repository — BTP에 직접 배포한 커스텀 UI5 앱, (2) 콘텐츠 프로바이더 — S/4HANA 등 원격 시스템의 역할·카탈로그를 노출 방식으로 가져오는 콘텐츠 페더레이션, (3) 수동 등록 — URL 앱 등.
- Spaces & Pages: 최신 시각 구조. 역할에 스페이스를 할당하고, 스페이스 안의 페이지에 섹션·비주얼라이제이션(타일)을 배치합니다. 기존 그룹 기반 홈페이지보다 화면 설계 자유도가 높아 일반적으로 권장되는 방식입니다.
동작 원리의 핵심은 디자인타임과 런타임의 분리입니다. 페더레이션 시 원격 시스템의 앱 메타데이터(타이틀, 인텐트, 디바이스 지원)는 디자인타임 destination으로 주기적으로 동기화되고, 실제 앱 실행 트래픽은 런타임 destination을 통해 사용자 → Work Zone → (프린시펄 전파) → 백엔드로 흐릅니다. 그래서 destination을 반드시 디자인타임/런타임 한 쌍으로 구성합니다.
💻 실전 구성 3단계
1단계 — 커스텀 UI5 앱을 사이트에 올리는 기본 예제. 판매 오더 조회 앱(salesorder-monitor)을 가정합니다. Work Zone이 앱을 식별하려면 manifest.json에 인바운드 인텐트가 선언되어 있어야 합니다.
{
"sap.app": {
"id": "com.acme.salesordermonitor",
"crossNavigation": {
"inbounds": {
"SalesOrder-monitor": {
"semanticObject": "SalesOrder",
"action": "monitor",
"title": "{{appTitle}}",
"signature": { "parameters": {}, "additionalParameters": "allowed" }
}
}
}
},
"sap.cloud": { "public": true, "service": "acme.sales.service" }
}
mta.yaml에서 HTML5 Repository와 destination 서비스에 연결해 배포합니다.
modules:
- name: salesorder-monitor
type: html5
path: app/salesorder-monitor
build-parameters:
build-result: dist
supported-platforms: []
resources:
- name: acme-html5-repo-host
type: org.cloudfoundry.managed-service
parameters:
service: html5-apps-repo
service-plan: app-host
mbt build && cf deploy 후 Content Manager의 Content Explorer에 "HTML5 Apps" 채널로 앱이 나타나며, 이를 내 콘텐츠로 추가 → 카탈로그·역할에 배정 → 페이지에 타일 배치 순으로 진행하면 사이트에서 실행됩니다.
2단계 — 실무 시나리오: S/4HANA 페더레이션과 라우팅 제어. 커스텀 앱이 백엔드 OData를 호출하려면 라우팅 계층(xs-app.json)에서 destination으로 위임하고, 인증 실패를 명시적으로 처리해야 합니다.
{
"welcomeFile": "/index.html",
"authenticationMethod": "route",
"routes": [
{
"source": "^/odata/v4/SalesOrderService/(.*)$",
"target": "/odata/v4/SalesOrderService/$1",
"destination": "s4h-runtime",
"authenticationType": "xsuaa",
"csrfProtection": true
},
{ "source": "^(.*)$", "target": "$1", "service": "html5-apps-repo-rt" }
],
"logout": { "logoutEndpoint": "/do/logout" }
}
S/4HANA를 콘텐츠 프로바이더로 등록할 때는 서브어카운트 destination을 두 개 만듭니다. 백엔드에서 /UI2/CDM3_EXP_SCOPE로 노출 범위를 지정한 뒤 아래처럼 구성합니다.
# 디자인타임: 콘텐츠 메타데이터 동기화용
Name: s4h-design
URL: https://s4h.acme.corp:44300/sap/bc/ui2/cdm3
Authentication: BasicAuthentication # 기술 사용자
sap-client: "100"
# 런타임: 실제 앱 실행 트래픽용 (프린시펄 전파)
Name: s4h-runtime
URL: https://s4h.acme.corp:44300
ProxyType: OnPremise # Cloud Connector 경유
Authentication: PrincipalPropagation
Provider Manager에서 이 두 destination을 지정해 프로바이더를 생성하면 원격 역할(예: ZSD_SALES_CLERK)이 Work Zone 역할로 유입되고, 여기에 로컬 사용자·역할 컬렉션을 매핑하면 페더레이션이 완성됩니다. 동기화 실패 시 Provider Manager의 상태 로그와 "Reload content" 이력을 먼저 확인하는 습관이 트러블슈팅 시간을 크게 줄여줍니다.
3단계 — 프로덕션: 전송·보안·성능. 운영 환경에서는 사이트 구성을 손으로 복제하지 않고 SAP Cloud Transport Management(cTMS)로 전송합니다. Site Settings에서 전송을 활성화하면 사이트·콘텐츠 변경분을 MTA 아카이브로 큐에 넣어 DEV → QA → PRD로 이동시킬 수 있습니다. 보안 측면에서는 역할 컬렉션을 IdP 그룹과 매핑해 개별 사용자 할당을 없애는 것이 일반적으로 권장됩니다.
{
"role-collections": [
{
"name": "ACME_Sales_Clerk",
"description": "판매 오더 조회 사용자",
"role-template-references": [
"$XSAPPNAME.SalesOrderViewer"
],
"attribute-mappings": [
{ "idp-group": "SALES_TEAM_KR" }
]
}
]
}
성능 관점 체크포인트는 세 가지입니다. (1) UI5 리소스는 사이트 설정에서 최신 안정 버전을 고정해 캐시 적중률을 높이고, (2) 페더레이션 콘텐츠는 필요 역할만 노출해 초기 로딩 페이로드를 줄이며, (3) 온프레미스 구간은 Cloud Connector를 고가용성(마스터/섀도)으로 구성합니다. 배포 검증은 파이프라인에서 헬스체크로 자동화할 수 있습니다.
// CI 파이프라인용 스모크 테스트 (Node.js)
const assert = require("node:assert");
async function checkSite(siteUrl) {
const res = await fetch(`${siteUrl}/cp.portal/site`, { redirect: "manual" });
// 미인증 접근은 IdP로 리다이렉트되어야 정상
assert.ok([302, 303].includes(res.status), `unexpected status ${res.status}`);
console.log("launchpad reachable:", res.status);
}
checkSite(process.env.WZ_SITE_URL).catch((e) => { console.error(e); process.exit(1); });
⚠️ 자주 겪는 문제와 해결 FAQ
Q1. 배포한 HTML5 앱이 Content Explorer에 안 보입니다. manifest.json의 sap.cloud 섹션 누락 또는 인바운드 인텐트 미선언이 가장 흔한 원인입니다. semanticObject/action이 있는지, 빌드 결과물에 manifest가 포함됐는지 확인하세요. 배포 직후에는 수 분의 반영 지연도 있을 수 있습니다.
Q2. 페더레이션한 S/4HANA 앱 실행 시 로그인 창이 다시 뜹니다. 런타임 destination이 PrincipalPropagation이 아니거나, Cloud Connector에서 시스템 매핑·프린시펄 타입(X.509) 설정이 빠진 경우입니다. 백엔드의 신뢰 구성(CA 인증서 등록)까지 한 세트로 점검해야 합니다.
Q3. 사용자에게 타일이 보이지 않습니다. Work Zone의 가시성은 "역할 → (스페이스 → 페이지) + 카탈로그" 두 갈래가 모두 충족돼야 합니다. 역할에 사용자를 할당했어도 해당 역할에 스페이스가 배정되지 않았거나, 앱이 역할에 연결된 카탈로그에 없으면 화면에 나타나지 않습니다.
Q4. Site Manager 진입 시 403이 발생합니다. Launchpad_Admin 역할 컬렉션 할당 후 브라우저 세션을 완전히 로그아웃해야 새 토큰에 반영됩니다. 시크릿 창으로 재시도해 보는 것이 빠릅니다.
🚀 이어서 확장할 주제
표준 에디션으로 통합 진입점을 구축했다면, 다음 확장 경로를 검토해 볼 만합니다. (1) SAP Build Work Zone, advanced edition으로 업그레이드해 워크스페이스·UI Integration Cards 기반 협업 포털 구성, (2) SAP Mobile Start 연동으로 동일 사이트를 모바일 네이티브 진입점으로 노출, (3) cTMS와 CI/CD 서비스를 묶은 사이트 구성 전송 자동화, (4) SAP Cloud Identity Services(IAS)와의 통합으로 그룹 기반 권한 거버넌스 고도화가 자연스러운 순서입니다.
📚 더 읽어보면 좋은 문서
댓글 0
아직 댓글이 없습니다.